/ Hex Artifact Content
Login

Artifact 19e244e554e5df3f49d4e15233527753fadbcc4d:


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 33 20 6f 70 65 72 61 6e 64 73 2e 20  and 3 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 20 61 6e 64   Operands P1 and
0410: 20 50 32 20 61 72 65 20 69 6e 74 65 67 65 72 73   P2 are integers
0420: 2e 20 20 4f 70 65 72 61 6e 64 20 50 33 20 0a 2a  .  Operand P3 .*
0430: 2a 20 69 73 20 61 20 6e 75 6c 6c 2d 74 65 72 6d  * is a null-term
0440: 69 6e 61 74 65 64 20 73 74 72 69 6e 67 2e 20 20  inated string.  
0450: 20 54 68 65 20 50 32 20 6f 70 65 72 61 6e 64 20   The P2 operand 
0460: 6d 75 73 74 20 62 65 20 6e 6f 6e 2d 6e 65 67 61  must be non-nega
0470: 74 69 76 65 2e 0a 2a 2a 20 4f 70 63 6f 64 65 73  tive..** Opcodes
0480: 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20   will typically 
0490: 69 67 6e 6f 72 65 20 6f 6e 65 20 6f 72 20 6d 6f  ignore one or mo
04a0: 72 65 20 6f 70 65 72 61 6e 64 73 2e 20 20 4d 61  re operands.  Ma
04b0: 6e 79 20 6f 70 63 6f 64 65 73 0a 2a 2a 20 69 67  ny opcodes.** ig
04c0: 6e 6f 72 65 20 61 6c 6c 20 74 68 72 65 65 20 6f  nore all three o
04d0: 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a 2a 2a 20 43  perands..**.** C
04e0: 6f 6d 70 75 74 61 74 69 6f 6e 20 72 65 73 75 6c  omputation resul
04f0: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  ts are stored on
0500: 20 61 20 73 74 61 63 6b 2e 20 20 45 61 63 68 20   a stack.  Each 
0510: 65 6e 74 72 79 20 6f 6e 20 74 68 65 0a 2a 2a 20  entry on the.** 
0520: 73 74 61 63 6b 20 69 73 20 65 69 74 68 65 72 20  stack is either 
0530: 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 20 6e 75  an integer, a nu
0540: 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74  ll-terminated st
0550: 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74 69 6e 67  ring, a floating
0560: 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d 62 65 72   point.** number
0570: 2c 20 6f 72 20 74 68 65 20 53 51 4c 20 22 4e 55  , or the SQL "NU
0580: 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41 6e 20 69  LL" value.  An i
0590: 6e 70 6c 69 63 69 74 20 63 6f 6e 76 65 72 73 69  nplicit conversi
05a0: 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a 2a 20 74  on from one.** t
05b0: 79 70 65 20 74 6f 20 74 68 65 20 6f 74 68 65 72  ype to the other
05c0: 20 6f 63 63 75 72 73 20 61 73 20 6e 65 63 65 73   occurs as neces
05d0: 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20 4d 6f 73  sary..** .** Mos
05e0: 74 20 6f 66 20 74 68 65 20 63 6f 64 65 20 69 6e  t of the code in
05f0: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 61   this file is ta
0600: 6b 65 6e 20 75 70 20 62 79 20 74 68 65 20 73 71  ken up by the sq
0610: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 0a  lite3VdbeExec().
0620: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 63  ** function whic
0630: 68 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20  h does the work 
0640: 6f 66 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  of interpreting 
0650: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 2e 0a  a VDBE program..
0660: 2a 2a 20 42 75 74 20 6f 74 68 65 72 20 72 6f 75  ** But other rou
0670: 74 69 6e 65 73 20 61 72 65 20 61 6c 73 6f 20 70  tines are also p
0680: 72 6f 76 69 64 65 64 20 74 6f 20 68 65 6c 70 20  rovided to help 
0690: 69 6e 20 62 75 69 6c 64 69 6e 67 20 75 70 0a 2a  in building up.*
06a0: 2a 20 61 20 70 72 6f 67 72 61 6d 20 69 6e 73 74  * a program inst
06b0: 72 75 63 74 69 6f 6e 20 62 79 20 69 6e 73 74 72  ruction by instr
06c0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 56 61  uction..**.** Va
06d0: 72 69 6f 75 73 20 73 63 72 69 70 74 73 20 73 63  rious scripts sc
06e0: 61 6e 20 74 68 69 73 20 73 6f 75 72 63 65 20 66  an this source f
06f0: 69 6c 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ile in order to 
0700: 67 65 6e 65 72 61 74 65 20 48 54 4d 4c 0a 2a 2a  generate HTML.**
0710: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2c 20   documentation, 
0720: 68 65 61 64 65 72 73 20 66 69 6c 65 73 2c 20 6f  headers files, o
0730: 72 20 6f 74 68 65 72 20 64 65 72 69 76 65 64 20  r other derived 
0740: 66 69 6c 65 73 2e 20 20 54 68 65 20 66 6f 72 6d  files.  The form
0750: 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65  atting.** of the
0760: 20 63 6f 64 65 20 69 6e 20 74 68 69 73 20 66 69   code in this fi
0770: 6c 65 20 69 73 2c 20 74 68 65 72 65 66 6f 72 65  le is, therefore
0780: 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 53 65  , important.  Se
0790: 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65 6e 74 73  e other comments
07a0: 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66 69 6c 65  .** in this file
07b0: 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 20 20 49   for details.  I
07c0: 66 20 69 6e 20 64 6f 75 62 74 2c 20 64 6f 20 6e  f in doubt, do n
07d0: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
07e0: 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63 6f 6d 6d  existing.** comm
07f0: 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e 64 65 6e  enting and inden
0800: 74 61 74 69 6f 6e 20 70 72 61 63 74 69 63 65 73  tation practices
0810: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 6f   when changing o
0820: 72 20 61 64 64 69 6e 67 20 63 6f 64 65 2e 0a 2a  r adding code..*
0830: 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62 65 2e 63  *.** $Id: vdbe.c
0840: 2c 76 20 31 2e 35 39 31 20 32 30 30 37 2f 30 33  ,v 1.591 2007/03
0850: 2f 31 35 20 31 32 3a 30 35 3a 33 36 20 64 61 6e  /15 12:05:36 dan
0860: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
0870: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0880: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
0890: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
08a0: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e 63  e <ctype.h>.#inc
08b0: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08d0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08e0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08f0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
0900: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
0910: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0920: 20 4f 50 5f 4d 6f 76 65 58 58 2c 20 4f 50 5f 4e   OP_MoveXX, OP_N
0930: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0940: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0950: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0960: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0970: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0980: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0990: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
09a0: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
09b0: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09c0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09d0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09e0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09f0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
0a00: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
0a10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a20: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a30: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a50: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a60: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a70: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a80: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a90: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0aa0: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0ab0: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0ac0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ad0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ae0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0af0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0b00: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0b10: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b20: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b30: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b40: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b50: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b60: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b70: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b80: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b90: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0ba0: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0bb0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0bc0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bd0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0be0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bf0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0c00: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0c10: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c20: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c30: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c40: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c50: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c60: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c70: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c80: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 69 6e 67 20  or not occuring 
0c90: 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20 74  at appropriate t
0ca0: 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61 72  imes.   This var
0cb0: 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20  iable.** has no 
0cc0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0cd0: 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69  han to help veri
0ce0: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0cf0: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  peration of the.
0d00: 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  ** library..*/.#
0d10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0d20: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f  T.int sqlite3_so
0d30: 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  rt_count = 0;.#e
0d40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6c 65  ndif../*.** Rele
0d50: 61 73 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  ase the memory a
0d60: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0d70: 68 65 20 67 69 76 65 6e 20 73 74 61 63 6b 20 6c  he given stack l
0d80: 65 76 65 6c 2e 20 20 54 68 69 73 0a 2a 2a 20 6c  evel.  This.** l
0d90: 65 61 76 65 73 20 74 68 65 20 4d 65 6d 2e 66 6c  eaves the Mem.fl
0da0: 61 67 73 20 66 69 65 6c 64 20 69 6e 20 61 6e 20  ags field in an 
0db0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61  inconsistent sta
0dc0: 74 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  te..*/.#define R
0dd0: 65 6c 65 61 73 65 28 50 29 20 69 66 28 28 50 29  elease(P) if((P)
0de0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
0df0: 7b 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  { sqlite3VdbeMem
0e00: 52 65 6c 65 61 73 65 28 50 29 3b 20 7d 0a 0a 2f  Release(P); }../
0e10: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
0e20: 20 67 69 76 65 6e 20 73 74 61 63 6b 20 65 6e 74   given stack ent
0e30: 69 74 79 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ity into a strin
0e40: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
0e50: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
0e60: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
0e70: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
0e80: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
0e90: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
0ea0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
0eb0: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
0ec0: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
0ed0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
0ee0: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
0ef0: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
0f00: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  em; }../*.** Con
0f10: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 73  vert the given s
0f20: 74 61 63 6b 20 65 6e 74 69 74 79 20 69 6e 74 6f  tack entity into
0f30: 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 68   a string that h
0f40: 61 73 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64  as been obtained
0f50: 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  .** from sqliteM
0f60: 61 6c 6c 6f 63 28 29 2e 20 20 54 68 69 73 20 69  alloc().  This i
0f70: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
0f80: 20 53 74 72 69 6e 67 69 66 79 28 29 20 61 62 6f   Stringify() abo
0f90: 76 65 20 69 6e 20 74 68 61 74 0a 2a 2a 20 53 74  ve in that.** St
0fa0: 72 69 6e 67 69 66 79 28 29 20 77 69 6c 6c 20 75  ringify() will u
0fb0: 73 65 20 74 68 65 20 4e 42 46 53 20 62 79 74 65  se the NBFS byte
0fc0: 73 20 6f 66 20 73 74 61 74 69 63 20 73 74 72 69  s of static stri
0fd0: 6e 67 20 73 70 61 63 65 20 69 66 20 74 68 65 20  ng space if the 
0fe0: 73 74 72 69 6e 67 0a 2a 2a 20 77 69 6c 6c 20 66  string.** will f
0ff0: 69 74 20 62 75 74 20 74 68 69 73 20 72 6f 75 74  it but this rout
1000: 69 6e 65 20 61 6c 77 61 79 73 20 6d 61 6c 6c 6f  ine always mallo
1010: 63 73 20 66 6f 72 20 73 70 61 63 65 2e 0a 2a 2a  cs for space..**
1020: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1030: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1040: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 23 64 65  f memory..*/.#de
1050: 66 69 6e 65 20 44 79 6e 61 6d 69 63 69 66 79 28  fine Dynamicify(
1060: 50 2c 65 6e 63 29 20 73 71 6c 69 74 65 33 56 64  P,enc) sqlite3Vd
1070: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 69 66 79 28  beMemDynamicify(
1080: 50 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65  P)../*.** The he
1090: 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64  ader of a record
10a0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73   consists of a s
10b0: 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65  equence variable
10c0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
10d0: 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67  ..** These integ
10e0: 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61  ers are almost a
10f0: 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20  lways small and 
1100: 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61  are encoded as a
1110: 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a   single byte..**
1120: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1130: 61 63 72 6f 20 74 61 6b 65 73 20 61 64 76 61 6e  acro takes advan
1140: 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74  tage this fact t
1150: 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74  o provide a fast
1160: 20 64 65 63 6f 64 65 0a 2a 2a 20 6f 66 20 74 68   decode.** of th
1170: 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20  e integers in a 
1180: 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20  record header.  
1190: 49 74 20 69 73 20 66 61 73 74 65 72 20 66 6f 72  It is faster for
11a0: 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
11b0: 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 69 6e  .** where the in
11c0: 74 65 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c  teger is a singl
11d0: 65 20 62 79 74 65 2e 20 20 49 74 20 69 73 20 61  e byte.  It is a
11e0: 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77   little slower w
11f0: 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  hen the.** integ
1200: 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72  er is two or mor
1210: 65 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76  e bytes.  But ov
1220: 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74  erall it is fast
1230: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  er..**.** The fo
1240: 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69  llowing expressi
1250: 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c 65  ons are equivale
1260: 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20  nt:.**.**     x 
1270: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
1280: 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a  nt32( A, &B );.*
1290: 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 47 65 74  *.**     x = Get
12a0: 56 61 72 69 6e 74 28 20 41 2c 20 42 20 29 3b 0a  Varint( A, B );.
12b0: 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 47 65  **.*/.#define Ge
12c0: 74 56 61 72 69 6e 74 28 41 2c 42 29 20 20 28 28  tVarint(A,B)  ((
12d0: 42 20 3d 20 2a 28 41 29 29 3c 3d 30 78 37 66 20  B = *(A))<=0x7f 
12e0: 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 47 65 74  ? 1 : sqlite3Get
12f0: 56 61 72 69 6e 74 33 32 28 41 2c 20 26 42 29 29  Varint32(A, &B))
1300: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d  ../*.** An ephem
1310: 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75  eral string valu
1320: 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20  e (signified by 
1330: 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c  the MEM_Ephem fl
1340: 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ag) contains.** 
1350: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64  a pointer to a d
1360: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
1370: 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72  ated string wher
1380: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74  e some other ent
1390: 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e  ity.** is respon
13a0: 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f  sible for deallo
13b0: 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69  cating that stri
13c0: 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65  ng.  Because the
13d0: 20 73 74 61 63 6b 20 65 6e 74 72 79 0a 2a 2a 20   stack entry.** 
13e0: 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c  does not control
13f0: 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20   the string, it 
1400: 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64  might be deleted
1410: 20 77 69 74 68 6f 75 74 20 74 68 65 20 73 74 61   without the sta
1420: 63 6b 0a 2a 2a 20 65 6e 74 72 79 20 6b 6e 6f 77  ck.** entry know
1430: 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ing it..**.** Th
1440: 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65  is routine conve
1450: 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rts an ephemeral
1460: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64   string into a d
1470: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
1480: 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74  ated.** string t
1490: 68 61 74 20 74 68 65 20 73 74 61 63 6b 20 65 6e  hat the stack en
14a0: 74 72 79 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  try itself contr
14b0: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
14c0: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
14d0: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
14e0: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e  m string into an
14f0: 20 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e   MEM_Dyn string.
1500: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1510: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1520: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1530: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
1540: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
1550: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
1560: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
1570: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
1580: 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65  .** Argument pMe
1590: 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 6d 65  m points at a me
15a0: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
15b0: 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f  ill be passed to
15c0: 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e   a.** user-defin
15d0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72  ed function or r
15e0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
15f0: 73 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c  ser as the resul
1600: 74 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a  t of a query..**
1610: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
1620: 6d 65 6e 74 2c 20 27 64 62 5f 65 6e 63 27 20 69  ment, 'db_enc' i
1630: 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
1640: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 65 20  ing used by the 
1650: 76 64 62 65 20 66 6f 72 0a 2a 2a 20 73 74 61 63  vdbe for.** stac
1660: 6b 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54 68  k variables.  Th
1670: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
1680: 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61 6e  the pMem->enc an
1690: 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a 20  d pMem->type.** 
16a0: 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20 62  variables used b
16b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
16c0: 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65 73  lue_*() routines
16d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74 6f  ..*/.#define sto
16e0: 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29 20  reTypeInfo(A,B) 
16f0: 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41  _storeTypeInfo(A
1700: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 73  ).static void _s
1710: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65 6d  toreTypeInfo(Mem
1720: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1730: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1740: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1750: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1760: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1770: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1780: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1790: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
17a0: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
17b0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
17c0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
17d0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
17e0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
17f0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
1800: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1810: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1820: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1830: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1840: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1850: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1860: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1870: 2a 0a 2a 2a 20 50 6f 70 20 74 68 65 20 73 74 61  *.** Pop the sta
1880: 63 6b 20 4e 20 74 69 6d 65 73 2e 0a 2a 2f 0a 73  ck N times..*/.s
1890: 74 61 74 69 63 20 76 6f 69 64 20 70 6f 70 53 74  tatic void popSt
18a0: 61 63 6b 28 4d 65 6d 20 2a 2a 70 70 54 6f 73 2c  ack(Mem **ppTos,
18b0: 20 69 6e 74 20 4e 29 7b 0a 20 20 4d 65 6d 20 2a   int N){.  Mem *
18c0: 70 54 6f 73 20 3d 20 2a 70 70 54 6f 73 3b 0a 20  pTos = *ppTos;. 
18d0: 20 77 68 69 6c 65 28 20 4e 3e 30 20 29 7b 0a 20   while( N>0 ){. 
18e0: 20 20 20 4e 2d 2d 3b 0a 20 20 20 20 52 65 6c 65     N--;.    Rele
18f0: 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 20 20 70  ase(pTos);.    p
1900: 54 6f 73 2d 2d 3b 0a 20 20 7d 0a 20 20 2a 70 70  Tos--;.  }.  *pp
1910: 54 6f 73 20 3d 20 70 54 6f 73 3b 0a 7d 0a 0a 2f  Tos = pTos;.}../
1920: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 63 75  *.** Allocate cu
1930: 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72  rsor number iCur
1940: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  .  Return a poin
1950: 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75  ter to it.  Retu
1960: 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65  rn NULL.** if we
1970: 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f   run out of memo
1980: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 43 75  ry..*/.static Cu
1990: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19a0: 72 73 6f 72 28 56 64 62 65 20 2a 70 2c 20 69 6e  rsor(Vdbe *p, in
19b0: 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 29  t iCur, int iDb)
19c0: 7b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 78 3b  {.  Cursor *pCx;
19d0: 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c  .  assert( iCur<
19e0: 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
19f0: 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  if( p->apCsr[iCu
1a00: 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  r] ){.    sqlite
1a10: 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1a20: 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  p, p->apCsr[iCur
1a30: 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 61 70 43  ]);.  }.  p->apC
1a40: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
1a50: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73   sqliteMalloc( s
1a60: 69 7a 65 6f 66 28 43 75 72 73 6f 72 29 20 29 3b  izeof(Cursor) );
1a70: 0a 20 20 69 66 28 20 70 43 78 20 29 7b 0a 20 20  .  if( pCx ){.  
1a80: 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62    pCx->iDb = iDb
1a90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
1aa0: 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79  Cx;.}../*.** Try
1ab0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61   to convert a va
1ac0: 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72  lue into a numer
1ad0: 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ic representatio
1ae0: 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64  n if we can.** d
1af0: 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73  o so without los
1b00: 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1b10: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1b20: 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67  s, if the string
1b30: 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61  .** looks like a
1b40: 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74   number, convert
1b50: 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65   it into a numbe
1b60: 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  r.  If it does n
1b70: 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20  ot.** look like 
1b80: 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20  a number, leave 
1b90: 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61  it alone..*/.sta
1ba0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75  tic void applyNu
1bb0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65  mericAffinity(Me
1bc0: 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66 28 20  m *pRec){.  if( 
1bd0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28  (pRec->flags & (
1be0: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
1bf0: 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  ))==0 ){.    int
1c00: 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20 73 71   realnum;.    sq
1c10: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
1c20: 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29 3b 0a  erminate(pRec);.
1c30: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
1c40: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a 20 20  lags&MEM_Str).  
1c50: 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65         && sqlite
1c60: 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63 2d 3e  3IsNumber(pRec->
1c70: 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70 52 65  z, &realnum, pRe
1c80: 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20 20 20  c->enc) ){.     
1c90: 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 20 20   i64 value;.    
1ca0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
1cb0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52 65 63  ngeEncoding(pRec
1cc0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
1cd0: 20 20 20 20 20 20 69 66 28 20 21 72 65 61 6c 6e        if( !realn
1ce0: 75 6d 20 26 26 20 73 71 6c 69 74 65 33 61 74 6f  um && sqlite3ato
1cf0: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 76 61  i64(pRec->z, &va
1d00: 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20  lue) ){.        
1d10: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
1d20: 6c 65 61 73 65 28 70 52 65 63 29 3b 0a 20 20 20  lease(pRec);.   
1d30: 20 20 20 20 20 70 52 65 63 2d 3e 69 20 3d 20 76       pRec->i = v
1d40: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 70 52  alue;.        pR
1d50: 65 63 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ec->flags = MEM_
1d60: 49 6e 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  Int;.      }else
1d70: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
1d80: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
1d90: 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pRec);.      }. 
1da0: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
1db0: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
1dc0: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
1dd0: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
1de0: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
1df0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
1e00: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
1e10: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
1e20: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
1e30: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
1e40: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
1e50: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
1e60: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
1e70: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
1e80: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
1e90: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
1ea0: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
1eb0: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
1ec0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
1ed0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
1ee0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
1ef0: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
1f00: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
1f10: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
1f20: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
1f30: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
1f40: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
1f50: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
1f60: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
1f70: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
1f80: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
1f90: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
1fa0: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
1fb0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
1fc0: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
1fd0: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
1fe0: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
1ff0: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2000: 4d 65 6d 20 2a 70 52 65 63 2c 20 63 68 61 72 20  Mem *pRec, char 
2010: 61 66 66 69 6e 69 74 79 2c 20 75 38 20 65 6e 63  affinity, u8 enc
2020: 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74  ){.  if( affinit
2030: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  y==SQLITE_AFF_TE
2040: 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c  XT ){.    /* Onl
2050: 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f  y attempt the co
2060: 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54  nversion to TEXT
2070: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
2080: 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a  integer or real.
2090: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
20a0: 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20  ation (blob and 
20b0: 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20  NULL do not get 
20c0: 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e  converted) but n
20d0: 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20  o string.    ** 
20e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a  representation..
20f0: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30      */.    if( 0
2100: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
2110: 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65 63  EM_Str) && (pRec
2120: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2130: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2140: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2150: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65  MemStringify(pRe
2160: 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20  c, enc);.    }. 
2170: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26     pRec->flags &
2180: 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  = ~(MEM_Real|MEM
2190: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69  _Int);.  }else i
21a0: 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c  f( affinity!=SQL
21b0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a  ITE_AFF_NONE ){.
21c0: 20 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69      assert( affi
21d0: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
21e0: 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69  _INTEGER || affi
21f0: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2200: 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20  _REAL.          
2210: 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d     || affinity==
2220: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
2230: 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e  IC );.    applyN
2240: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2250: 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52  Rec);.    if( pR
2260: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
2270: 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71  Real ){.      sq
2280: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2290: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
22a0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
22b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
22c0: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20  t the type of a 
22d0: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
22e0: 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f  t or a result co
22f0: 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e  lumn.** into a n
2300: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
2310: 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68  ation.  Use eith
2320: 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  er INTEGER or RE
2330: 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20  AL whichever.** 
2340: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20  is appropriate. 
2350: 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65   But only do the
2360: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69   conversion if i
2370: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69  t is possible wi
2380: 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66  thout.** loss of
2390: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64   information and
23a0: 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69   return the revi
23b0: 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20  sed type of the 
23c0: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  argument..**.** 
23d0: 54 68 69 73 20 69 73 20 61 6e 20 45 58 50 45 52  This is an EXPER
23e0: 49 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20  IMENTAL api and 
23f0: 69 73 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68  is subject to ch
2400: 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e  ange or removal.
2410: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2420: 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79  value_numeric_ty
2430: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2440: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
2450: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2460: 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  l;.  applyNumeri
2470: 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b  cAffinity(pMem);
2480: 0a 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f  .  storeTypeInfo
2490: 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74  (pMem, 0);.  ret
24a0: 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a  urn pMem->type;.
24b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
24c0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
24d0: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
24e0: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
24f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2500: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2510: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2520: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2530: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2540: 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
2550: 2a 70 56 61 6c 2c 20 75 38 20 61 66 66 69 6e 69  *pVal, u8 affini
2560: 74 79 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20 61  ty, u8 enc){.  a
2570: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65  pplyAffinity((Me
2580: 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69  m *)pVal, affini
2590: 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66  ty, enc);.}..#if
25a0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25b0: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
25c0: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
25d0: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
25e0: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
25f0: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
2600: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
2610: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
2620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
2630: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
2640: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
2650: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
2660: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
2670: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
2680: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
2690: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
26a0: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
26b0: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
26c0: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
26d0: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
26e0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
26f0: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
2700: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
2710: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
2720: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2730: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2740: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2750: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2760: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
2770: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
2780: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2790: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
27a0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
27b0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
27c0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
27d0: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
27e0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
27f0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
2800: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2810: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
2820: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 7a 43  ';.    }..    zC
2830: 73 72 20 2b 3d 20 73 70 72 69 6e 74 66 28 7a 43  sr += sprintf(zC
2840: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2850: 20 20 7a 43 73 72 20 2b 3d 20 73 70 72 69 6e 74    zCsr += sprint
2860: 66 28 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  f(zCsr, "%d[", p
2870: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 66 6f 72  Mem->n);.    for
2880: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
2890: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
28a0: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 70 72       zCsr += spr
28b0: 69 6e 74 66 28 7a 43 73 72 2c 20 22 25 30 32 58  intf(zCsr, "%02X
28c0: 20 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e   ", ((int)pMem->
28d0: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
28e0: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
28f0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
2900: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
2910: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
2920: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
2930: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
2940: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
2950: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
2960: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20  + = z;.    }..  
2970: 20 20 7a 43 73 72 20 2b 3d 20 73 70 72 69 6e 74    zCsr += sprint
2980: 66 28 7a 43 73 72 2c 20 22 5d 22 29 3b 0a 20 20  f(zCsr, "]");.  
2990: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
29a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
29b0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
29c0: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
29d0: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
29e0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
29f0: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
2a00: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2a10: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2a20: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2a30: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2a40: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2a50: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
2a60: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
2a70: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2a80: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
2a90: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2aa0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2ab0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
2ac0: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
2ad0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2ae0: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2af0: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2b00: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2b10: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
2b20: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
2b30: 20 20 20 20 6b 20 2b 3d 20 73 70 72 69 6e 74 66      k += sprintf
2b40: 28 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c  (&zBuf[k], "%d",
2b50: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
2b60: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
2b70: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
2b80: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
2b90: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
2ba0: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
2bb0: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
2bc0: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
2bd0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
2be0: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
2bf0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
2c00: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
2c10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
2c20: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
2c30: 20 20 6b 20 2b 3d 20 73 70 72 69 6e 74 66 28 26    k += sprintf(&
2c40: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
2c50: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
2c60: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
2c70: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
2c80: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2c90: 46 49 4c 45 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  FILE./*.** The f
2ca0: 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65  ollowing routine
2cb0: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 70   only works on p
2cc0: 65 6e 74 69 75 6d 2d 63 6c 61 73 73 20 70 72 6f  entium-class pro
2cd0: 63 65 73 73 6f 72 73 2e 0a 2a 2a 20 49 74 20 75  cessors..** It u
2ce0: 73 65 73 20 74 68 65 20 52 44 54 53 43 20 6f 70  ses the RDTSC op
2cf0: 63 6f 64 65 20 74 6f 20 72 65 61 64 20 74 68 65  code to read the
2d00: 20 63 79 63 6c 65 20 63 6f 75 6e 74 20 76 61 6c   cycle count val
2d10: 75 65 20 6f 75 74 20 6f 66 20 74 68 65 0a 2a 2a  ue out of the.**
2d20: 20 70 72 6f 63 65 73 73 6f 72 20 61 6e 64 20 72   processor and r
2d30: 65 74 75 72 6e 73 20 74 68 61 74 20 76 61 6c 75  eturns that valu
2d40: 65 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  e.  This can be 
2d50: 75 73 65 64 20 66 6f 72 20 68 69 67 68 2d 72 65  used for high-re
2d60: 73 0a 2a 2a 20 70 72 6f 66 69 6c 69 6e 67 2e 0a  s.** profiling..
2d70: 2a 2f 0a 5f 5f 69 6e 6c 69 6e 65 5f 5f 20 75 6e  */.__inline__ un
2d80: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f 6e 67  signed long long
2d90: 20 69 6e 74 20 68 77 74 69 6d 65 28 76 6f 69 64   int hwtime(void
2da0: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6c 6f  ){.  unsigned lo
2db0: 6e 67 20 6c 6f 6e 67 20 69 6e 74 20 78 3b 0a 20  ng long int x;. 
2dc0: 20 5f 5f 61 73 6d 5f 5f 28 22 72 64 74 73 63 5c   __asm__("rdtsc\
2dd0: 6e 5c 74 22 0a 20 20 20 20 20 20 20 20 20 20 22  n\t".          "
2de0: 6d 6f 76 20 25 25 65 64 78 2c 20 25 25 65 63 78  mov %%edx, %%ecx
2df0: 5c 6e 5c 74 22 0a 20 20 20 20 20 20 20 20 20 20  \n\t".          
2e00: 3a 22 3d 41 22 20 28 78 29 29 3b 0a 20 20 72 65  :"=A" (x));.  re
2e10: 74 75 72 6e 20 78 3b 0a 7d 0a 23 65 6e 64 69 66  turn x;.}.#endif
2e20: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45 43  ../*.** The CHEC
2e30: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
2e40: 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68 65  macro defined he
2e50: 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65 20  re looks to see 
2e60: 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  if the.** sqlite
2e70: 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72 6f  3_interrupt() ro
2e80: 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20 63  utine has been c
2e90: 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68 61  alled.  If it ha
2ea0: 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20  s been, then.** 
2eb0: 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68  processing of th
2ec0: 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 69  e VDBE program i
2ed0: 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a 2a  s interrupted..*
2ee0: 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
2ef0: 61 64 64 65 64 20 74 6f 20 65 76 65 72 79 20 69  added to every i
2f00: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74 20  nstruction that 
2f10: 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20 6f  does a jump in o
2f20: 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65  rder to.** imple
2f30: 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54 68  ment a loop.  Th
2f40: 69 73 20 74 65 73 74 20 75 73 65 64 20 74 6f 20  is test used to 
2f50: 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e 67  be on every sing
2f60: 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a  le instruction,.
2f70: 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61 6e  ** but that mean
2f80: 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69 6e  t we more testin
2f90: 67 20 74 68 61 74 20 77 65 20 6e 65 65 64 65 64  g that we needed
2fa0: 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74 69  .  By only testi
2fb0: 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20 6f  ng the.** flag o
2fc0: 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74 69  n jump instructi
2fd0: 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28 73  ons, we get a (s
2fe0: 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70 72  mall) speed impr
2ff0: 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66  ovement..*/.#def
3000: 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ine CHECK_FOR_IN
3010: 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66 28  TERRUPT \.   if(
3020: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
3030: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
3040: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
3050: 75 70 74 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65  upt;.../*.** Exe
3060: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
3070: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
3080: 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65  s we can then re
3090: 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  turn..**.** sqli
30a0: 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79  te3VdbeMakeReady
30b0: 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65  () must be calle
30c0: 64 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f  d before this ro
30d0: 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
30e0: 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70  o.** close the p
30f0: 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69  rogram with a fi
3100: 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20  nal OP_Halt and 
3110: 74 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61  to set up the ca
3120: 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74  llbacks.** and t
3130: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
3140: 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   pointer..**.** 
3150: 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f  Whenever a row o
3160: 72 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73  r result data is
3170: 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73   available, this
3180: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69   routine will ei
3190: 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74  ther.** invoke t
31a0: 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61  he result callba
31b0: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
31c0: 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77  one) or return w
31d0: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f  ith.** SQLITE_RO
31e0: 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61  W..**.** If an a
31f0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
3200: 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20  o open a locked 
3210: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
3220: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
3230: 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b  ill either invok
3240: 65 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62  e the busy callb
3250: 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73  ack (if there is
3260: 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c   one) or it will
3270: 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54  .** return SQLIT
3280: 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66  E_BUSY..**.** If
3290: 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
32a0: 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  , an error messa
32b0: 67 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f  ge is written to
32c0: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
32d0: 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  .** from sqliteM
32e0: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a  alloc() and p->z
32f0: 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74  ErrMsg is made t
3300: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20  o point to that 
3310: 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65  memory..** The e
3320: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f  rror code is sto
3330: 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64  red in p->rc and
3340: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
3350: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52  turns SQLITE_ERR
3360: 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  OR..**.** If the
3370: 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72   callback ever r
3380: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
3390: 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61   then the progra
33a0: 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64  m exits.** immed
33b0: 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77  iately.  There w
33c0: 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20  ill be no error 
33d0: 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65 20  message but the 
33e0: 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a  p->rc field is.*
33f0: 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  * set to SQLITE_
3400: 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72  ABORT and this r
3410: 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75  outine will retu
3420: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
3430: 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20  .**.** A memory 
3440: 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72  allocation error
3450: 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f   causes p->rc to
3460: 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
3470: 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73  E_NOMEM and this
3480: 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72  .** routine to r
3490: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
34a0: 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  OR..**.** Other 
34b0: 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74  fatal errors ret
34c0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
34d0: 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68  ..**.** After th
34e0: 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66  is routine has f
34f0: 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33  inished, sqlite3
3500: 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73  VdbeFinalize() s
3510: 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64  hould be.** used
3520: 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65   to clean up the
3530: 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20 6c   mess that was l
3540: 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69  eft behind..*/.i
3550: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
3560: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3580: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
3590: 29 7b 0a 20 20 69 6e 74 20 70 63 3b 20 20 20 20  ){.  int pc;    
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63  /* The program c
35c0: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a  ounter */.  Op *
35d0: 70 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  pOp;            
35e0: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
35f0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  t operation */. 
3600: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
3610: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56  _OK;        /* V
3620: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a  alue to return *
3630: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
3640: 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f  = p->db;       /
3650: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a  * The database *
3660: 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20  /.  u8 encoding 
3670: 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f  = ENC(db);     /
3680: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65  * The database e
3690: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d  ncoding */.  Mem
36a0: 20 2a 70 54 6f 73 3b 20 20 20 20 20 20 20 20 20   *pTos;         
36b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 65          /* Top e
36c0: 6e 74 72 79 20 69 6e 20 74 68 65 20 6f 70 65 72  ntry in the oper
36d0: 61 6e 64 20 73 74 61 63 6b 20 2a 2f 0a 23 69 66  and stack */.#if
36e0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
36f0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  .  unsigned long
3700: 20 6c 6f 6e 67 20 73 74 61 72 74 3b 20 20 2f 2a   long start;  /*
3710: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
3720: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
3730: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69  ode */.  int ori
3740: 67 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gPc;            
3750: 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63      /* Program c
3760: 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20  ounter at start 
3770: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
3780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
3790: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
37a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
37b0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30  nProgressOps = 0
37c0: 3b 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65  ;      /* Opcode
37d0: 73 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65  s executed since
37e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
37f0: 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ck. */.#endif.#i
3800: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 4d  fndef NDEBUG.  M
3810: 65 6d 20 2a 70 53 74 61 63 6b 4c 69 6d 69 74 3b  em *pStackLimit;
3820: 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70  .#endif..  if( p
3830: 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41  ->magic!=VDBE_MA
3840: 47 49 43 5f 52 55 4e 20 29 20 72 65 74 75 72 6e  GIC_RUN ) return
3850: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
3860: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61    assert( db->ma
3870: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
3880: 43 5f 42 55 53 59 20 29 3b 0a 20 20 70 54 6f 73  C_BUSY );.  pTos
3890: 20 3d 20 70 2d 3e 70 54 6f 73 3b 0a 20 20 69 66   = p->pTos;.  if
38a0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
38b0: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
38c0: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
38d0: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
38e0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
38f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
3900: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
3910: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
3920: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
3930: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
3940: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
3950: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
3960: 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  || p->rc==SQLITE
3970: 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e 72 63  _BUSY );.  p->rc
3980: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
3990: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
39a0: 69 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  in==0 );.  if( p
39b0: 2d 3e 70 6f 70 53 74 61 63 6b 20 29 7b 0a 20 20  ->popStack ){.  
39c0: 20 20 70 6f 70 53 74 61 63 6b 28 26 70 54 6f 73    popStack(&pTos
39d0: 2c 20 70 2d 3e 70 6f 70 53 74 61 63 6b 29 3b 0a  , p->popStack);.
39e0: 20 20 20 20 70 2d 3e 70 6f 70 53 74 61 63 6b 20      p->popStack 
39f0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 65  = 0;.  }.  p->re
3a00: 73 4f 6e 53 74 61 63 6b 20 3d 20 30 3b 0a 20 20  sOnStack = 0;.  
3a10: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
3a20: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45  nBusy = 0;.  CHE
3a30: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3a40: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
3a50: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
3a60: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3a70: 47 0a 20 20 69 66 28 20 28 70 2d 3e 64 62 2d 3e  G.  if( (p->db->
3a80: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
3a90: 64 62 65 4c 69 73 74 69 6e 67 29 21 3d 30 0a 20  dbeListing)!=0. 
3aa0: 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 4f 73 46     || sqlite3OsF
3ab0: 69 6c 65 45 78 69 73 74 73 28 22 76 64 62 65 5f  ileExists("vdbe_
3ac0: 65 78 70 6c 61 69 6e 22 29 0a 20 20 29 7b 0a 20  explain").  ){. 
3ad0: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72     int i;.    pr
3ae0: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
3af0: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
3b00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3b10: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
3b20: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
3b30: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
3b40: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
3b50: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70  Op(stdout, i, &p
3b60: 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d  ->aOp[i]);.    }
3b70: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
3b80: 65 33 4f 73 46 69 6c 65 45 78 69 73 74 73 28 22  e3OsFileExists("
3b90: 76 64 62 65 5f 74 72 61 63 65 22 29 20 29 7b 0a  vdbe_trace") ){.
3ba0: 20 20 20 20 70 2d 3e 74 72 61 63 65 20 3d 20 73      p->trace = s
3bb0: 74 64 6f 75 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  tdout;.  }.#endi
3bc0: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
3bd0: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
3be0: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
3bf0: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
3c00: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->nOp );.    as
3c10: 73 65 72 74 28 20 70 54 6f 73 3c 3d 26 70 2d 3e  sert( pTos<=&p->
3c20: 61 53 74 61 63 6b 5b 70 63 5d 20 29 3b 0a 20 20  aStack[pc] );.  
3c30: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 61 6c    if( sqlite3Mal
3c40: 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 20 67 6f  locFailed() ) go
3c50: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65  to no_mem;.#ifde
3c60: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
3c70: 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a     origPc = pc;.
3c80: 20 20 20 20 73 74 61 72 74 20 3d 20 68 77 74 69      start = hwti
3c90: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
3ca0: 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70   pOp = &p->aOp[p
3cb0: 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  c];..    /* Only
3cc0: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
3cd0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3ce0: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
3cf0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3d00: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d  DEBUG.    if( p-
3d10: 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  >trace ){.      
3d20: 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20  if( pc==0 ){.   
3d30: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
3d40: 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63  E Execution Trac
3d50: 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  e:\n");.        
3d60: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
3d70: 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a  Sql(p);.      }.
3d80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3d90: 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63  ePrintOp(p->trac
3da0: 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20  e, pc, pOp);.   
3db0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72   }.    if( p->tr
3dc0: 61 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20  ace==0 && pc==0 
3dd0: 26 26 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  && sqlite3OsFile
3de0: 45 78 69 73 74 73 28 22 76 64 62 65 5f 73 71 6c  Exists("vdbe_sql
3df0: 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 20  trace") ){.     
3e00: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
3e10: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 7d 0a 23  tSql(p);.    }.#
3e20: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
3e30: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
3e40: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
3e50: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
3e60: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
3e70: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
3e80: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
3e90: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
3ea0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
3eb0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
3ec0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
3ed0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
3ee0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
3ef0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
3f00: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
3f10: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
3f20: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
3f30: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
3f40: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
3f50: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  .    }.#endif..#
3f60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
3f70: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
3f80: 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c  BACK.    /* Call
3f90: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
3fa0: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
3fb0: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
3fc0: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
3fd0: 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42  er.    ** of VDB
3fe0: 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20  E ops have been 
3ff0: 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72  executed (either
4000: 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f   since this invo
4010: 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a  cation of.    **
4020: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
4030: 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74  () or since last
4040: 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65   time the progre
4050: 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20  ss callback was 
4060: 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20  called)..    ** 
4070: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
4080: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
4090: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
40a0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
40b0: 69 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20  ine with.    ** 
40c0: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
40d0: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20  LITE_ABORT..    
40e0: 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  */.    if( db->x
40f0: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4100: 20 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72    if( db->nProgr
4110: 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73  essOps==nProgres
4120: 73 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20  sOps ){.        
4130: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
4140: 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
4150: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
4160: 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28  use;.        if(
4170: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
4180: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
4190: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
41a0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
41b0: 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
41c0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
41d0: 54 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  T;.          con
41e0: 74 69 6e 75 65 3b 20 2f 2a 20 73 6b 69 70 20 74  tinue; /* skip t
41f0: 6f 20 74 68 65 20 6e 65 78 74 20 69 74 65 72 61  o the next itera
4200: 74 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 20  tion of the for 
4210: 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 20 20  loop */.        
4220: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
4230: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
4240: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
4250: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
4260: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
4270: 6d 69 73 75 73 65 3b 0a 20 20 20 20 20 20 7d 0a  misuse;.      }.
4280: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
4290: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
42a0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  if..#ifndef NDEB
42b0: 55 47 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  UG.    /* This i
42c0: 73 20 74 6f 20 63 68 65 63 6b 20 74 68 61 74 20  s to check that 
42d0: 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
42e0: 20 6f 66 20 73 74 61 74 69 63 20 66 75 6e 63 74   of static funct
42f0: 69 6f 6e 0a 20 20 20 20 2a 2a 20 6f 70 63 6f 64  ion.    ** opcod
4300: 65 4e 6f 50 75 73 68 28 29 20 28 73 65 65 20 76  eNoPush() (see v
4310: 64 62 65 61 75 78 2e 63 29 20 72 65 74 75 72 6e  dbeaux.c) return
4320: 73 20 76 61 6c 75 65 73 20 74 68 61 74 20 6d 61  s values that ma
4330: 74 63 68 20 74 68 65 0a 20 20 20 20 2a 2a 20 69  tch the.    ** i
4340: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
4350: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
4360: 68 69 6e 65 20 69 6e 20 74 68 69 73 20 66 69 6c  hine in this fil
4370: 65 2e 20 49 66 0a 20 20 20 20 2a 2a 20 6f 70 63  e. If.    ** opc
4380: 6f 64 65 4e 6f 50 75 73 68 28 29 20 72 65 74 75  odeNoPush() retu
4390: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68  rns non-zero, th
43a0: 65 6e 20 74 68 65 20 73 74 61 63 6b 20 69 73 20  en the stack is 
43b0: 67 75 61 72 65 6e 74 65 65 64 0a 20 20 20 20 2a  guarenteed.    *
43c0: 2a 20 6e 6f 74 20 74 6f 20 67 72 6f 77 20 77 68  * not to grow wh
43d0: 65 6e 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73  en the opcode is
43e0: 20 65 78 65 63 75 74 65 64 2e 20 49 66 20 69 74   executed. If it
43f0: 20 72 65 74 75 72 6e 73 20 7a 65 72 6f 2c 20 74   returns zero, t
4400: 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 73  hen.    ** the s
4410: 74 61 63 6b 20 6d 61 79 20 67 72 6f 77 20 62 79  tack may grow by
4420: 20 61 74 20 6d 6f 73 74 20 31 2e 0a 20 20 20 20   at most 1..    
4430: 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 67 6c  **.    ** The gl
4440: 6f 62 61 6c 20 77 72 61 70 70 65 72 20 66 75 6e  obal wrapper fun
4450: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 64 62  ction sqlite3Vdb
4460: 65 4f 70 63 6f 64 65 55 73 65 73 53 74 61 63 6b  eOpcodeUsesStack
4470: 28 29 20 69 73 20 6e 6f 74 20 0a 20 20 20 20 2a  () is not .    *
4480: 2a 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 4e  * available if N
4490: 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
44a0: 20 61 74 20 62 75 69 6c 64 20 74 69 6d 65 2e 0a   at build time..
44b0: 20 20 20 20 2a 2f 20 0a 20 20 20 20 70 53 74 61      */ .    pSta
44c0: 63 6b 4c 69 6d 69 74 20 3d 20 70 54 6f 73 3b 0a  ckLimit = pTos;.
44d0: 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65 33      if( !sqlite3
44e0: 56 64 62 65 4f 70 63 6f 64 65 4e 6f 50 75 73 68  VdbeOpcodeNoPush
44f0: 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 29 20 29 7b  (pOp->opcode) ){
4500: 0a 20 20 20 20 20 20 70 53 74 61 63 6b 4c 69 6d  .      pStackLim
4510: 69 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  it++;.    }.#end
4520: 69 66 0a 0a 20 20 20 20 73 77 69 74 63 68 28 20  if..    switch( 
4530: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
4540: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
4550: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4560: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4570: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4580: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
4590: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
45a0: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
45b0: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
45c0: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
45d0: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
45e0: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
45f0: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
4600: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
4610: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
4620: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
4630: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
4640: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
4650: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
4660: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
4670: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
4680: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
4690: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
46a0: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
46b0: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
46c0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
46d0: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
46e0: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
46f0: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
4700: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
4710: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
4720: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
4730: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
4740: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
4750: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
4760: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
4770: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
4780: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
4790: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
47a0: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
47b0: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
47c0: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
47d0: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
47e0: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
47f0: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
4800: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
4810: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
4820: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
4830: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
4840: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
4850: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
4860: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
4870: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
4880: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
4890: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
48a0: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
48b0: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
48c0: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
48d0: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
48e0: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
48f0: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
4900: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
4910: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
4920: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
4930: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
4940: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
4950: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
4960: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
4970: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
4980: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
4990: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
49a0: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
49b0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
49c0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  code..**.** If a
49d0: 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20   comment on the 
49e0: 73 61 6d 65 20 6c 69 6e 65 20 61 73 20 74 68 65  same line as the
49f0: 20 22 63 61 73 65 20 4f 50 5f 22 20 63 6f 6e 73   "case OP_" cons
4a00: 74 72 75 63 74 69 6f 6e 20 63 6f 6e 74 61 69 6e  truction contain
4a10: 73 0a 2a 2a 20 74 68 65 20 77 6f 72 64 20 22 6e  s.** the word "n
4a20: 6f 2d 70 75 73 68 22 2c 20 74 68 65 6e 20 74 68  o-push", then th
4a30: 65 20 6f 70 63 6f 64 65 20 69 73 20 67 75 61 72  e opcode is guar
4a40: 65 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 67 72  enteed not to gr
4a50: 6f 77 20 74 68 65 20 0a 2a 2a 20 76 64 62 65 20  ow the .** vdbe 
4a60: 73 74 61 63 6b 20 77 68 65 6e 20 69 74 20 69 73  stack when it is
4a70: 20 65 78 65 63 75 74 65 64 2e 20 53 65 65 20 66   executed. See f
4a80: 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65 28 29  unction opcode()
4a90: 20 69 6e 0a 2a 2a 20 76 64 62 65 61 75 78 2e 63   in.** vdbeaux.c
4aa0: 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2a   for details..**
4ab0: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
4ac0: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
4ad0: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
4ae0: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
4af0: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
4b00: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
4b10: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
4b20: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
4b30: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
4b40: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
4b50: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
4b60: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
4b70: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
4b80: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
4b90: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
4ba0: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
4bb0: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
4bc0: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
4bd0: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
4be0: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
4bf0: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
4c00: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
4c10: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
4c20: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
4c30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c70: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
4c80: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
4c90: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
4ca0: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
4cb0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
4cc0: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
4cd0: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
4ce0: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
4cf0: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
4d00: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
4d10: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
4d20: 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  am..*/.case OP_G
4d30: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
4d40: 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
4d50: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4d60: 45 52 52 55 50 54 3b 0a 20 20 70 63 20 3d 20 70  ERRUPT;.  pc = p
4d70: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
4d80: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
4d90: 65 3a 20 20 47 6f 73 75 62 20 2a 20 50 32 20 2a  e:  Gosub * P2 *
4da0: 0a 2a 2a 0a 2a 2a 20 50 75 73 68 20 74 68 65 20  .**.** Push the 
4db0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
4dc0: 70 6c 75 73 20 31 20 6f 6e 74 6f 20 74 68 65 20  plus 1 onto the 
4dd0: 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 73  return address s
4de0: 74 61 63 6b 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  tack.** and then
4df0: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
4e00: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P2..**.** The r
4e10: 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 73 74  eturn address st
4e20: 61 63 6b 20 69 73 20 6f 66 20 6c 69 6d 69 74 65  ack is of limite
4e30: 64 20 64 65 70 74 68 2e 20 20 49 66 20 74 6f 6f  d depth.  If too
4e40: 20 6d 61 6e 79 0a 2a 2a 20 4f 50 5f 47 6f 73 75   many.** OP_Gosu
4e50: 62 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  b operations occ
4e60: 75 72 20 77 69 74 68 6f 75 74 20 69 6e 74 65 72  ur without inter
4e70: 76 65 6e 69 6e 67 20 4f 50 5f 52 65 74 75 72 6e  vening OP_Return
4e80: 73 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72  s, then.** the r
4e90: 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 73 74  eturn address st
4ea0: 61 63 6b 20 77 69 6c 6c 20 66 69 6c 6c 20 75 70  ack will fill up
4eb0: 20 61 6e 64 20 70 72 6f 63 65 73 73 69 6e 67 20   and processing 
4ec0: 77 69 6c 6c 20 61 62 6f 72 74 0a 2a 2a 20 77 69  will abort.** wi
4ed0: 74 68 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72  th a fatal error
4ee0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
4ef0: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
4f00: 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20   /* no-push */. 
4f10: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 74 75   assert( p->retu
4f20: 72 6e 44 65 70 74 68 3c 73 69 7a 65 6f 66 28 70  rnDepth<sizeof(p
4f30: 2d 3e 72 65 74 75 72 6e 53 74 61 63 6b 29 2f 73  ->returnStack)/s
4f40: 69 7a 65 6f 66 28 70 2d 3e 72 65 74 75 72 6e 53  izeof(p->returnS
4f50: 74 61 63 6b 5b 30 5d 29 20 29 3b 0a 20 20 70 2d  tack[0]) );.  p-
4f60: 3e 72 65 74 75 72 6e 53 74 61 63 6b 5b 70 2d 3e  >returnStack[p->
4f70: 72 65 74 75 72 6e 44 65 70 74 68 2b 2b 5d 20 3d  returnDepth++] =
4f80: 20 70 63 2b 31 3b 0a 20 20 70 63 20 3d 20 70 4f   pc+1;.  pc = pO
4f90: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65  p->p2 - 1;.  bre
4fa0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
4fb0: 3a 20 20 52 65 74 75 72 6e 20 2a 20 2a 20 2a 0a  :  Return * * *.
4fc0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 69 6d 6d 65 64  **.** Jump immed
4fd0: 69 61 74 65 6c 79 20 74 6f 20 74 68 65 20 6e 65  iately to the ne
4fe0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
4ff0: 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 75 6e  fter the last un
5000: 72 65 74 75 72 6e 65 64 0a 2a 2a 20 4f 50 5f 47  returned.** OP_G
5010: 6f 73 75 62 2e 20 20 49 66 20 61 6e 20 4f 50 5f  osub.  If an OP_
5020: 52 65 74 75 72 6e 20 68 61 73 20 6f 63 63 75 72  Return has occur
5030: 72 65 64 20 66 6f 72 20 61 6c 6c 20 4f 50 5f 47  red for all OP_G
5040: 6f 73 75 62 73 2c 20 74 68 65 6e 0a 2a 2a 20 70  osubs, then.** p
5050: 72 6f 63 65 73 73 69 6e 67 20 61 62 6f 72 74 73  rocessing aborts
5060: 20 77 69 74 68 20 61 20 66 61 74 61 6c 20 65 72   with a fatal er
5070: 72 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ror..*/.case OP_
5080: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
5090: 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a      /* no-push *
50a0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  /.  assert( p->r
50b0: 65 74 75 72 6e 44 65 70 74 68 3e 30 20 29 3b 0a  eturnDepth>0 );.
50c0: 20 20 70 2d 3e 72 65 74 75 72 6e 44 65 70 74 68    p->returnDepth
50d0: 2d 2d 3b 0a 20 20 70 63 20 3d 20 70 2d 3e 72 65  --;.  pc = p->re
50e0: 74 75 72 6e 53 74 61 63 6b 5b 70 2d 3e 72 65 74  turnStack[p->ret
50f0: 75 72 6e 44 65 70 74 68 5d 20 2d 20 31 3b 0a 20  urnDepth] - 1;. 
5100: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
5110: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
5120: 32 20 50 33 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  2 P3.**.** Exit 
5130: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
5140: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
5150: 46 69 66 6f 73 2c 20 65 74 63 20 61 72 65 20 63  Fifos, etc are c
5160: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
5170: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
5180: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
5190: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
51a0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
51b0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
51c0: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
51d0: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
51e0: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
51f0: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
5200: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
5210: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
5220: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
5230: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
5240: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
5250: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
5260: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
5270: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
5280: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
5290: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
52a0: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
52b0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
52c0: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
52d0: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
52e0: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
52f0: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
5300: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
5310: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
5320: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
5330: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
5340: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
5350: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
5360: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
5370: 33 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  3 is not null th
5380: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
5390: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
53a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
53b0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
53c0: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
53d0: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
53e0: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
53f0: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
5400: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
5410: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
5420: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
5430: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
5440: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
5450: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
5460: 20 4f 50 5f 48 61 6c 74 3a 20 7b 20 20 20 20 20   OP_Halt: {     
5470: 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73         /* no-pus
5480: 68 20 2a 2f 0a 20 20 70 2d 3e 70 54 6f 73 20 3d  h */.  p->pTos =
5490: 20 70 54 6f 73 3b 0a 20 20 70 2d 3e 72 63 20 3d   pTos;.  p->rc =
54a0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70   pOp->p1;.  p->p
54b0: 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72 72  c = pc;.  p->err
54c0: 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e  orAction = pOp->
54d0: 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  p2;.  if( pOp->p
54e0: 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  3 ){.    sqlite3
54f0: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
5500: 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 33 2c 20  rrMsg, pOp->p3, 
5510: 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 7d 0a 20  (char*)0);.  }. 
5520: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
5530: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
5540: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
5550: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
5560: 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63  E_OK );.  if( rc
5570: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
5580: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
5590: 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 72 65  ITE_BUSY;.    re
55a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
55b0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
55c0: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
55d0: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
55e0: 45 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  E;.}../* Opcode:
55f0: 20 49 6e 74 65 67 65 72 20 50 31 20 2a 20 2a 0a   Integer P1 * *.
5600: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
5610: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
5620: 31 20 69 73 20 70 75 73 68 65 64 20 6f 6e 74 6f  1 is pushed onto
5630: 20 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2f 0a 63   the stack..*/.c
5640: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
5650: 7b 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 70 54  {.  pTos++;.  pT
5660: 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  os->flags = MEM_
5670: 49 6e 74 3b 0a 20 20 70 54 6f 73 2d 3e 69 20 3d  Int;.  pTos->i =
5680: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
5690: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
56a0: 20 49 6e 74 36 34 20 2a 20 2a 20 50 33 0a 2a 2a   Int64 * * P3.**
56b0: 0a 2a 2a 20 50 33 20 69 73 20 61 20 73 74 72 69  .** P3 is a stri
56c0: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
56d0: 6e 20 6f 66 20 61 6e 20 69 6e 74 65 67 65 72 2e  n of an integer.
56e0: 20 20 43 6f 6e 76 65 72 74 20 74 68 61 74 20 69    Convert that i
56f0: 6e 74 65 67 65 72 0a 2a 2a 20 74 6f 20 61 20 36  nteger.** to a 6
5700: 34 2d 62 69 74 20 76 61 6c 75 65 20 61 6e 64 20  4-bit value and 
5710: 70 75 73 68 20 69 74 20 6f 6e 74 6f 20 74 68 65  push it onto the
5720: 20 73 74 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20   stack..*/.case 
5730: 4f 50 5f 49 6e 74 36 34 3a 20 7b 0a 20 20 70 54  OP_Int64: {.  pT
5740: 6f 73 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  os++;.  assert( 
5750: 70 4f 70 2d 3e 70 33 21 3d 30 20 29 3b 0a 20 20  pOp->p3!=0 );.  
5760: 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pTos->flags = ME
5770: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
5780: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 54 6f  |MEM_Term;.  pTo
5790: 73 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  s->z = pOp->p3;.
57a0: 20 20 70 54 6f 73 2d 3e 6e 20 3d 20 73 74 72 6c    pTos->n = strl
57b0: 65 6e 28 70 54 6f 73 2d 3e 7a 29 3b 0a 20 20 70  en(pTos->z);.  p
57c0: 54 6f 73 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Tos->enc = SQLIT
57d0: 45 5f 55 54 46 38 3b 0a 20 20 70 54 6f 73 2d 3e  E_UTF8;.  pTos->
57e0: 69 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  i = sqlite3VdbeI
57f0: 6e 74 56 61 6c 75 65 28 70 54 6f 73 29 3b 0a 20  ntValue(pTos);. 
5800: 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 7c 3d 20   pTos->flags |= 
5810: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 62 72 65 61 6b  MEM_Int;.  break
5820: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
5830: 52 65 61 6c 20 2a 20 2a 20 50 33 0a 2a 2a 0a 2a  Real * * P3.**.*
5840: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
5850: 75 65 20 50 33 20 69 73 20 63 6f 6e 76 65 72 74  ue P3 is convert
5860: 65 64 20 74 6f 20 61 20 72 65 61 6c 20 61 6e 64  ed to a real and
5870: 20 70 75 73 68 65 64 20 6f 6e 20 74 6f 20 74 68   pushed on to th
5880: 65 20 73 74 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65  e stack..*/.case
5890: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
58a0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
58b0: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 2a 2f 0a 20  s TK_FLOAT, */. 
58c0: 20 70 54 6f 73 2b 2b 3b 0a 20 20 70 54 6f 73 2d   pTos++;.  pTos-
58d0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
58e0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
58f0: 54 65 72 6d 3b 0a 20 20 70 54 6f 73 2d 3e 7a 20  Term;.  pTos->z 
5900: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 54 6f  = pOp->p3;.  pTo
5910: 73 2d 3e 6e 20 3d 20 73 74 72 6c 65 6e 28 70 54  s->n = strlen(pT
5920: 6f 73 2d 3e 7a 29 3b 0a 20 20 70 54 6f 73 2d 3e  os->z);.  pTos->
5930: 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
5940: 38 3b 0a 20 20 70 54 6f 73 2d 3e 72 20 3d 20 73  8;.  pTos->r = s
5950: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
5960: 6c 75 65 28 70 54 6f 73 29 3b 0a 20 20 70 54 6f  lue(pTos);.  pTo
5970: 73 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  s->flags |= MEM_
5980: 52 65 61 6c 3b 0a 20 20 73 71 6c 69 74 65 33 56  Real;.  sqlite3V
5990: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
59a0: 67 28 70 54 6f 73 2c 20 65 6e 63 6f 64 69 6e 67  g(pTos, encoding
59b0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
59c0: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
59d0: 38 20 2a 20 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 50  8 * * P3.**.** P
59e0: 33 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  3 points to a nu
59f0: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
5a00: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
5a10: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
5a20: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
5a30: 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f  n OP_String befo
5a40: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
5a50: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
5a60: 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  time..*/.case OP
5a70: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
5a80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
5a90: 4b 5f 53 54 52 49 4e 47 20 2a 2f 0a 20 20 61 73  K_STRING */.  as
5aa0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 21 3d 30  sert( pOp->p3!=0
5ab0: 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64   );.  pOp->opcod
5ac0: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
5ad0: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 74 72 6c 65   pOp->p1 = strle
5ae0: 6e 28 70 4f 70 2d 3e 70 33 29 3b 0a 0a 23 69 66  n(pOp->p3);..#if
5af0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5b00: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
5b10: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
5b20: 46 38 20 29 7b 0a 20 20 20 20 70 54 6f 73 2b 2b  F8 ){.    pTos++
5b30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5b40: 65 4d 65 6d 53 65 74 53 74 72 28 70 54 6f 73 2c  eMemSetStr(pTos,
5b50: 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 53 51   pOp->p3, -1, SQ
5b60: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
5b70: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
5b80: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71  f( SQLITE_OK!=sq
5b90: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
5ba0: 6e 63 6f 64 69 6e 67 28 70 54 6f 73 2c 20 65 6e  ncoding(pTos, en
5bb0: 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e  coding) ) goto n
5bc0: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20 53  o_mem;.    if( S
5bd0: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
5be0: 33 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 69  3VdbeMemDynamici
5bf0: 66 79 28 70 54 6f 73 29 20 29 20 67 6f 74 6f 20  fy(pTos) ) goto 
5c00: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 54 6f 73  no_mem;.    pTos
5c10: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
5c20: 5f 44 79 6e 29 3b 0a 20 20 20 20 70 54 6f 73 2d  _Dyn);.    pTos-
5c30: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74  >flags |= MEM_St
5c40: 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f  atic;.    if( pO
5c50: 70 2d 3e 70 33 74 79 70 65 3d 3d 50 33 5f 44 59  p->p3type==P3_DY
5c60: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
5c70: 71 6c 69 74 65 46 72 65 65 28 70 4f 70 2d 3e 70  qliteFree(pOp->p
5c80: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  3);.    }.    pO
5c90: 70 2d 3e 70 33 74 79 70 65 20 3d 20 50 33 5f 44  p->p3type = P3_D
5ca0: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
5cb0: 3e 70 33 20 3d 20 70 54 6f 73 2d 3e 7a 3b 0a 20  >p3 = pTos->z;. 
5cc0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 54 6f     pOp->p1 = pTo
5cd0: 73 2d 3e 6e 3b 0a 20 20 20 20 62 72 65 61 6b 3b  s->n;.    break;
5ce0: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  .  }.#endif.  /*
5cf0: 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
5d00: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
5d10: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
5d20: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
5d30: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
5d40: 20 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20   * P3.**.** The 
5d50: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 33 20  string value P3 
5d60: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
5d70: 74 65 73 29 20 69 73 20 70 75 73 68 65 64 20 6f  tes) is pushed o
5d80: 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 2e 0a 2a  nto the stack..*
5d90: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
5da0: 3a 20 7b 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20  : {.  pTos++;.  
5db0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 21  assert( pOp->p3!
5dc0: 3d 30 20 29 3b 0a 20 20 70 54 6f 73 2d 3e 66 6c  =0 );.  pTos->fl
5dd0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
5de0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
5df0: 6d 3b 0a 20 20 70 54 6f 73 2d 3e 7a 20 3d 20 70  m;.  pTos->z = p
5e00: 4f 70 2d 3e 70 33 3b 0a 20 20 70 54 6f 73 2d 3e  Op->p3;.  pTos->
5e10: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
5e20: 54 6f 73 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Tos->enc = encod
5e30: 69 6e 67 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ing;.  break;.}.
5e40: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
5e50: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 75 73   * * *.**.** Pus
5e60: 68 20 61 20 4e 55 4c 4c 20 6f 6e 74 6f 20 74 68  h a NULL onto th
5e70: 65 20 73 74 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65  e stack..*/.case
5e80: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 0a 20 20 70 54   OP_Null: {.  pT
5e90: 6f 73 2b 2b 3b 0a 20 20 70 54 6f 73 2d 3e 66 6c  os++;.  pTos->fl
5ea0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
5eb0: 20 20 70 54 6f 73 2d 3e 6e 20 3d 20 30 3b 0a 20    pTos->n = 0;. 
5ec0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
5ed0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5ee0: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 2f 2a 20  BLOB_LITERAL./* 
5ef0: 4f 70 63 6f 64 65 3a 20 48 65 78 42 6c 6f 62 20  Opcode: HexBlob 
5f00: 2a 20 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 50 33 20  * * P3.**.** P3 
5f10: 69 73 20 61 6e 20 55 54 46 2d 38 20 53 51 4c 20  is an UTF-8 SQL 
5f20: 68 65 78 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  hex encoding of 
5f30: 61 20 62 6c 6f 62 2e 20 54 68 65 20 62 6c 6f 62  a blob. The blob
5f40: 20 69 73 20 70 75 73 68 65 64 20 6f 6e 74 6f 20   is pushed onto 
5f50: 74 68 65 0a 2a 2a 20 76 64 62 65 20 73 74 61 63  the.** vdbe stac
5f60: 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  k..**.** The fir
5f70: 73 74 20 74 69 6d 65 20 74 68 69 73 20 69 6e 73  st time this ins
5f80: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
5f90: 73 2c 20 69 6e 20 74 72 61 6e 73 66 6f 72 6d 73  s, in transforms
5fa0: 20 69 74 73 65 6c 66 20 69 6e 74 6f 20 61 0a 2a   itself into a.*
5fb0: 2a 20 27 42 6c 6f 62 27 20 6f 70 63 6f 64 65 20  * 'Blob' opcode 
5fc0: 77 69 74 68 20 61 20 62 69 6e 61 72 79 20 62 6c  with a binary bl
5fd0: 6f 62 20 61 73 20 50 33 2e 0a 2a 2f 0a 63 61 73  ob as P3..*/.cas
5fe0: 65 20 4f 50 5f 48 65 78 42 6c 6f 62 3a 20 7b 20  e OP_HexBlob: { 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
6000: 6d 65 20 61 73 20 54 4b 5f 42 4c 4f 42 20 2a 2f  me as TK_BLOB */
6010: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
6020: 20 4f 50 5f 42 6c 6f 62 3b 0a 20 20 70 4f 70 2d   OP_Blob;.  pOp-
6030: 3e 70 31 20 3d 20 73 74 72 6c 65 6e 28 70 4f 70  >p1 = strlen(pOp
6040: 2d 3e 70 33 29 2f 32 3b 0a 20 20 69 66 28 20 70  ->p3)/2;.  if( p
6050: 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 63 68  Op->p1 ){.    ch
6060: 61 72 20 2a 7a 42 6c 6f 62 20 3d 20 73 71 6c 69  ar *zBlob = sqli
6070: 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 70 4f 70  te3HexToBlob(pOp
6080: 2d 3e 70 33 29 3b 0a 20 20 20 20 69 66 28 20 21  ->p3);.    if( !
6090: 7a 42 6c 6f 62 20 29 20 67 6f 74 6f 20 6e 6f 5f  zBlob ) goto no_
60a0: 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  mem;.    if( pOp
60b0: 2d 3e 70 33 74 79 70 65 3d 3d 50 33 5f 44 59 4e  ->p3type==P3_DYN
60c0: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
60d0: 6c 69 74 65 46 72 65 65 28 70 4f 70 2d 3e 70 33  liteFree(pOp->p3
60e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
60f0: 2d 3e 70 33 20 3d 20 7a 42 6c 6f 62 3b 0a 20 20  ->p3 = zBlob;.  
6100: 20 20 70 4f 70 2d 3e 70 33 74 79 70 65 20 3d 20    pOp->p3type = 
6110: 50 33 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 7d 65  P3_DYNAMIC;.  }e
6120: 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  lse{.    if( pOp
6130: 2d 3e 70 33 74 79 70 65 3d 3d 50 33 5f 44 59 4e  ->p3type==P3_DYN
6140: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
6150: 6c 69 74 65 46 72 65 65 28 70 4f 70 2d 3e 70 33  liteFree(pOp->p3
6160: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
6170: 2d 3e 70 33 74 79 70 65 20 3d 20 50 33 5f 53 54  ->p3type = P3_ST
6180: 41 54 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  ATIC;.    pOp->p
6190: 33 20 3d 20 22 22 3b 0a 20 20 7d 0a 0a 20 20 2f  3 = "";.  }..  /
61a0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
61b0: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
61c0: 20 4f 50 5f 42 6c 6f 62 2e 20 2a 2f 0a 7d 0a 0a   OP_Blob. */.}..
61d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
61e0: 50 31 20 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 50 33  P1 * P3.**.** P3
61f0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
6200: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
6210: 65 73 20 6c 6f 6e 67 2e 20 50 75 73 68 20 74 68  es long. Push th
6220: 69 73 0a 2a 2a 20 76 61 6c 75 65 20 6f 6e 74 6f  is.** value onto
6230: 20 74 68 65 20 73 74 61 63 6b 2e 20 54 68 69 73   the stack. This
6240: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
6250: 6e 6f 74 20 63 6f 64 65 64 20 64 69 72 65 63 74  not coded direct
6260: 6c 79 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d  ly.** by the com
6270: 70 69 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20  piler. Instead, 
6280: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79  the compiler lay
6290: 65 72 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20  er specifies.** 
62a0: 61 6e 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70  an OP_HexBlob op
62b0: 63 6f 64 65 2c 20 77 69 74 68 20 74 68 65 20 68  code, with the h
62c0: 65 78 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ex string repres
62d0: 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  entation of.** t
62e0: 68 65 20 62 6c 6f 62 20 61 73 20 50 33 2e 20 54  he blob as P3. T
62f0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
6300: 61 6e 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20  ansformed to an 
6310: 4f 50 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66  OP_Blob.** the f
6320: 69 72 73 74 20 74 69 6d 65 20 69 74 20 69 73 20  irst time it is 
6330: 65 78 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73  executed..*/.cas
6340: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 0a 20 20 70  e OP_Blob: {.  p
6350: 54 6f 73 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  Tos++;.  sqlite3
6360: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 54  VdbeMemSetStr(pT
6370: 6f 73 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 4f 70  os, pOp->p3, pOp
6380: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 62  ->p1, 0, 0);.  b
6390: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
63a0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c  * SQLITE_OMIT_BL
63b0: 4f 42 5f 4c 49 54 45 52 41 4c 20 2a 2f 0a 0a 2f  OB_LITERAL */../
63c0: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
63d0: 6c 65 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  le P1 * *.**.** 
63e0: 50 75 73 68 20 74 68 65 20 76 61 6c 75 65 20 6f  Push the value o
63f0: 66 20 76 61 72 69 61 62 6c 65 20 50 31 20 6f 6e  f variable P1 on
6400: 74 6f 20 74 68 65 20 73 74 61 63 6b 2e 20 20 41  to the stack.  A
6410: 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
6420: 61 6e 20 75 6e 6b 6e 6f 77 6e 20 69 6e 20 74 68  an unknown in th
6430: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 73  e original SQL s
6440: 74 72 69 6e 67 20 61 73 20 68 61 6e 64 65 64 20  tring as handed 
6450: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69  to sqlite3_compi
6460: 6c 65 28 29 2e 0a 2a 2a 20 41 6e 79 20 6f 63 63  le()..** Any occ
6470: 75 72 61 6e 63 65 20 6f 66 20 74 68 65 20 27 3f  urance of the '?
6480: 27 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  ' character in t
6490: 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20  he original SQL 
64a0: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a  is considered.**
64b0: 20 61 20 76 61 72 69 61 62 6c 65 2e 20 20 56 61   a variable.  Va
64c0: 72 69 61 62 6c 65 73 20 69 6e 20 74 68 65 20 53  riables in the S
64d0: 51 4c 20 73 74 72 69 6e 67 20 61 72 65 20 6e 75  QL string are nu
64e0: 6d 62 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74  mber from left t
64f0: 6f 0a 2a 2a 20 72 69 67 68 74 20 62 65 67 69 6e  o.** right begin
6500: 6e 69 6e 67 20 77 69 74 68 20 31 2e 20 20 54 68  ning with 1.  Th
6510: 65 20 76 61 6c 75 65 73 20 6f 66 20 76 61 72 69  e values of vari
6520: 61 62 6c 65 73 20 61 72 65 20 73 65 74 20 75 73  ables are set us
6530: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
6540: 65 33 5f 62 69 6e 64 28 29 20 41 50 49 2e 0a 2a  e3_bind() API..*
6550: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
6560: 6c 65 3a 20 7b 0a 20 20 69 6e 74 20 6a 20 3d 20  le: {.  int j = 
6570: 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 61  pOp->p1 - 1;.  a
6580: 73 73 65 72 74 28 20 6a 3e 3d 30 20 26 26 20 6a  ssert( j>=0 && j
6590: 3c 70 2d 3e 6e 56 61 72 20 29 3b 0a 0a 20 20 70  <p->nVar );..  p
65a0: 54 6f 73 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  Tos++;.  sqlite3
65b0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
65c0: 70 79 28 70 54 6f 73 2c 20 26 70 2d 3e 61 56 61  py(pTos, &p->aVa
65d0: 72 5b 6a 5d 2c 20 4d 45 4d 5f 53 74 61 74 69 63  r[j], MEM_Static
65e0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
65f0: 2a 20 4f 70 63 6f 64 65 3a 20 50 6f 70 20 50 31  * Opcode: Pop P1
6600: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 65 6c   * *.**.** P1 el
6610: 65 6d 65 6e 74 73 20 61 72 65 20 70 6f 70 70 65  ements are poppe
6620: 64 20 6f 66 66 20 6f 66 20 74 68 65 20 74 6f 70  d off of the top
6630: 20 6f 66 20 73 74 61 63 6b 20 61 6e 64 20 64 69   of stack and di
6640: 73 63 61 72 64 65 64 2e 0a 2a 2f 0a 63 61 73 65  scarded..*/.case
6650: 20 4f 50 5f 50 6f 70 3a 20 7b 20 20 20 20 20 20   OP_Pop: {      
6660: 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68        /* no-push
6670: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6680: 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 6f  p->p1>=0 );.  po
6690: 70 53 74 61 63 6b 28 26 70 54 6f 73 2c 20 70 4f  pStack(&pTos, pO
66a0: 70 2d 3e 70 31 29 3b 0a 20 20 61 73 73 65 72 74  p->p1);.  assert
66b0: 28 20 70 54 6f 73 3e 3d 26 70 2d 3e 61 53 74 61  ( pTos>=&p->aSta
66c0: 63 6b 5b 2d 31 5d 20 29 3b 0a 20 20 62 72 65 61  ck[-1] );.  brea
66d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
66e0: 20 44 75 70 20 50 31 20 50 32 20 2a 0a 2a 2a 0a   Dup P1 P2 *.**.
66f0: 2a 2a 20 41 20 63 6f 70 79 20 6f 66 20 74 68 65  ** A copy of the
6700: 20 50 31 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f   P1-th element o
6710: 66 20 74 68 65 20 73 74 61 63 6b 20 0a 2a 2a 20  f the stack .** 
6720: 69 73 20 6d 61 64 65 20 61 6e 64 20 70 75 73 68  is made and push
6730: 65 64 20 6f 6e 74 6f 20 74 68 65 20 74 6f 70 20  ed onto the top 
6740: 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a  of the stack..**
6750: 20 54 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   The top of the 
6760: 73 74 61 63 6b 20 69 73 20 65 6c 65 6d 65 6e 74  stack is element
6770: 20 30 2e 20 20 53 6f 20 74 68 65 0a 2a 2a 20 69   0.  So the.** i
6780: 6e 73 74 72 75 63 74 69 6f 6e 20 22 44 75 70 20  nstruction "Dup 
6790: 30 20 30 20 30 22 20 77 69 6c 6c 20 6d 61 6b 65  0 0 0" will make
67a0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 0a 2a   a copy of the.*
67b0: 2a 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  * top of the sta
67c0: 63 6b 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ck..**.** If the
67d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
67e0: 50 31 2d 74 68 20 65 6c 65 6d 65 6e 74 20 69 73  P1-th element is
67f0: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a   a dynamically.*
6800: 2a 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  * allocated stri
6810: 6e 67 2c 20 74 68 65 6e 20 61 20 6e 65 77 20 63  ng, then a new c
6820: 6f 70 79 20 6f 66 20 74 68 61 74 20 73 74 72 69  opy of that stri
6830: 6e 67 0a 2a 2a 20 69 73 20 6d 61 64 65 20 69 66  ng.** is made if
6840: 20 50 32 3d 3d 30 2e 20 20 49 66 20 50 32 21 3d   P2==0.  If P2!=
6850: 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 61 20 70  0, then just a p
6860: 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65  ointer.** to the
6870: 20 73 74 72 69 6e 67 20 69 73 20 63 6f 70 69 65   string is copie
6880: 64 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 20 73 65  d..**.** Also se
6890: 65 20 74 68 65 20 50 75 6c 6c 20 69 6e 73 74 72  e the Pull instr
68a0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
68b0: 4f 50 5f 44 75 70 3a 20 7b 0a 20 20 4d 65 6d 20  OP_Dup: {.  Mem 
68c0: 2a 70 46 72 6f 6d 20 3d 20 26 70 54 6f 73 5b 2d  *pFrom = &pTos[-
68d0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
68e0: 72 74 28 20 70 46 72 6f 6d 3c 3d 70 54 6f 73 20  rt( pFrom<=pTos 
68f0: 26 26 20 70 46 72 6f 6d 3e 3d 70 2d 3e 61 53 74  && pFrom>=p->aSt
6900: 61 63 6b 20 29 3b 0a 20 20 70 54 6f 73 2b 2b 3b  ack );.  pTos++;
6910: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
6920: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 54 6f  mShallowCopy(pTo
6930: 73 2c 20 70 46 72 6f 6d 2c 20 4d 45 4d 5f 45 70  s, pFrom, MEM_Ep
6940: 68 65 6d 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  hem);.  if( pOp-
6950: 3e 70 32 20 29 7b 0a 20 20 20 20 44 65 65 70 68  >p2 ){.    Deeph
6960: 65 6d 65 72 61 6c 69 7a 65 28 70 54 6f 73 29 3b  emeralize(pTos);
6970: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
6980: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 75 6c 6c  ./* Opcode: Pull
6990: 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P1 * *.**.** Th
69a0: 65 20 50 31 2d 74 68 20 65 6c 65 6d 65 6e 74 20  e P1-th element 
69b0: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
69c0: 69 74 73 20 63 75 72 72 65 6e 74 20 6c 6f 63 61  its current loca
69d0: 74 69 6f 6e 20 6f 6e 20 0a 2a 2a 20 74 68 65 20  tion on .** the 
69e0: 73 74 61 63 6b 20 61 6e 64 20 70 75 73 68 65 64  stack and pushed
69f0: 20 62 61 63 6b 20 6f 6e 20 74 6f 70 20 6f 66 20   back on top of 
6a00: 74 68 65 20 73 74 61 63 6b 2e 20 20 54 68 65 0a  the stack.  The.
6a10: 2a 2a 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74  ** top of the st
6a20: 61 63 6b 20 69 73 20 65 6c 65 6d 65 6e 74 20 30  ack is element 0
6a30: 2c 20 73 6f 20 22 50 75 6c 6c 20 30 20 30 20 30  , so "Pull 0 0 0
6a40: 22 20 69 73 0a 2a 2a 20 61 20 6e 6f 2d 6f 70 2e  " is.** a no-op.
6a50: 20 20 22 50 75 6c 6c 20 31 20 30 20 30 22 20 73    "Pull 1 0 0" s
6a60: 77 61 70 73 20 74 68 65 20 74 6f 70 20 74 77 6f  waps the top two
6a70: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 0a 2a 2a 20   elements of.** 
6a80: 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a  the stack..**.**
6a90: 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 44 75   See also the Du
6aa0: 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  p instruction..*
6ab0: 2f 0a 63 61 73 65 20 4f 50 5f 50 75 6c 6c 3a 20  /.case OP_Pull: 
6ac0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6ad0: 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 4d 65 6d  no-push */.  Mem
6ae0: 20 2a 70 46 72 6f 6d 20 3d 20 26 70 54 6f 73 5b   *pFrom = &pTos[
6af0: 2d 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 6e 74  -pOp->p1];.  int
6b00: 20 69 3b 0a 20 20 4d 65 6d 20 74 73 3b 0a 0a 20   i;.  Mem ts;.. 
6b10: 20 74 73 20 3d 20 2a 70 46 72 6f 6d 3b 0a 20 20   ts = *pFrom;.  
6b20: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
6b30: 54 6f 73 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  Tos);.  for(i=0;
6b40: 20 69 3c 70 4f 70 2d 3e 70 31 3b 20 69 2b 2b 2c   i<pOp->p1; i++,
6b50: 20 70 46 72 6f 6d 2b 2b 29 7b 0a 20 20 20 20 44   pFrom++){.    D
6b60: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
6b70: 46 72 6f 6d 5b 31 5d 29 3b 0a 20 20 20 20 61 73  From[1]);.    as
6b80: 73 65 72 74 28 20 28 70 46 72 6f 6d 2d 3e 66 6c  sert( (pFrom->fl
6b90: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
6ba0: 3d 3d 30 20 29 3b 0a 20 20 20 20 2a 70 46 72 6f  ==0 );.    *pFro
6bb0: 6d 20 3d 20 70 46 72 6f 6d 5b 31 5d 3b 0a 20 20  m = pFrom[1];.  
6bc0: 20 20 69 66 28 20 70 46 72 6f 6d 2d 3e 66 6c 61    if( pFrom->fla
6bd0: 67 73 20 26 20 4d 45 4d 5f 53 68 6f 72 74 20 29  gs & MEM_Short )
6be0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
6bf0: 70 46 72 6f 6d 2d 3e 66 6c 61 67 73 20 26 20 28  pFrom->flags & (
6c00: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
6c10: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
6c20: 74 28 20 70 46 72 6f 6d 2d 3e 7a 3d 3d 70 46 72  t( pFrom->z==pFr
6c30: 6f 6d 5b 31 5d 2e 7a 53 68 6f 72 74 20 29 3b 0a  om[1].zShort );.
6c40: 20 20 20 20 20 20 70 46 72 6f 6d 2d 3e 7a 20 3d        pFrom->z =
6c50: 20 70 46 72 6f 6d 2d 3e 7a 53 68 6f 72 74 3b 0a   pFrom->zShort;.
6c60: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 70 54 6f      }.  }.  *pTo
6c70: 73 20 3d 20 74 73 3b 0a 20 20 69 66 28 20 70 54  s = ts;.  if( pT
6c80: 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  os->flags & MEM_
6c90: 53 68 6f 72 74 20 29 7b 0a 20 20 20 20 61 73 73  Short ){.    ass
6ca0: 65 72 74 28 20 70 54 6f 73 2d 3e 66 6c 61 67 73  ert( pTos->flags
6cb0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
6cc0: 42 6c 6f 62 29 20 29 3b 0a 20 20 20 20 61 73 73  Blob) );.    ass
6cd0: 65 72 74 28 20 70 54 6f 73 2d 3e 7a 3d 3d 70 54  ert( pTos->z==pT
6ce0: 6f 73 5b 2d 70 4f 70 2d 3e 70 31 5d 2e 7a 53 68  os[-pOp->p1].zSh
6cf0: 6f 72 74 20 29 3b 0a 20 20 20 20 70 54 6f 73 2d  ort );.    pTos-
6d00: 3e 7a 20 3d 20 70 54 6f 73 2d 3e 7a 53 68 6f 72  >z = pTos->zShor
6d10: 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  t;.  }.  break;.
6d20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 75  }../* Opcode: Pu
6d30: 73 68 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  sh P1 * *.**.** 
6d40: 4f 76 65 72 77 72 69 74 65 20 74 68 65 20 76 61  Overwrite the va
6d50: 6c 75 65 20 6f 66 20 74 68 65 20 50 31 2d 74 68  lue of the P1-th
6d60: 20 65 6c 65 6d 65 6e 74 20 64 6f 77 6e 20 6f 6e   element down on
6d70: 20 74 68 65 0a 2a 2a 20 73 74 61 63 6b 20 28 50   the.** stack (P
6d80: 31 3d 3d 30 20 69 73 20 74 68 65 20 74 6f 70 20  1==0 is the top 
6d90: 6f 66 20 74 68 65 20 73 74 61 63 6b 29 20 77 69  of the stack) wi
6da0: 74 68 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  th the value.** 
6db0: 6f 66 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  of the top of th
6dc0: 65 20 73 74 61 63 6b 2e 20 20 54 68 65 6e 20 70  e stack.  Then p
6dd0: 6f 70 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  op the top of th
6de0: 65 20 73 74 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65  e stack..*/.case
6df0: 20 4f 50 5f 50 75 73 68 3a 20 7b 20 20 20 20 20   OP_Push: {     
6e00: 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73         /* no-pus
6e10: 68 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 54 6f 20  h */.  Mem *pTo 
6e20: 3d 20 26 70 54 6f 73 5b 2d 70 4f 70 2d 3e 70 31  = &pTos[-pOp->p1
6e30: 5d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 54  ];..  assert( pT
6e40: 6f 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29 3b 0a  o>=p->aStack );.
6e50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
6e60: 4d 6f 76 65 28 70 54 6f 2c 20 70 54 6f 73 29 3b  Move(pTo, pTos);
6e70: 0a 20 20 70 54 6f 73 2d 2d 3b 0a 20 20 62 72 65  .  pTos--;.  bre
6e80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6e90: 3a 20 43 61 6c 6c 62 61 63 6b 20 50 31 20 2a 20  : Callback P1 * 
6ea0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 6f 70 20  *.**.** The top 
6eb0: 50 31 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65  P1 values on the
6ec0: 20 73 74 61 63 6b 20 72 65 70 72 65 73 65 6e 74   stack represent
6ed0: 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74   a single result
6ee0: 20 72 6f 77 20 66 72 6f 6d 0a 2a 2a 20 61 20 71   row from.** a q
6ef0: 75 65 72 79 2e 20 20 54 68 69 73 20 6f 70 63 6f  uery.  This opco
6f00: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
6f10: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
6f20: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
6f30: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
6f40: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
6f50: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
6f60: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
6f70: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
6f80: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
6f90: 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61  to the top P1 va
6fa0: 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75  lues as the resu
6fb0: 6c 74 0a 2a 2a 20 72 6f 77 2e 20 20 57 68 65 6e  lt.** row.  When
6fc0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
6fd0: 70 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  p() function is 
6fe0: 72 75 6e 20 61 67 61 69 6e 2c 20 74 68 65 20 74  run again, the t
6ff0: 6f 70 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  op P1.** values 
7000: 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69  will be automati
7010: 63 61 6c 6c 79 20 70 6f 70 70 65 64 20 66 72 6f  cally popped fro
7020: 6d 20 74 68 65 20 73 74 61 63 6b 20 62 65 66 6f  m the stack befo
7030: 72 65 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  re the next.** i
7040: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
7050: 74 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tes..*/.case OP_
7060: 43 61 6c 6c 62 61 63 6b 3a 20 7b 20 20 20 20 20  Callback: {     
7070: 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73         /* no-pus
7080: 68 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  h */.  Mem *pMem
7090: 3b 0a 20 20 4d 65 6d 20 2a 70 46 69 72 73 74 43  ;.  Mem *pFirstC
70a0: 6f 6c 75 6d 6e 3b 0a 20 20 61 73 73 65 72 74 28  olumn;.  assert(
70b0: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
70c0: 70 4f 70 2d 3e 70 31 20 29 3b 0a 0a 20 20 2f 2a  pOp->p1 );..  /*
70d0: 20 44 61 74 61 20 69 6e 20 74 68 65 20 70 61 67   Data in the pag
70e0: 65 72 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  er might be move
70f0: 64 20 6f 72 20 63 68 61 6e 67 65 64 20 6f 75 74  d or changed out
7100: 20 66 72 6f 6d 20 75 6e 64 65 72 20 75 73 0a 20   from under us. 
7110: 20 2a 2a 20 69 6e 20 62 65 74 77 65 65 6e 20 74   ** in between t
7120: 68 65 20 72 65 74 75 72 6e 20 66 72 6f 6d 20 74  he return from t
7130: 68 69 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  his sqlite3_step
7140: 28 29 20 63 61 6c 6c 20 61 6e 64 20 74 68 65 0a  () call and the.
7150: 20 20 2a 2a 20 6e 65 78 74 20 63 61 6c 6c 20 74    ** next call t
7160: 6f 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  o sqlite3_step()
7170: 2e 20 20 53 6f 20 64 65 65 70 68 65 72 6d 65 72  .  So deephermer
7180: 61 6c 69 7a 65 20 65 76 65 72 79 74 68 69 6e 67  alize everything
7190: 20 6f 6e 20 0a 20 20 2a 2a 20 74 68 65 20 73 74   on .  ** the st
71a0: 61 63 6b 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ack.  Note that 
71b0: 65 70 68 65 6d 65 72 61 6c 20 64 61 74 61 20 69  ephemeral data i
71c0: 73 20 6e 65 76 65 72 20 73 74 6f 72 65 64 20 69  s never stored i
71d0: 6e 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2a 20 63  n memory .  ** c
71e0: 65 6c 6c 73 20 73 6f 20 77 65 20 64 6f 20 6e 6f  ells so we do no
71f0: 74 20 68 61 76 65 20 74 6f 20 77 6f 72 72 79 20  t have to worry 
7200: 61 62 6f 75 74 20 74 68 65 6d 2e 0a 20 20 2a 2f  about them..  */
7210: 0a 20 20 70 46 69 72 73 74 43 6f 6c 75 6d 6e 20  .  pFirstColumn 
7220: 3d 20 26 70 54 6f 73 5b 30 2d 70 4f 70 2d 3e 70  = &pTos[0-pOp->p
7230: 31 5d 3b 0a 20 20 66 6f 72 28 70 4d 65 6d 20 3d  1];.  for(pMem =
7240: 20 70 2d 3e 61 53 74 61 63 6b 3b 20 70 4d 65 6d   p->aStack; pMem
7250: 3c 70 46 69 72 73 74 43 6f 6c 75 6d 6e 3b 20 70  <pFirstColumn; p
7260: 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 44 65 65 70  Mem++){.    Deep
7270: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4d 65 6d 29  hemeralize(pMem)
7280: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
7290: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
72a0: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
72b0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
72c0: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
72d0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
72e0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
72f0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
7300: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
7310: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
7320: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
7330: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
7340: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
7350: 72 65 20 64 65 65 70 68 65 6d 65 72 61 6c 69 7a  re deephemeraliz
7360: 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69  ed as.  ** as si
7370: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
7380: 20 20 66 6f 72 28 3b 20 70 4d 65 6d 3c 3d 70 54    for(; pMem<=pT
7390: 6f 73 3b 20 70 4d 65 6d 2b 2b 20 29 7b 0a 20 20  os; pMem++ ){.  
73a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
73b0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 4d 65  NulTerminate(pMe
73c0: 6d 29 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70  m);.    storeTyp
73d0: 65 49 6e 66 6f 28 70 4d 65 6d 2c 20 65 6e 63 6f  eInfo(pMem, enco
73e0: 64 69 6e 67 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ding);.  }..  /*
73f0: 20 53 65 74 20 75 70 20 74 68 65 20 73 74 61 74   Set up the stat
7400: 65 6d 65 6e 74 20 73 74 72 75 63 74 75 72 65 20  ement structure 
7410: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
7420: 70 6f 70 20 74 68 65 20 63 75 72 72 65 6e 74 0a  pop the current.
7430: 20 20 2a 2a 20 72 65 73 75 6c 74 73 20 66 72 6f    ** results fro
7440: 6d 20 74 68 65 20 73 74 61 63 6b 20 77 68 65 6e  m the stack when
7450: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72   the statement r
7460: 65 74 75 72 6e 73 2e 0a 20 20 2a 2f 0a 20 20 70  eturns..  */.  p
7470: 2d 3e 72 65 73 4f 6e 53 74 61 63 6b 20 3d 20 31  ->resOnStack = 1
7480: 3b 0a 20 20 70 2d 3e 6e 43 61 6c 6c 62 61 63 6b  ;.  p->nCallback
7490: 2b 2b 3b 0a 20 20 70 2d 3e 70 6f 70 53 74 61 63  ++;.  p->popStac
74a0: 6b 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  k = pOp->p1;.  p
74b0: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
74c0: 20 70 2d 3e 70 54 6f 73 20 3d 20 70 54 6f 73 3b   p->pTos = pTos;
74d0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
74e0: 5f 52 4f 57 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  _ROW;.}../* Opco
74f0: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
7500: 20 2a 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 20 61 74   *.**.** Look at
7510: 20 74 68 65 20 66 69 72 73 74 20 50 31 2b 32 20   the first P1+2 
7520: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20  elements of the 
7530: 73 74 61 63 6b 2e 20 20 41 70 70 65 6e 64 20 74  stack.  Append t
7540: 68 65 6d 20 61 6c 6c 20 0a 2a 2a 20 74 6f 67 65  hem all .** toge
7550: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 6c 6f  ther with the lo
7560: 77 65 73 74 20 65 6c 65 6d 65 6e 74 20 66 69 72  west element fir
7570: 73 74 2e 20 20 54 68 65 20 6f 72 69 67 69 6e 61  st.  The origina
7580: 6c 20 50 31 2b 32 20 65 6c 65 6d 65 6e 74 73 0a  l P1+2 elements.
7590: 2a 2a 20 61 72 65 20 70 6f 70 70 65 64 20 66 72  ** are popped fr
75a0: 6f 6d 20 74 68 65 20 73 74 61 63 6b 20 69 66 20  om the stack if 
75b0: 50 32 3d 3d 30 20 61 6e 64 20 72 65 74 61 69 6e  P2==0 and retain
75c0: 65 64 20 69 66 20 50 32 3d 3d 31 2e 20 20 49 66  ed if P2==1.  If
75d0: 0a 2a 2a 20 61 6e 79 20 65 6c 65 6d 65 6e 74 20  .** any element 
75e0: 6f 66 20 74 68 65 20 73 74 61 63 6b 20 69 73 20  of the stack is 
75f0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72  NULL, then the r
7600: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
7610: 2a 0a 2a 2a 20 57 68 65 6e 20 50 31 3d 3d 31 2c  *.** When P1==1,
7620: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6d 61   this routine ma
7630: 6b 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68  kes a copy of th
7640: 65 20 74 6f 70 20 73 74 61 63 6b 20 65 6c 65 6d  e top stack elem
7650: 65 6e 74 0a 2a 2a 20 69 6e 74 6f 20 6d 65 6d 6f  ent.** into memo
7660: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
7670: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e   sqliteMalloc().
7680: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
7690: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
76a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
76b0: 4e 43 41 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NCAT */.  char *
76c0: 7a 4e 65 77 3b 0a 20 20 69 6e 74 20 6e 42 79 74  zNew;.  int nByt
76d0: 65 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  e;.  int nField;
76e0: 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 4d  .  int i, j;.  M
76f0: 65 6d 20 2a 70 54 65 72 6d 3b 0a 0a 20 20 2f 2a  em *pTerm;..  /*
7700: 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
7710: 65 20 73 74 61 63 6b 20 65 6c 65 6d 65 6e 74 73  e stack elements
7720: 20 74 6f 20 73 65 65 20 68 6f 77 20 6c 6f 6e 67   to see how long
7730: 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c   the result will
7740: 20 62 65 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64   be. */.  nField
7750: 20 3d 20 70 4f 70 2d 3e 70 31 20 2b 20 32 3b 0a   = pOp->p1 + 2;.
7760: 20 20 70 54 65 72 6d 20 3d 20 26 70 54 6f 73 5b    pTerm = &pTos[
7770: 31 2d 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 42 79  1-nField];.  nBy
7780: 74 65 20 3d 20 30 3b 0a 20 20 66 6f 72 28 69 3d  te = 0;.  for(i=
7790: 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b  0; i<nField; i++
77a0: 2c 20 70 54 65 72 6d 2b 2b 29 7b 0a 20 20 20 20  , pTerm++){.    
77b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
77c0: 3d 30 20 7c 7c 20 28 70 54 65 72 6d 2d 3e 66 6c  =0 || (pTerm->fl
77d0: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  ags&MEM_Str) );.
77e0: 20 20 20 20 69 66 28 20 70 54 65 72 6d 2d 3e 66      if( pTerm->f
77f0: 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  lags&MEM_Null ){
7800: 0a 20 20 20 20 20 20 6e 42 79 74 65 20 3d 20 2d  .      nByte = -
7810: 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
7820: 20 20 20 20 7d 0a 20 20 20 20 53 74 72 69 6e 67      }.    String
7830: 69 66 79 28 70 54 65 72 6d 2c 20 65 6e 63 6f 64  ify(pTerm, encod
7840: 69 6e 67 29 3b 0a 20 20 20 20 6e 42 79 74 65 20  ing);.    nByte 
7850: 2b 3d 20 70 54 65 72 6d 2d 3e 6e 3b 0a 20 20 7d  += pTerm->n;.  }
7860: 0a 0a 20 20 69 66 28 20 6e 42 79 74 65 3c 30 20  ..  if( nByte<0 
7870: 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 6e 42 79  ){.    /* If nBy
7880: 74 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  te is less than 
7890: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 72 65  zero, then there
78a0: 20 69 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65   is a NULL value
78b0: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2e 0a 20   on the stack.. 
78c0: 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61     ** In this ca
78d0: 73 65 20 6a 75 73 74 20 70 6f 70 20 74 68 65 20  se just pop the 
78e0: 76 61 6c 75 65 73 20 6f 66 66 20 74 68 65 20 73  values off the s
78f0: 74 61 63 6b 20 28 69 66 20 72 65 71 75 69 72 65  tack (if require
7900: 64 29 20 61 6e 64 0a 20 20 20 20 2a 2a 20 70 75  d) and.    ** pu
7910: 73 68 20 6f 6e 20 61 20 4e 55 4c 4c 2e 0a 20 20  sh on a NULL..  
7920: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
7930: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
7940: 20 70 6f 70 53 74 61 63 6b 28 26 70 54 6f 73 2c   popStack(&pTos,
7950: 20 6e 46 69 65 6c 64 29 3b 0a 20 20 20 20 7d 0a   nField);.    }.
7960: 20 20 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 20 20      pTos++;.    
7970: 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pTos->flags = ME
7980: 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b  M_Null;.  }else{
7990: 0a 20 20 20 20 2f 2a 20 4f 74 68 65 72 77 69 73  .    /* Otherwis
79a0: 65 20 6d 61 6c 6c 6f 63 28 29 20 73 70 61 63 65  e malloc() space
79b0: 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
79c0: 61 6e 64 20 63 6f 6e 63 61 74 65 6e 61 74 65 20  and concatenate 
79d0: 61 6c 6c 20 74 68 65 0a 20 20 20 20 2a 2a 20 73  all the.    ** s
79e0: 74 61 63 6b 20 76 61 6c 75 65 73 2e 0a 20 20 20  tack values..   
79f0: 20 2a 2f 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73   */.    zNew = s
7a00: 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 20  qliteMallocRaw( 
7a10: 6e 42 79 74 65 2b 32 20 29 3b 0a 20 20 20 20 69  nByte+2 );.    i
7a20: 66 28 20 7a 4e 65 77 3d 3d 30 20 29 20 67 6f 74  f( zNew==0 ) got
7a30: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6a 20  o no_mem;.    j 
7a40: 3d 20 30 3b 0a 20 20 20 20 70 54 65 72 6d 20 3d  = 0;.    pTerm =
7a50: 20 26 70 54 6f 73 5b 31 2d 6e 46 69 65 6c 64 5d   &pTos[1-nField]
7a60: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30 3b  ;.    for(i=j=0;
7a70: 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 2c 20   i<nField; i++, 
7a80: 70 54 65 72 6d 2b 2b 29 7b 0a 20 20 20 20 20 20  pTerm++){.      
7a90: 69 6e 74 20 6e 20 3d 20 70 54 65 72 6d 2d 3e 6e  int n = pTerm->n
7aa0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
7ab0: 70 54 65 72 6d 2d 3e 66 6c 61 67 73 20 26 20 28  pTerm->flags & (
7ac0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
7ad0: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70  ) );.      memcp
7ae0: 79 28 26 7a 4e 65 77 5b 6a 5d 2c 20 70 54 65 72  y(&zNew[j], pTer
7af0: 6d 2d 3e 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20  m->z, n);.      
7b00: 6a 20 2b 3d 20 6e 3b 0a 20 20 20 20 7d 0a 20 20  j += n;.    }.  
7b10: 20 20 7a 4e 65 77 5b 6a 5d 20 3d 20 30 3b 0a 20    zNew[j] = 0;. 
7b20: 20 20 20 7a 4e 65 77 5b 6a 2b 31 5d 20 3d 20 30     zNew[j+1] = 0
7b30: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6a 3d  ;.    assert( j=
7b40: 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 20 20 69  =nByte );..    i
7b50: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
7b60: 0a 20 20 20 20 20 20 70 6f 70 53 74 61 63 6b 28  .      popStack(
7b70: 26 70 54 6f 73 2c 20 6e 46 69 65 6c 64 29 3b 0a  &pTos, nField);.
7b80: 20 20 20 20 7d 0a 20 20 20 20 70 54 6f 73 2b 2b      }.    pTos++
7b90: 3b 0a 20 20 20 20 70 54 6f 73 2d 3e 6e 20 3d 20  ;.    pTos->n = 
7ba0: 6a 3b 0a 20 20 20 20 70 54 6f 73 2d 3e 66 6c 61  j;.    pTos->fla
7bb0: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
7bc0: 5f 44 79 6e 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  _Dyn|MEM_Term;. 
7bd0: 20 20 20 70 54 6f 73 2d 3e 78 44 65 6c 20 3d 20     pTos->xDel = 
7be0: 30 3b 0a 20 20 20 20 70 54 6f 73 2d 3e 65 6e 63  0;.    pTos->enc
7bf0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20   = encoding;.   
7c00: 20 70 54 6f 73 2d 3e 7a 20 3d 20 7a 4e 65 77 3b   pTos->z = zNew;
7c10: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
7c20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
7c30: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20  * * *.**.** Pop 
7c40: 74 68 65 20 74 6f 70 20 74 77 6f 20 65 6c 65 6d  the top two elem
7c50: 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 73 74  ents from the st
7c60: 61 63 6b 2c 20 61 64 64 20 74 68 65 6d 20 74 6f  ack, add them to
7c70: 67 65 74 68 65 72 2c 0a 2a 2a 20 61 6e 64 20 70  gether,.** and p
7c80: 75 73 68 20 74 68 65 20 72 65 73 75 6c 74 20 62  ush the result b
7c90: 61 63 6b 20 6f 6e 74 6f 20 74 68 65 20 73 74 61  ack onto the sta
7ca0: 63 6b 2e 20 20 49 66 20 65 69 74 68 65 72 20 65  ck.  If either e
7cb0: 6c 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 61 20 73  lement.** is a s
7cc0: 74 72 69 6e 67 20 74 68 65 6e 20 69 74 20 69 73  tring then it is
7cd0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
7ce0: 64 6f 75 62 6c 65 20 75 73 69 6e 67 20 74 68 65  double using the
7cf0: 20 61 74 6f 66 28 29 0a 2a 2a 20 66 75 6e 63 74   atof().** funct
7d00: 69 6f 6e 20 62 65 66 6f 72 65 20 74 68 65 20 61  ion before the a
7d10: 64 64 69 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 65  ddition..** If e
7d20: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
7d30: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
7d40: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
7d50: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
7d60: 79 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f  y * * *.**.** Po
7d70: 70 20 74 68 65 20 74 6f 70 20 74 77 6f 20 65 6c  p the top two el
7d80: 65 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  ements from the 
7d90: 73 74 61 63 6b 2c 20 6d 75 6c 74 69 70 6c 79 20  stack, multiply 
7da0: 74 68 65 6d 20 74 6f 67 65 74 68 65 72 2c 0a 2a  them together,.*
7db0: 2a 20 61 6e 64 20 70 75 73 68 20 74 68 65 20 72  * and push the r
7dc0: 65 73 75 6c 74 20 62 61 63 6b 20 6f 6e 74 6f 20  esult back onto 
7dd0: 74 68 65 20 73 74 61 63 6b 2e 20 20 49 66 20 65  the stack.  If e
7de0: 69 74 68 65 72 20 65 6c 65 6d 65 6e 74 0a 2a 2a  ither element.**
7df0: 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 65   is a string the
7e00: 6e 20 69 74 20 69 73 20 63 6f 6e 76 65 72 74 65  n it is converte
7e10: 64 20 74 6f 20 61 20 64 6f 75 62 6c 65 20 75 73  d to a double us
7e20: 69 6e 67 20 74 68 65 20 61 74 6f 66 28 29 0a 2a  ing the atof().*
7e30: 2a 20 66 75 6e 63 74 69 6f 6e 20 62 65 66 6f 72  * function befor
7e40: 65 20 74 68 65 20 6d 75 6c 74 69 70 6c 69 63 61  e the multiplica
7e50: 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 65 69 74 68  tion..** If eith
7e60: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
7e70: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
7e80: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
7e90: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 2a  code: Subtract *
7ea0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20 74   * *.**.** Pop t
7eb0: 68 65 20 74 6f 70 20 74 77 6f 20 65 6c 65 6d 65  he top two eleme
7ec0: 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 73 74 61  nts from the sta
7ed0: 63 6b 2c 20 73 75 62 74 72 61 63 74 20 74 68 65  ck, subtract the
7ee0: 0a 2a 2a 20 66 69 72 73 74 20 28 77 68 61 74 20  .** first (what 
7ef0: 77 61 73 20 6f 6e 20 74 6f 70 20 6f 66 20 74 68  was on top of th
7f00: 65 20 73 74 61 63 6b 29 20 66 72 6f 6d 20 74 68  e stack) from th
7f10: 65 20 73 65 63 6f 6e 64 20 28 74 68 65 0a 2a 2a  e second (the.**
7f20: 20 6e 65 78 74 20 6f 6e 20 73 74 61 63 6b 29 0a   next on stack).
7f30: 2a 2a 20 61 6e 64 20 70 75 73 68 20 74 68 65 20  ** and push the 
7f40: 72 65 73 75 6c 74 20 62 61 63 6b 20 6f 6e 74 6f  result back onto
7f50: 20 74 68 65 20 73 74 61 63 6b 2e 20 20 49 66 20   the stack.  If 
7f60: 65 69 74 68 65 72 20 65 6c 65 6d 65 6e 74 0a 2a  either element.*
7f70: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  * is a string th
7f80: 65 6e 20 69 74 20 69 73 20 63 6f 6e 76 65 72 74  en it is convert
7f90: 65 64 20 74 6f 20 61 20 64 6f 75 62 6c 65 20 75  ed to a double u
7fa0: 73 69 6e 67 20 74 68 65 20 61 74 6f 66 28 29 0a  sing the atof().
7fb0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 62 65 66 6f  ** function befo
7fc0: 72 65 20 74 68 65 20 73 75 62 74 72 61 63 74 69  re the subtracti
7fd0: 6f 6e 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  on..** If either
7fe0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
7ff0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
8000: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
8010: 64 65 3a 20 44 69 76 69 64 65 20 2a 20 2a 20 2a  de: Divide * * *
8020: 0a 2a 2a 0a 2a 2a 20 50 6f 70 20 74 68 65 20 74  .**.** Pop the t
8030: 6f 70 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 20  op two elements 
8040: 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 2c 20  from the stack, 
8050: 64 69 76 69 64 65 20 74 68 65 0a 2a 2a 20 66 69  divide the.** fi
8060: 72 73 74 20 28 77 68 61 74 20 77 61 73 20 6f 6e  rst (what was on
8070: 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63   top of the stac
8080: 6b 29 20 66 72 6f 6d 20 74 68 65 20 73 65 63 6f  k) from the seco
8090: 6e 64 20 28 74 68 65 0a 2a 2a 20 6e 65 78 74 20  nd (the.** next 
80a0: 6f 6e 20 73 74 61 63 6b 29 0a 2a 2a 20 61 6e 64  on stack).** and
80b0: 20 70 75 73 68 20 74 68 65 20 72 65 73 75 6c 74   push the result
80c0: 20 62 61 63 6b 20 6f 6e 74 6f 20 74 68 65 20 73   back onto the s
80d0: 74 61 63 6b 2e 20 20 49 66 20 65 69 74 68 65 72  tack.  If either
80e0: 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 61   element.** is a
80f0: 20 73 74 72 69 6e 67 20 74 68 65 6e 20 69 74 20   string then it 
8100: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
8110: 61 20 64 6f 75 62 6c 65 20 75 73 69 6e 67 20 74  a double using t
8120: 68 65 20 61 74 6f 66 28 29 0a 2a 2a 20 66 75 6e  he atof().** fun
8130: 63 74 69 6f 6e 20 62 65 66 6f 72 65 20 74 68 65  ction before the
8140: 20 64 69 76 69 73 69 6f 6e 2e 20 20 44 69 76 69   division.  Divi
8150: 73 69 6f 6e 20 62 79 20 7a 65 72 6f 20 72 65 74  sion by zero ret
8160: 75 72 6e 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  urns NULL..** If
8170: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
8180: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
8190: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
81a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
81b0: 6e 64 65 72 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  nder * * *.**.**
81c0: 20 50 6f 70 20 74 68 65 20 74 6f 70 20 74 77 6f   Pop the top two
81d0: 20 65 6c 65 6d 65 6e 74 73 20 66 72 6f 6d 20 74   elements from t
81e0: 68 65 20 73 74 61 63 6b 2c 20 64 69 76 69 64 65  he stack, divide
81f0: 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 28 77   the.** first (w
8200: 68 61 74 20 77 61 73 20 6f 6e 20 74 6f 70 20 6f  hat was on top o
8210: 66 20 74 68 65 20 73 74 61 63 6b 29 20 66 72 6f  f the stack) fro
8220: 6d 20 74 68 65 20 73 65 63 6f 6e 64 20 28 74 68  m the second (th
8230: 65 0a 2a 2a 20 6e 65 78 74 20 6f 6e 20 73 74 61  e.** next on sta
8240: 63 6b 29 0a 2a 2a 20 61 6e 64 20 70 75 73 68 20  ck).** and push 
8250: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
8260: 74 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 6e 74  ter division ont
8270: 6f 20 74 68 65 20 73 74 61 63 6b 2e 20 20 49 66  o the stack.  If
8280: 20 65 69 74 68 65 72 20 65 6c 65 6d 65 6e 74 0a   either element.
8290: 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  ** is a string t
82a0: 68 65 6e 20 69 74 20 69 73 20 63 6f 6e 76 65 72  hen it is conver
82b0: 74 65 64 20 74 6f 20 61 20 64 6f 75 62 6c 65 20  ted to a double 
82c0: 75 73 69 6e 67 20 74 68 65 20 61 74 6f 66 28 29  using the atof()
82d0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 62 65 66  .** function bef
82e0: 6f 72 65 20 74 68 65 20 64 69 76 69 73 69 6f 6e  ore the division
82f0: 2e 20 20 44 69 76 69 73 69 6f 6e 20 62 79 20 7a  .  Division by z
8300: 65 72 6f 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ero returns NULL
8310: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
8320: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
8330: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8340: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
8350: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
8360: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8370: 20 54 4b 5f 50 4c 55 53 2c 20 6e 6f 2d 70 75 73   TK_PLUS, no-pus
8380: 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  h */.case OP_Sub
8390: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
83a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
83b0: 4b 5f 4d 49 4e 55 53 2c 20 6e 6f 2d 70 75 73 68  K_MINUS, no-push
83c0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
83d0: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
83e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
83f0: 5f 53 54 41 52 2c 20 6e 6f 2d 70 75 73 68 20 2a  _STAR, no-push *
8400: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
8410: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
8420: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
8430: 4c 41 53 48 2c 20 6e 6f 2d 70 75 73 68 20 2a 2f  LASH, no-push */
8440: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
8450: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
8460: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
8470: 4d 2c 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  M, no-push */.  
8480: 4d 65 6d 20 2a 70 4e 6f 73 20 3d 20 26 70 54 6f  Mem *pNos = &pTo
8490: 73 5b 2d 31 5d 3b 0a 20 20 69 6e 74 20 66 6c 61  s[-1];.  int fla
84a0: 67 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  gs;.  assert( pN
84b0: 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29 3b  os>=p->aStack );
84c0: 0a 20 20 66 6c 61 67 73 20 3d 20 70 54 6f 73 2d  .  flags = pTos-
84d0: 3e 66 6c 61 67 73 20 7c 20 70 4e 6f 73 2d 3e 66  >flags | pNos->f
84e0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
84f0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
8500: 30 20 29 7b 0a 20 20 20 20 52 65 6c 65 61 73 65  0 ){.    Release
8510: 28 70 54 6f 73 29 3b 0a 20 20 20 20 70 54 6f 73  (pTos);.    pTos
8520: 2d 2d 3b 0a 20 20 20 20 52 65 6c 65 61 73 65 28  --;.    Release(
8530: 70 54 6f 73 29 3b 0a 20 20 20 20 70 54 6f 73 2d  pTos);.    pTos-
8540: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
8550: 6c 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  l;.  }else if( (
8560: 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20 70 4e  pTos->flags & pN
8570: 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  os->flags & MEM_
8580: 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b  Int)==MEM_Int ){
8590: 0a 20 20 20 20 69 36 34 20 61 2c 20 62 3b 0a 20  .    i64 a, b;. 
85a0: 20 20 20 61 20 3d 20 70 54 6f 73 2d 3e 69 3b 0a     a = pTos->i;.
85b0: 20 20 20 20 62 20 3d 20 70 4e 6f 73 2d 3e 69 3b      b = pNos->i;
85c0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
85d0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
85e0: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
85f0: 20 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20         b += a;  
8600: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
8610: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
8620: 63 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20  ct:    b -= a;  
8630: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
8640: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
8650: 6c 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20  ly:    b *= a;  
8660: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
8670: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
8680: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
8690: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 64 69 76 69  a==0 ) goto divi
86a0: 64 65 5f 62 79 5f 7a 65 72 6f 3b 0a 20 20 20 20  de_by_zero;.    
86b0: 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20 20 20      b /= a;.    
86c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
86d0: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
86e0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
86f0: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 64 69 76 69  a==0 ) goto divi
8700: 64 65 5f 62 79 5f 7a 65 72 6f 3b 0a 20 20 20 20  de_by_zero;.    
8710: 20 20 20 20 62 20 25 3d 20 61 3b 0a 20 20 20 20      b %= a;.    
8720: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
8730: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 52 65 6c   }.    }.    Rel
8740: 65 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 20 20  ease(pTos);.    
8750: 70 54 6f 73 2d 2d 3b 0a 20 20 20 20 52 65 6c 65  pTos--;.    Rele
8760: 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 20 20 70  ase(pTos);.    p
8770: 54 6f 73 2d 3e 69 20 3d 20 62 3b 0a 20 20 20 20  Tos->i = b;.    
8780: 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pTos->flags = ME
8790: 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  M_Int;.  }else{.
87a0: 20 20 20 20 64 6f 75 62 6c 65 20 61 2c 20 62 3b      double a, b;
87b0: 0a 20 20 20 20 61 20 3d 20 73 71 6c 69 74 65 33  .    a = sqlite3
87c0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 54  VdbeRealValue(pT
87d0: 6f 73 29 3b 0a 20 20 20 20 62 20 3d 20 73 71 6c  os);.    b = sql
87e0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
87f0: 65 28 70 4e 6f 73 29 3b 0a 20 20 20 20 73 77 69  e(pNos);.    swi
8800: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
8810: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
8820: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 62  P_Add:         b
8830: 20 2b 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   += a;       bre
8840: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
8850: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 62  P_Subtract:    b
8860: 20 2d 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   -= a;       bre
8870: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
8880: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 62  P_Multiply:    b
8890: 20 2a 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   *= a;       bre
88a0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
88b0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
88c0: 20 20 20 20 69 66 28 20 61 3d 3d 30 2e 30 20 29      if( a==0.0 )
88d0: 20 67 6f 74 6f 20 64 69 76 69 64 65 5f 62 79 5f   goto divide_by_
88e0: 7a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 62 20  zero;.        b 
88f0: 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72  /= a;.        br
8900: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
8910: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
8920: 20 20 20 20 20 20 69 6e 74 20 69 61 20 3d 20 28        int ia = (
8930: 69 6e 74 29 61 3b 0a 20 20 20 20 20 20 20 20 69  int)a;.        i
8940: 6e 74 20 69 62 20 3d 20 28 69 6e 74 29 62 3b 0a  nt ib = (int)b;.
8950: 20 20 20 20 20 20 20 20 69 66 28 20 69 61 3d 3d          if( ia==
8960: 30 2e 30 20 29 20 67 6f 74 6f 20 64 69 76 69 64  0.0 ) goto divid
8970: 65 5f 62 79 5f 7a 65 72 6f 3b 0a 20 20 20 20 20  e_by_zero;.     
8980: 20 20 20 62 20 3d 20 69 62 20 25 20 69 61 3b 0a     b = ib % ia;.
8990: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
89a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
89b0: 20 52 65 6c 65 61 73 65 28 70 54 6f 73 29 3b 0a   Release(pTos);.
89c0: 20 20 20 20 70 54 6f 73 2d 2d 3b 0a 20 20 20 20      pTos--;.    
89d0: 52 65 6c 65 61 73 65 28 70 54 6f 73 29 3b 0a 20  Release(pTos);. 
89e0: 20 20 20 70 54 6f 73 2d 3e 72 20 3d 20 62 3b 0a     pTos->r = b;.
89f0: 20 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20      pTos->flags 
8a00: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
8a10: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
8a20: 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
8a30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
8a40: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 54  tegerAffinity(pT
8a50: 6f 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  os);.    }.  }. 
8a60: 20 62 72 65 61 6b 3b 0a 0a 64 69 76 69 64 65 5f   break;..divide_
8a70: 62 79 5f 7a 65 72 6f 3a 0a 20 20 52 65 6c 65 61  by_zero:.  Relea
8a80: 73 65 28 70 54 6f 73 29 3b 0a 20 20 70 54 6f 73  se(pTos);.  pTos
8a90: 2d 2d 3b 0a 20 20 52 65 6c 65 61 73 65 28 70 54  --;.  Release(pT
8aa0: 6f 73 29 3b 0a 20 20 70 54 6f 73 2d 3e 66 6c 61  os);.  pTos->fla
8ab0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
8ac0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8ad0: 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20  code: CollSeq * 
8ae0: 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  * P3.**.** P3 is
8af0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
8b00: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
8b10: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
8b20: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
8b30: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
8b40: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
8b50: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
8b60: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
8b70: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
8b80: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
8b90: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
8ba0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
8bb0: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
8bc0: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
8bd0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ons..**.** The i
8be0: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
8bf0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
8c00: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
8c10: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
8c20: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
8c30: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
8c40: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
8c50: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
8c60: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
8c70: 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20   publicly, only 
8c80: 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
8c90: 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e  s defined in fun
8ca0: 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  c.c..*/.case OP_
8cb0: 43 6f 6c 6c 53 65 71 3a 20 7b 20 20 20 20 20 20  CollSeq: {      
8cc0: 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73         /* no-pus
8cd0: 68 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  h */.  assert( p
8ce0: 4f 70 2d 3e 70 33 74 79 70 65 3d 3d 50 33 5f 43  Op->p3type==P3_C
8cf0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61  OLLSEQ );.  brea
8d00: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8d10: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
8d20: 50 33 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  P3.**.** Invoke 
8d30: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
8d40: 28 50 33 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P3 is a pointer
8d50: 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73   to a Function s
8d60: 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a  tructure that.**
8d70: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
8d80: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 32 20 61  ction) with P2 a
8d90: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
8da0: 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 2e 20 20  rom the stack.  
8db0: 50 6f 70 20 61 6c 6c 0a 2a 2a 20 61 72 67 75 6d  Pop all.** argum
8dc0: 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 73 74  ents from the st
8dd0: 61 63 6b 20 61 6e 64 20 70 75 73 68 20 62 61 63  ack and push bac
8de0: 6b 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a  k the result..**
8df0: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
8e00: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
8e10: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
8e20: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
8e30: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
8e40: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
8e50: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
8e60: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
8e70: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
8e80: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
8e90: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
8ea0: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
8eb0: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
8ec0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
8ed0: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
8ee0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
8ef0: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
8f00: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
8f10: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
8f20: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
8f30: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
8f40: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
8f50: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
8f60: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
8f70: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
8f80: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
8f90: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
8fa0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
8fb0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
8fc0: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
8fd0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
8fe0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
8ff0: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
9000: 6e 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20  n = pOp->p2;..  
9010: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
9020: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
9030: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20  l || n==0 );..  
9040: 70 41 72 67 20 3d 20 26 70 54 6f 73 5b 31 2d 6e  pArg = &pTos[1-n
9050: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
9060: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
9070: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
9080: 70 41 72 67 3b 0a 20 20 20 20 73 74 6f 72 65 54  pArg;.    storeT
9090: 79 70 65 49 6e 66 6f 28 70 41 72 67 2c 20 65 6e  ypeInfo(pArg, en
90a0: 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 0a 20 20  coding);.  }..  
90b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 74  assert( pOp->p3t
90c0: 79 70 65 3d 3d 50 33 5f 46 55 4e 43 44 45 46 20  ype==P3_FUNCDEF 
90d0: 7c 7c 20 70 4f 70 2d 3e 70 33 74 79 70 65 3d 3d  || pOp->p3type==
90e0: 50 33 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20  P3_VDBEFUNC );. 
90f0: 20 69 66 28 20 70 4f 70 2d 3e 70 33 74 79 70 65   if( pOp->p3type
9100: 3d 3d 50 33 5f 46 55 4e 43 44 45 46 20 29 7b 0a  ==P3_FUNCDEF ){.
9110: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
9120: 28 46 75 6e 63 44 65 66 2a 29 70 4f 70 2d 3e 70  (FuncDef*)pOp->p
9130: 33 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  3;.    ctx.pVdbe
9140: 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Func = 0;.  }els
9150: 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  e{.    ctx.pVdbe
9160: 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63  Func = (VdbeFunc
9170: 2a 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 63  *)pOp->p3;.    c
9180: 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e 70  tx.pFunc = ctx.p
9190: 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b  VdbeFunc->pFunc;
91a0: 0a 20 20 7d 0a 0a 20 20 63 74 78 2e 73 2e 66 6c  .  }..  ctx.s.fl
91b0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
91c0: 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
91d0: 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
91e0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
91f0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
9200: 75 6e 63 2d 3e 6e 65 65 64 43 6f 6c 6c 53 65 71  unc->needCollSeq
9210: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
9220: 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
9230: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
9240: 5d 2e 70 33 74 79 70 65 3d 3d 50 33 5f 43 4f 4c  ].p3type==P3_COL
9250: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
9260: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
9270: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
9280: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
9290: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 70 4f 70  = (CollSeq *)pOp
92a0: 5b 2d 31 5d 2e 70 33 3b 0a 20 20 7d 0a 20 20 69  [-1].p3;.  }.  i
92b0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
92c0: 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
92d0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
92e0: 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e  se;.  (*ctx.pFun
92f0: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
9300: 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28  n, apVal);.  if(
9310: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
9320: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
9330: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
9340: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 61  .  if( sqlite3Ma
9350: 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 20 67  llocFailed() ) g
9360: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 6f  oto no_mem;.  po
9370: 70 53 74 61 63 6b 28 26 70 54 6f 73 2c 20 6e 29  pStack(&pTos, n)
9380: 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61  ;..  /* If any a
9390: 75 78 69 6c 61 72 79 20 64 61 74 61 20 66 75 6e  uxilary data fun
93a0: 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e  ctions have been
93b0: 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20   called by this 
93c0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  user function,. 
93d0: 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
93e0: 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63  call the destruc
93f0: 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d  tor for any non-
9400: 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20  static values.. 
9410: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56   */.  if( ctx.pV
9420: 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73  dbeFunc ){.    s
9430: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
9440: 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62  AuxData(ctx.pVdb
9450: 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  eFunc, pOp->p1);
9460: 0a 20 20 20 20 70 4f 70 2d 3e 70 33 20 3d 20 28  .    pOp->p3 = (
9470: 63 68 61 72 20 2a 29 63 74 78 2e 70 56 64 62 65  char *)ctx.pVdbe
9480: 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  Func;.    pOp->p
9490: 33 74 79 70 65 20 3d 20 50 33 5f 56 44 42 45 46  3type = P3_VDBEF
94a0: 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  UNC;.  }..  /* I
94b0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
94c0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
94d0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
94e0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
94f0: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
9500: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
9510: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 73  g(&p->zErrMsg, s
9520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
9530: 74 28 26 63 74 78 2e 73 29 2c 20 28 63 68 61 72  t(&ctx.s), (char
9540: 2a 29 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  *)0);.    rc = S
9550: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
9560: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
9570: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
9580: 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 6f  nction to the to
9590: 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 2a  p of the stack *
95a0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
95b0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63  hangeEncoding(&c
95c0: 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  tx.s, encoding);
95d0: 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 70 54 6f  .  pTos++;.  pTo
95e0: 73 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20  s->flags = 0;.  
95f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
9600: 76 65 28 70 54 6f 73 2c 20 26 63 74 78 2e 73 29  ve(pTos, &ctx.s)
9610: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9620: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
9630: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20  * * *.**.** Pop 
9640: 74 68 65 20 74 6f 70 20 74 77 6f 20 65 6c 65 6d  the top two elem
9650: 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 73 74  ents from the st
9660: 61 63 6b 2e 20 20 43 6f 6e 76 65 72 74 20 62 6f  ack.  Convert bo
9670: 74 68 20 65 6c 65 6d 65 6e 74 73 0a 2a 2a 20 74  th elements.** t
9680: 6f 20 69 6e 74 65 67 65 72 73 2e 20 20 50 75 73  o integers.  Pus
9690: 68 20 62 61 63 6b 20 6f 6e 74 6f 20 74 68 65 20  h back onto the 
96a0: 73 74 61 63 6b 20 74 68 65 20 62 69 74 2d 77 69  stack the bit-wi
96b0: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 0a 2a 2a  se AND of the.**
96c0: 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2e 0a 2a   two elements..*
96d0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
96e0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
96f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9700: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
9710: 69 74 4f 72 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  itOr * * *.**.**
9720: 20 50 6f 70 20 74 68 65 20 74 6f 70 20 74 77 6f   Pop the top two
9730: 20 65 6c 65 6d 65 6e 74 73 20 66 72 6f 6d 20 74   elements from t
9740: 68 65 20 73 74 61 63 6b 2e 20 20 43 6f 6e 76 65  he stack.  Conve
9750: 72 74 20 62 6f 74 68 20 65 6c 65 6d 65 6e 74 73  rt both elements
9760: 0a 2a 2a 20 74 6f 20 69 6e 74 65 67 65 72 73 2e  .** to integers.
9770: 20 20 50 75 73 68 20 62 61 63 6b 20 6f 6e 74 6f    Push back onto
9780: 20 74 68 65 20 73 74 61 63 6b 20 74 68 65 20 62   the stack the b
9790: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
97a0: 65 0a 2a 2a 20 74 77 6f 20 65 6c 65 6d 65 6e 74  e.** two element
97b0: 73 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  s..** If either 
97c0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
97d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
97e0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
97f0: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 2a 20 2a  e: ShiftLeft * *
9800: 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20 74 68 65   *.**.** Pop the
9810: 20 74 6f 70 20 74 77 6f 20 65 6c 65 6d 65 6e 74   top two element
9820: 73 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b  s from the stack
9830: 2e 20 20 43 6f 6e 76 65 72 74 20 62 6f 74 68 20  .  Convert both 
9840: 65 6c 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 69  elements.** to i
9850: 6e 74 65 67 65 72 73 2e 20 20 50 75 73 68 20 62  ntegers.  Push b
9860: 61 63 6b 20 6f 6e 74 6f 20 74 68 65 20 73 74 61  ack onto the sta
9870: 63 6b 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6c  ck the second el
9880: 65 6d 65 6e 74 20 73 68 69 66 74 65 64 0a 2a 2a  ement shifted.**
9890: 20 6c 65 66 74 20 62 79 20 4e 20 62 69 74 73 20   left by N bits 
98a0: 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 74  where N is the t
98b0: 6f 70 20 65 6c 65 6d 65 6e 74 20 6f 6e 20 74 68  op element on th
98c0: 65 20 73 74 61 63 6b 2e 0a 2a 2a 20 49 66 20 65  e stack..** If e
98d0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
98e0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
98f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9900: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
9910: 67 68 74 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  ght * * *.**.** 
9920: 50 6f 70 20 74 68 65 20 74 6f 70 20 74 77 6f 20  Pop the top two 
9930: 65 6c 65 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68  elements from th
9940: 65 20 73 74 61 63 6b 2e 20 20 43 6f 6e 76 65 72  e stack.  Conver
9950: 74 20 62 6f 74 68 20 65 6c 65 6d 65 6e 74 73 0a  t both elements.
9960: 2a 2a 20 74 6f 20 69 6e 74 65 67 65 72 73 2e 20  ** to integers. 
9970: 20 50 75 73 68 20 62 61 63 6b 20 6f 6e 74 6f 20   Push back onto 
9980: 74 68 65 20 73 74 61 63 6b 20 74 68 65 20 73 65  the stack the se
9990: 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 73 68 69  cond element shi
99a0: 66 74 65 64 0a 2a 2a 20 72 69 67 68 74 20 62 79  fted.** right by
99b0: 20 4e 20 62 69 74 73 20 77 68 65 72 65 20 4e 20   N bits where N 
99c0: 69 73 20 74 68 65 20 74 6f 70 20 65 6c 65 6d 65  is the top eleme
99d0: 6e 74 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2e  nt on the stack.
99e0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
99f0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
9a00: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9a10: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  L..*/.case OP_Bi
9a20: 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  tAnd:           
9a30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9a40: 20 54 4b 5f 42 49 54 41 4e 44 2c 20 6e 6f 2d 70   TK_BITAND, no-p
9a50: 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ush */.case OP_B
9a60: 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20  itOr:           
9a70: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9a80: 73 20 54 4b 5f 42 49 54 4f 52 2c 20 6e 6f 2d 70  s TK_BITOR, no-p
9a90: 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ush */.case OP_S
9aa0: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
9ab0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9ac0: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 6e 6f 2d  s TK_LSHIFT, no-
9ad0: 70 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  push */.case OP_
9ae0: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
9af0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9b00: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 6e 6f  as TK_RSHIFT, no
9b10: 2d 70 75 73 68 20 2a 2f 0a 20 20 4d 65 6d 20 2a  -push */.  Mem *
9b20: 70 4e 6f 73 20 3d 20 26 70 54 6f 73 5b 2d 31 5d  pNos = &pTos[-1]
9b30: 3b 0a 20 20 69 36 34 20 61 2c 20 62 3b 0a 0a 20  ;.  i64 a, b;.. 
9b40: 20 61 73 73 65 72 74 28 20 70 4e 6f 73 3e 3d 70   assert( pNos>=p
9b50: 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 69 66  ->aStack );.  if
9b60: 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73 20 7c  ( (pTos->flags |
9b70: 20 70 4e 6f 73 2d 3e 66 6c 61 67 73 29 20 26 20   pNos->flags) & 
9b80: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
9b90: 70 6f 70 53 74 61 63 6b 28 26 70 54 6f 73 2c 20  popStack(&pTos, 
9ba0: 32 29 3b 0a 20 20 20 20 70 54 6f 73 2b 2b 3b 0a  2);.    pTos++;.
9bb0: 20 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20      pTos->flags 
9bc0: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
9bd0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d  break;.  }.  a =
9be0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
9bf0: 61 6c 75 65 28 70 4e 6f 73 29 3b 0a 20 20 62 20  alue(pNos);.  b 
9c00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
9c10: 56 61 6c 75 65 28 70 54 6f 73 29 3b 0a 20 20 73  Value(pTos);.  s
9c20: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
9c30: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
9c40: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61  P_BitAnd:      a
9c50: 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   &= b;     break
9c60: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69  ;.    case OP_Bi
9c70: 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20  tOr:       a |= 
9c80: 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  b;     break;.  
9c90: 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c    case OP_ShiftL
9ca0: 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20  eft:   a <<= b; 
9cb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
9cc0: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
9cd0: 3a 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62  :  a >>= b;    b
9ce0: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
9cf0: 74 3a 20 20 20 2f 2a 20 43 41 4e 54 20 48 41 50  t:   /* CANT HAP
9d00: 50 45 4e 20 2a 2f 20 20 20 20 20 62 72 65 61 6b  PEN */     break
9d10: 3b 0a 20 20 7d 0a 20 20 52 65 6c 65 61 73 65 28  ;.  }.  Release(
9d20: 70 54 6f 73 29 3b 0a 20 20 70 54 6f 73 2d 2d 3b  pTos);.  pTos--;
9d30: 0a 20 20 52 65 6c 65 61 73 65 28 70 54 6f 73 29  .  Release(pTos)
9d40: 3b 0a 20 20 70 54 6f 73 2d 3e 69 20 3d 20 61 3b  ;.  pTos->i = a;
9d50: 0a 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d  .  pTos->flags =
9d60: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 62 72 65 61   MEM_Int;.  brea
9d70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9d80: 20 41 64 64 49 6d 6d 20 20 50 31 20 2a 20 2a 0a   AddImm  P1 * *.
9d90: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  ** .** Add the v
9da0: 61 6c 75 65 20 50 31 20 74 6f 20 77 68 61 74 65  alue P1 to whate
9db0: 76 65 72 20 69 73 20 6f 6e 20 74 6f 70 20 6f 66  ver is on top of
9dc0: 20 74 68 65 20 73 74 61 63 6b 2e 20 20 54 68 65   the stack.  The
9dd0: 20 72 65 73 75 6c 74 0a 2a 2a 20 69 73 20 61 6c   result.** is al
9de0: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
9df0: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
9e00: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73  the top of the s
9e10: 74 61 63 6b 20 74 6f 20 62 65 20 61 6e 20 69 6e  tack to be an in
9e20: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
9e30: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
9e40: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
9e50: 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
9e60: 0a 20 20 61 73 73 65 72 74 28 20 70 54 6f 73 3e  .  assert( pTos>
9e70: 3d 70 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20  =p->aStack );.  
9e80: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
9e90: 74 65 67 65 72 69 66 79 28 70 54 6f 73 29 3b 0a  tegerify(pTos);.
9ea0: 20 20 70 54 6f 73 2d 3e 69 20 2b 3d 20 70 4f 70    pTos->i += pOp
9eb0: 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p1;.  break;.}
9ec0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 72  ../* Opcode: For
9ed0: 63 65 49 6e 74 20 50 31 20 50 32 20 2a 0a 2a 2a  ceInt P1 P2 *.**
9ee0: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20  .** Convert the 
9ef0: 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b  top of the stack
9f00: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
9f10: 2e 20 20 49 66 20 74 68 65 20 63 75 72 72 65 6e  .  If the curren
9f20: 74 20 74 6f 70 20 6f 66 0a 2a 2a 20 74 68 65 20  t top of.** the 
9f30: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 6e 75 6d  stack is not num
9f40: 65 72 69 63 20 28 6d 65 61 6e 69 6e 67 20 74 68  eric (meaning th
9f50: 61 74 20 69 73 20 69 73 20 61 20 4e 55 4c 4c 20  at is is a NULL 
9f60: 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
9f70: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  .** does not loo
9f80: 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67 65  k like an intege
9f90: 72 20 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f  r or floating po
9fa0: 69 6e 74 20 6e 75 6d 62 65 72 29 20 74 68 65 6e  int number) then
9fb0: 20 70 6f 70 20 74 68 65 0a 2a 2a 20 73 74 61 63   pop the.** stac
9fc0: 6b 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32  k and jump to P2
9fd0: 2e 20 20 49 66 20 74 68 65 20 74 6f 70 20 6f 66  .  If the top of
9fe0: 20 74 68 65 20 73 74 61 63 6b 20 69 73 20 6e 75   the stack is nu
9ff0: 6d 65 72 69 63 20 74 68 65 6e 0a 2a 2a 20 63 6f  meric then.** co
a000: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 74 68  nvert it into th
a010: 65 20 6c 65 61 73 74 20 69 6e 74 65 67 65 72 20  e least integer 
a020: 74 68 61 74 20 69 73 20 67 72 65 61 74 65 72 20  that is greater 
a030: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
a040: 20 69 74 73 0a 2a 2a 20 63 75 72 72 65 6e 74 20   its.** current 
a050: 76 61 6c 75 65 20 69 66 20 50 31 3d 3d 30 2c 20  value if P1==0, 
a060: 6f 72 20 74 6f 20 74 68 65 20 6c 65 61 73 74 20  or to the least 
a070: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
a080: 73 74 72 69 63 74 6c 79 0a 2a 2a 20 67 72 65 61  strictly.** grea
a090: 74 65 72 20 74 68 61 6e 20 69 74 73 20 63 75 72  ter than its cur
a0a0: 72 65 6e 74 20 76 61 6c 75 65 20 69 66 20 50 31  rent value if P1
a0b0: 3d 3d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ==1..*/.case OP_
a0c0: 46 6f 72 63 65 49 6e 74 3a 20 7b 20 20 20 20 20  ForceInt: {     
a0d0: 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73         /* no-pus
a0e0: 68 20 2a 2f 0a 20 20 69 36 34 20 76 3b 0a 20 20  h */.  i64 v;.  
a0f0: 61 73 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d  assert( pTos>=p-
a100: 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 61 70 70  >aStack );.  app
a110: 6c 79 41 66 66 69 6e 69 74 79 28 70 54 6f 73 2c  lyAffinity(pTos,
a120: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
a130: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
a140: 20 20 69 66 28 20 28 70 54 6f 73 2d 3e 66 6c 61    if( (pTos->fla
a150: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
a160: 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20  M_Real))==0 ){. 
a170: 20 20 20 52 65 6c 65 61 73 65 28 70 54 6f 73 29     Release(pTos)
a180: 3b 0a 20 20 20 20 70 54 6f 73 2d 2d 3b 0a 20 20  ;.    pTos--;.  
a190: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
a1a0: 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   1;.    break;. 
a1b0: 20 7d 0a 20 20 69 66 28 20 70 54 6f 73 2d 3e 66   }.  if( pTos->f
a1c0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
a1d0: 7b 0a 20 20 20 20 76 20 3d 20 70 54 6f 73 2d 3e  {.    v = pTos->
a1e0: 69 20 2b 20 28 70 4f 70 2d 3e 70 31 21 3d 30 29  i + (pOp->p1!=0)
a1f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
a200: 2a 20 46 49 58 20 4d 45 3a 20 20 73 68 6f 75 6c  * FIX ME:  shoul
a210: 64 20 74 68 69 73 20 6e 6f 74 20 62 65 20 61 73  d this not be as
a220: 73 65 72 74 28 20 70 54 6f 73 2d 3e 66 6c 61 67  sert( pTos->flag
a230: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 20 3f  s & MEM_Real ) ?
a240: 3f 3f 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ?? */.    sqlite
a250: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
a260: 70 54 6f 73 29 3b 0a 20 20 20 20 76 20 3d 20 28  pTos);.    v = (
a270: 69 6e 74 29 70 54 6f 73 2d 3e 72 3b 0a 20 20 20  int)pTos->r;.   
a280: 20 69 66 28 20 70 54 6f 73 2d 3e 72 3e 28 64 6f   if( pTos->r>(do
a290: 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b 0a 20 20  uble)v ) v++;.  
a2a0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 26 26    if( pOp->p1 &&
a2b0: 20 70 54 6f 73 2d 3e 72 3d 3d 28 64 6f 75 62 6c   pTos->r==(doubl
a2c0: 65 29 76 20 29 20 76 2b 2b 3b 0a 20 20 7d 0a 20  e)v ) v++;.  }. 
a2d0: 20 52 65 6c 65 61 73 65 28 70 54 6f 73 29 3b 0a   Release(pTos);.
a2e0: 20 20 70 54 6f 73 2d 3e 69 20 3d 20 76 3b 0a 20    pTos->i = v;. 
a2f0: 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d   pTos->flags = M
a300: 45 4d 5f 49 6e 74 3b 0a 20 20 62 72 65 61 6b 3b  EM_Int;.  break;
a310: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
a320: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
a330: 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68  .** .** Force th
a340: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
a350: 63 6b 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ck to be an inte
a360: 67 65 72 2e 20 20 49 66 20 74 68 65 20 74 6f 70  ger.  If the top
a370: 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 61 63 6b   of the.** stack
a380: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
a390: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
a3a0: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
a3b0: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
a3c0: 74 68 20 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  th out data loss
a3d0: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
a3e0: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
a3f0: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
a400: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
a410: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
a420: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
a430: 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20  op of the stack 
a440: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
a450: 72 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  r and P2 is not 
a460: 7a 65 72 6f 20 61 6e 64 0a 2a 2a 20 50 31 20 69  zero and.** P1 i
a470: 73 20 31 2c 20 74 68 65 6e 20 74 68 65 20 73 74  s 1, then the st
a480: 61 63 6b 20 69 73 20 70 6f 70 70 65 64 2e 20 20  ack is popped.  
a490: 49 6e 20 61 6c 6c 20 6f 74 68 65 72 20 63 61 73  In all other cas
a4a0: 65 73 2c 20 74 68 65 20 64 65 70 74 68 0a 2a 2a  es, the depth.**
a4b0: 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 69 73   of the stack is
a4c0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63   unchanged..*/.c
a4d0: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
a4e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a4f0: 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 61  * no-push */.  a
a500: 73 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e  ssert( pTos>=p->
a510: 61 53 74 61 63 6b 20 29 3b 0a 20 20 61 70 70 6c  aStack );.  appl
a520: 79 41 66 66 69 6e 69 74 79 28 70 54 6f 73 2c 20  yAffinity(pTos, 
a530: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
a540: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
a550: 20 69 66 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67   if( (pTos->flag
a560: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
a570: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
a580: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
a590: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41  c = SQLITE_MISMA
a5a0: 54 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  TCH;.      goto 
a5b0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
a5c0: 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
a5d0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31       if( pOp->p1
a5e0: 20 29 20 70 6f 70 53 74 61 63 6b 28 26 70 54 6f   ) popStack(&pTo
a5f0: 73 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 63 20  s, 1);.      pc 
a600: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
a610: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
a620: 20 20 52 65 6c 65 61 73 65 28 70 54 6f 73 29 3b    Release(pTos);
a630: 0a 20 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73  .    pTos->flags
a640: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a   = MEM_Int;.  }.
a650: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a660: 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e  pcode: RealAffin
a670: 69 74 79 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  ity * * *.**.** 
a680: 49 66 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  If the top of th
a690: 65 20 73 74 61 63 6b 20 69 73 20 61 6e 20 69 6e  e stack is an in
a6a0: 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  teger, convert i
a6b0: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
a6c0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
a6d0: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
a6e0: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
a6f0: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
a700: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
a710: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
a720: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
a730: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
a740: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
a750: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
a760: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
a770: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
a780: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
a790: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
a7a0: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
a7b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
a7c0: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6e              /* n
a7e0: 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 61 73 73 65  o-push */.  asse
a7f0: 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74  rt( pTos>=p->aSt
a800: 61 63 6b 20 29 3b 0a 20 20 69 66 28 20 70 54 6f  ack );.  if( pTo
a810: 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  s->flags & MEM_I
a820: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
a830: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
a840: 70 54 6f 73 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pTos);.  }.  bre
a850: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
a860: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
a870: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78  /* Opcode: ToTex
a880: 74 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  t * * *.**.** Fo
a890: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 6f 6e  rce the value on
a8a0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
a8b0: 73 74 61 63 6b 20 74 6f 20 62 65 20 74 65 78 74  stack to be text
a8c0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
a8d0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
a8e0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
a8f0: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
a900: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
a910: 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20  printf().  Blob 
a920: 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61  values are uncha
a930: 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20  nged and.** are 
a940: 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c  afterwards simpl
a950: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
a960: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   text..**.** A N
a970: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
a980: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
a990: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
a9a0: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
a9b0: 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b  ase OP_ToText: {
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
a9e0: 54 4f 5f 54 45 58 54 2c 20 6e 6f 2d 70 75 73 68  TO_TEXT, no-push
a9f0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 54   */.  assert( pT
aa00: 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29 3b  os>=p->aStack );
aa10: 0a 20 20 69 66 28 20 70 54 6f 73 2d 3e 66 6c 61  .  if( pTos->fla
aa20: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20  gs & MEM_Null ) 
aa30: 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28  break;.  assert(
aa40: 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42   MEM_Str==(MEM_B
aa50: 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 54 6f  lob>>3) );.  pTo
aa60: 73 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 54 6f  s->flags |= (pTo
aa70: 73 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f  s->flags&MEM_Blo
aa80: 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66  b)>>3;.  applyAf
aa90: 66 69 6e 69 74 79 28 70 54 6f 73 2c 20 53 51 4c  finity(pTos, SQL
aaa0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
aab0: 63 6f 64 69 6e 67 29 3b 0a 20 20 61 73 73 65 72  coding);.  asser
aac0: 74 28 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26  t( pTos->flags &
aad0: 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 70 54   MEM_Str );.  pT
aae0: 6f 73 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  os->flags &= ~(M
aaf0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
ab00: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 62 72 65  MEM_Blob);.  bre
ab10: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ab20: 3a 20 54 6f 42 6c 6f 62 20 2a 20 2a 20 2a 0a 2a  : ToBlob * * *.*
ab30: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
ab40: 61 6c 75 65 20 6f 6e 20 74 68 65 20 74 6f 70 20  alue on the top 
ab50: 6f 66 20 74 68 65 20 73 74 61 63 6b 20 74 6f 20  of the stack to 
ab60: 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66  be a BLOB..** If
ab70: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75   the value is nu
ab80: 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69  meric, convert i
ab90: 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69  t to a string fi
aba0: 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20  rst..** Strings 
abb0: 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74  are simply reint
abc0: 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62  erpreted as blob
abd0: 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65  s with no change
abe0: 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72  .** to the under
abf0: 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a  lying data..**.*
ac00: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
ac10: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
ac20: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
ac30: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
ac40: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c  .*/.case OP_ToBl
ac50: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
ac60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ac70: 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 6e 6f  s TK_TO_BLOB, no
ac80: 2d 70 75 73 68 20 2a 2f 0a 20 20 61 73 73 65 72  -push */.  asser
ac90: 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61  t( pTos>=p->aSta
aca0: 63 6b 20 29 3b 0a 20 20 69 66 28 20 70 54 6f 73  ck );.  if( pTos
acb0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
acc0: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66  ll ) break;.  if
acd0: 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26  ( (pTos->flags &
ace0: 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
acf0: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
ad00: 74 79 28 70 54 6f 73 2c 20 53 51 4c 49 54 45 5f  ty(pTos, SQLITE_
ad10: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
ad20: 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ng);.    assert(
ad30: 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d   pTos->flags & M
ad40: 45 4d 5f 53 74 72 20 29 3b 0a 20 20 20 20 70 54  EM_Str );.    pT
ad50: 6f 73 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  os->flags |= MEM
ad60: 5f 42 6c 6f 62 3b 0a 20 20 7d 0a 20 20 70 54 6f  _Blob;.  }.  pTo
ad70: 73 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  s->flags &= ~(ME
ad80: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
ad90: 45 4d 5f 53 74 72 29 3b 0a 20 20 62 72 65 61 6b  EM_Str);.  break
ada0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
adb0: 54 6f 4e 75 6d 65 72 69 63 20 2a 20 2a 20 2a 0a  ToNumeric * * *.
adc0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
add0: 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 74 6f 70  value on the top
ade0: 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 74 6f   of the stack to
adf0: 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74   be numeric (eit
ae00: 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65  her an.** intege
ae10: 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d  r or a floating-
ae20: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a  point number.).*
ae30: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
ae40: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
ae50: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
ae60: 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68  t to an using th
ae70: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
ae80: 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f  of atoi() or ato
ae90: 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  f() and store 0 
aea0: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
aeb0: 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73  rsion .** is pos
aec0: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
aed0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
aee0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
aef0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
af00: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
af10: 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63  ase OP_ToNumeric
af20: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
af30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
af40: 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 6e  TK_TO_NUMERIC, n
af50: 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 61 73 73 65  o-push */.  asse
af60: 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74  rt( pTos>=p->aSt
af70: 61 63 6b 20 29 3b 0a 20 20 69 66 28 20 28 70 54  ack );.  if( (pT
af80: 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  os->flags & MEM_
af90: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
afa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
afb0: 6d 65 72 69 66 79 28 70 54 6f 73 29 3b 0a 20 20  merify(pTos);.  
afc0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
afd0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
afe0: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
aff0: 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 2a 20 2a  pcode: ToInt * *
b000: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
b010: 68 65 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20  he value on the 
b020: 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b  top of the stack
b030: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
b040: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
b050: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
b060: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
b070: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
b080: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
b090: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
b0a0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
b0b0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
b0c0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
b0d0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
b0e0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
b0f0: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
b100: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
b110: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
b120: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
b130: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
b140: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
b150: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
b160: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
b170: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
b180: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b190: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 6e 6f 2d 70   TK_TO_INT, no-p
b1a0: 75 73 68 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ush */.  assert(
b1b0: 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b   pTos>=p->aStack
b1c0: 20 29 3b 0a 20 20 69 66 28 20 28 70 54 6f 73 2d   );.  if( (pTos-
b1d0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
b1e0: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
b1f0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
b200: 65 72 69 66 79 28 70 54 6f 73 29 3b 0a 20 20 7d  erify(pTos);.  }
b210: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
b220: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b230: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
b240: 20 54 6f 52 65 61 6c 20 2a 20 2a 20 2a 0a 2a 2a   ToReal * * *.**
b250: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
b260: 6c 75 65 20 6f 6e 20 74 68 65 20 74 6f 70 20 6f  lue on the top o
b270: 66 20 74 68 65 20 73 74 61 63 6b 20 74 6f 20 62  f the stack to b
b280: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
b290: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
b2a0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
b2b0: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
b2c0: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
b2d0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b2e0: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
b2f0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
b300: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
b310: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
b320: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
b330: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
b340: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
b350: 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65  sion is possible
b360: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
b370: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
b380: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
b390: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
b3a0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
b3b0: 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20  P_ToReal: {     
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3d0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45  same as TK_TO_RE
b3e0: 41 4c 2c 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20  AL, no-push */. 
b3f0: 20 61 73 73 65 72 74 28 20 70 54 6f 73 3e 3d 70   assert( pTos>=p
b400: 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 69 66  ->aStack );.  if
b410: 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26  ( (pTos->flags &
b420: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
b430: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b440: 4d 65 6d 52 65 61 6c 69 66 79 28 70 54 6f 73 29  MemRealify(pTos)
b450: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
b460: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b470: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
b480: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
b490: 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 50 6f 70   P2 P3.**.** Pop
b4a0: 20 74 68 65 20 74 6f 70 20 74 77 6f 20 65 6c 65   the top two ele
b4b0: 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 73  ments from the s
b4c0: 74 61 63 6b 2e 20 20 49 66 20 74 68 65 79 20 61  tack.  If they a
b4d0: 72 65 20 65 71 75 61 6c 2c 20 74 68 65 6e 0a 2a  re equal, then.*
b4e0: 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
b4f0: 63 74 69 6f 6e 20 50 32 2e 20 20 4f 74 68 65 72  ction P2.  Other
b500: 77 69 73 65 2c 20 63 6f 6e 74 69 6e 75 65 20 74  wise, continue t
b510: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
b520: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
b530: 20 74 68 65 20 30 78 31 30 30 20 62 69 74 20 6f   the 0x100 bit o
b540: 66 20 50 31 20 69 73 20 74 72 75 65 20 61 6e 64  f P1 is true and
b550: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b560: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
b570: 65 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 2e 20 20  e the.** jump.  
b580: 49 66 20 74 68 65 20 30 78 31 30 30 20 62 69 74  If the 0x100 bit
b590: 20 6f 66 20 50 31 20 69 73 20 63 6c 65 61 72 20   of P1 is clear 
b5a0: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 20 69  then fall thru i
b5b0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
b5c0: 0a 2a 2a 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  .** is NULL..**.
b5d0: 2a 2a 20 49 66 20 74 68 65 20 30 78 32 30 30 20  ** If the 0x200 
b5e0: 62 69 74 20 6f 66 20 50 31 20 69 73 20 73 65 74  bit of P1 is set
b5f0: 20 61 6e 64 20 65 69 74 68 65 72 20 6f 70 65 72   and either oper
b600: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
b610: 0a 2a 2a 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  .** both operand
b620: 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  s are converted 
b630: 74 6f 20 69 6e 74 65 67 65 72 73 20 70 72 69 6f  to integers prio
b640: 72 20 74 6f 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  r to comparison.
b650: 0a 2a 2a 20 4e 55 4c 4c 20 6f 70 65 72 61 6e 64  .** NULL operand
b660: 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  s are converted 
b670: 74 6f 20 7a 65 72 6f 20 61 6e 64 20 6e 6f 6e 2d  to zero and non-
b680: 4e 55 4c 4c 20 6f 70 65 72 61 6e 64 73 20 61 72  NULL operands ar
b690: 65 0a 2a 2a 20 63 6f 6e 76 65 72 74 65 64 20 74  e.** converted t
b6a0: 6f 20 31 2e 20 20 54 68 75 73 2c 20 66 6f 72 20  o 1.  Thus, for 
b6b0: 65 78 61 6d 70 6c 65 2c 20 77 69 74 68 20 30 78  example, with 0x
b6c0: 32 30 30 20 73 65 74 2c 20 20 4e 55 4c 4c 3d 3d  200 set,  NULL==
b6d0: 4e 55 4c 4c 20 69 73 20 74 72 75 65 0a 2a 2a 20  NULL is true.** 
b6e0: 77 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64  whereas it would
b6f0: 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 4e 55 4c   normally be NUL
b700: 4c 2e 20 20 53 69 6d 69 6c 61 72 6c 79 2c 20 20  L.  Similarly,  
b710: 4e 55 4c 4c 3d 3d 31 32 33 20 69 73 20 66 61 6c  NULL==123 is fal
b720: 73 65 20 77 68 65 6e 0a 2a 2a 20 30 78 32 30 30  se when.** 0x200
b730: 20 69 73 20 73 65 74 20 62 75 74 20 69 73 20 4e   is set but is N
b740: 55 4c 4c 20 77 68 65 6e 20 74 68 65 20 30 78 32  ULL when the 0x2
b750: 30 30 20 62 69 74 20 6f 66 20 50 31 20 69 73 20  00 bit of P1 is 
b760: 63 6c 65 61 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  clear..**.** The
b770: 20 6c 65 61 73 74 20 73 69 67 6e 69 66 69 63 61   least significa
b780: 6e 74 20 62 79 74 65 20 6f 66 20 50 31 20 28 6d  nt byte of P1 (m
b790: 61 73 6b 20 30 78 66 66 29 20 6d 75 73 74 20 62  ask 0xff) must b
b7a0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
b7b0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
b7c0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
b7d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
b7e0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
b7f0: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
b800: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
b810: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
b820: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
b830: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
b840: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
b850: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
b860: 62 79 74 65 20 69 73 0a 2a 2a 20 30 78 30 30 2c  byte is.** 0x00,
b870: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 20 61 66   then numeric af
b880: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 0a  finity is used..
b890: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
b8a0: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
b8b0: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
b8c0: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
b8d0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
b8e0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
b8f0: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
b900: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 2c 20 6f  ues are blobs, o
b910: 72 20 62 6f 74 68 20 61 72 65 20 74 65 78 74 2c  r both are text,
b920: 0a 2a 2a 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  .** then memcmp(
b930: 29 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  ) is used to det
b940: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
b950: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
b960: 69 73 6f 6e 2e 20 49 66 0a 2a 2a 20 62 6f 74 68  ison. If.** both
b970: 20 76 61 6c 75 65 73 20 61 72 65 20 6e 75 6d 65   values are nume
b980: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
b990: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
b9a0: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 0a 2a  s used. If the.*
b9b0: 2a 20 74 77 6f 20 76 61 6c 75 65 73 20 61 72 65  * two values are
b9c0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
b9d0: 70 65 73 2c 20 74 68 65 6e 20 74 68 65 79 20 61  pes, then they a
b9e0: 72 65 20 69 6e 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  re inequal..**.*
b9f0: 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
ba00: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
ba10: 6e 73 74 65 61 64 2c 20 70 75 73 68 20 61 6e 20  nstead, push an 
ba20: 69 6e 74 65 67 65 72 20 31 20 6f 6e 74 6f 20 74  integer 1 onto t
ba30: 68 65 0a 2a 2a 20 73 74 61 63 6b 20 69 66 20 74  he.** stack if t
ba40: 68 65 20 6a 75 6d 70 20 77 6f 75 6c 64 20 68 61  he jump would ha
ba50: 76 65 20 62 65 65 6e 20 74 61 6b 65 6e 2c 20 6f  ve been taken, o
ba60: 72 20 61 20 30 20 69 66 20 6e 6f 74 2e 20 20 50  r a 0 if not.  P
ba70: 75 73 68 20 61 0a 2a 2a 20 4e 55 4c 4c 20 69 66  ush a.** NULL if
ba80: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
ba90: 77 61 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  was NULL..**.** 
baa0: 49 66 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  If P3 is not NUL
bab0: 4c 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  L it is a pointe
bac0: 72 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6e 67  r to a collating
bad0: 20 73 65 71 75 65 6e 63 65 20 28 61 20 43 6f 6c   sequence (a Col
bae0: 6c 53 65 71 0a 2a 2a 20 73 74 72 75 63 74 75 72  lSeq.** structur
baf0: 65 29 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  e) that defines 
bb00: 68 6f 77 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  how to compare t
bb10: 65 78 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ext..*/./* Opcod
bb20: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 0a 2a  e: Ne P1 P2 P3.*
bb30: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
bb40: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71  just like the Eq
bb50: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
bb60: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
bb70: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
bb80: 6f 70 65 72 61 6e 64 73 20 66 72 6f 6d 20 74 68  operands from th
bb90: 65 20 73 74 61 63 6b 20 61 72 65 20 6e 6f 74 20  e stack are not 
bba0: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
bbb0: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Eq opcode for.**
bbc0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
bbd0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
bbe0: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
bbf0: 50 33 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P3.**.** This wo
bc00: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
bc10: 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65  e Eq opcode exce
bc20: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
bc30: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
bc40: 74 68 65 20 32 6e 64 20 65 6c 65 6d 65 6e 74 20  the 2nd element 
bc50: 64 6f 77 6e 20 6f 6e 20 74 68 65 20 73 74 61 63  down on the stac
bc60: 6b 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  k is less than t
bc70: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74  he top of the st
bc80: 61 63 6b 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ack..** See the 
bc90: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Eq opcode for ad
bca0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
bcb0: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
bcc0: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 0a  de: Le P1 P2 P3.
bcd0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
bce0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45   just like the E
bcf0: 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  q opcode except 
bd00: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
bd10: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
bd20: 20 32 6e 64 20 65 6c 65 6d 65 6e 74 20 64 6f 77   2nd element dow
bd30: 6e 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 69  n on the stack i
bd40: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
bd50: 71 75 61 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 74  qual to the.** t
bd60: 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e  op of the stack.
bd70: 20 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63    See the Eq opc
bd80: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
bd90: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
bda0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
bdb0: 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
bdc0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
bdd0: 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f  like the Eq opco
bde0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
bdf0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
be00: 20 69 66 0a 2a 2a 20 74 68 65 20 32 6e 64 20 65   if.** the 2nd e
be10: 6c 65 6d 65 6e 74 20 64 6f 77 6e 20 6f 6e 20 74  lement down on t
be20: 68 65 20 73 74 61 63 6b 20 69 73 20 67 72 65 61  he stack is grea
be30: 74 65 72 20 74 68 61 6e 20 74 68 65 20 74 6f 70  ter than the top
be40: 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 0a 2a   of the stack..*
be50: 2a 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63  * See the Eq opc
be60: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
be70: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
be80: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
be90: 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
bea0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
beb0: 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f  like the Eq opco
bec0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
bed0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
bee0: 20 69 66 0a 2a 2a 20 74 68 65 20 32 6e 64 20 65   if.** the 2nd e
bef0: 6c 65 6d 65 6e 74 20 64 6f 77 6e 20 6f 6e 20 74  lement down on t
bf00: 68 65 20 73 74 61 63 6b 20 69 73 20 67 72 65 61  he stack is grea
bf10: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
bf20: 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 74 6f 70 20  l to the.** top 
bf30: 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 20 20 53  of the stack.  S
bf40: 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65  ee the Eq opcode
bf50: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
bf60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
bf70: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
bf80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bf90: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6e 6f 2d 70  e as TK_EQ, no-p
bfa0: 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ush */.case OP_N
bfb0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
bfc0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
bfd0: 45 2c 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 63 61  E, no-push */.ca
bfe0: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
bff0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c000: 61 73 20 54 4b 5f 4c 54 2c 20 6e 6f 2d 70 75 73  as TK_LT, no-pus
c010: 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  h */.case OP_Le:
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c030: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
c040: 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 63 61 73 65   no-push */.case
c050: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
c060: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c070: 20 54 4b 5f 47 54 2c 20 6e 6f 2d 70 75 73 68 20   TK_GT, no-push 
c080: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c0a0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6e  same as TK_GE, n
c0b0: 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 4d 65 6d 20  o-push */.  Mem 
c0c0: 2a 70 4e 6f 73 3b 0a 20 20 69 6e 74 20 66 6c 61  *pNos;.  int fla
c0d0: 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  gs;.  int res;. 
c0e0: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 0a   char affinity;.
c0f0: 0a 20 20 70 4e 6f 73 20 3d 20 26 70 54 6f 73 5b  .  pNos = &pTos[
c100: 2d 31 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  -1];.  flags = p
c110: 54 6f 73 2d 3e 66 6c 61 67 73 7c 70 4e 6f 73 2d  Tos->flags|pNos-
c120: 3e 66 6c 61 67 73 3b 0a 0a 20 20 2f 2a 20 49 66  >flags;..  /* If
c130: 20 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73   either value is
c140: 20 61 20 4e 55 4c 4c 20 50 32 20 69 73 20 6e 6f   a NULL P2 is no
c150: 74 20 7a 65 72 6f 2c 20 74 61 6b 65 20 74 68 65  t zero, take the
c160: 20 6a 75 6d 70 20 69 66 20 74 68 65 20 6c 65 61   jump if the lea
c170: 73 74 0a 20 20 2a 2a 20 73 69 67 6e 69 66 69 63  st.  ** signific
c180: 61 6e 74 20 62 79 74 65 20 6f 66 20 50 31 20 69  ant byte of P1 i
c190: 73 20 74 72 75 65 2e 20 49 66 20 50 32 20 69 73  s true. If P2 is
c1a0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 70 75 73 68   zero, then push
c1b0: 20 61 20 4e 55 4c 4c 20 6f 6e 74 6f 0a 20 20 2a   a NULL onto.  *
c1c0: 2a 20 74 68 65 20 73 74 61 63 6b 2e 0a 20 20 2a  * the stack..  *
c1d0: 2f 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d 45  /.  if( flags&ME
c1e0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 69 66  M_Null ){.    if
c1f0: 28 20 28 70 4f 70 2d 3e 70 31 20 26 20 30 78 32  ( (pOp->p1 & 0x2
c200: 30 30 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  00)!=0 ){.      
c210: 2f 2a 20 54 68 65 20 30 78 32 30 30 20 62 69 74  /* The 0x200 bit
c220: 20 6f 66 20 50 31 20 6d 65 61 6e 73 2c 20 72 6f   of P1 means, ro
c230: 75 67 68 6c 79 20 22 64 6f 20 6e 6f 74 20 74 72  ughly "do not tr
c240: 65 61 74 20 4e 55 4c 4c 20 61 73 20 74 68 65 0a  eat NULL as the.
c250: 20 20 20 20 20 20 2a 2a 20 6d 61 67 69 63 20 53        ** magic S
c260: 51 4c 20 76 61 6c 75 65 20 69 74 20 6e 6f 72 6d  QL value it norm
c270: 61 6c 6c 79 20 69 73 20 2d 20 74 72 65 61 74 20  ally is - treat 
c280: 69 74 20 61 73 20 69 66 20 69 74 20 77 65 72 65  it as if it were
c290: 20 61 6e 6f 74 68 65 72 0a 20 20 20 20 20 20 2a   another.      *
c2a0: 2a 20 69 6e 74 65 67 65 72 22 2e 0a 20 20 20 20  * integer"..    
c2b0: 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 57 69    **.      ** Wi
c2c0: 74 68 20 30 78 32 30 30 20 73 65 74 2c 20 69 66  th 0x200 set, if
c2d0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
c2e0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 62 6f 74  is NULL then bot
c2f0: 68 20 6f 70 65 72 61 6e 64 73 0a 20 20 20 20 20  h operands.     
c300: 20 2a 2a 20 61 72 65 20 63 6f 6e 76 65 72 74 65   ** are converte
c310: 64 20 74 6f 20 69 6e 74 65 67 65 72 73 20 70 72  d to integers pr
c320: 69 6f 72 20 74 6f 20 62 65 69 6e 67 20 70 61 73  ior to being pas
c330: 73 65 64 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68  sed down into th
c340: 65 0a 20 20 20 20 20 20 2a 2a 20 6e 6f 72 6d 61  e.      ** norma
c350: 6c 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6c 6f 67  l comparison log
c360: 69 63 20 62 65 6c 6f 77 2e 20 20 4e 55 4c 4c 20  ic below.  NULL 
c370: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 63 6f 6e  operands are con
c380: 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
c390: 2a 2a 20 7a 65 72 6f 20 61 6e 64 20 6e 6f 6e 2d  ** zero and non-
c3a0: 4e 55 4c 4c 20 6f 70 65 72 61 6e 64 73 20 61 72  NULL operands ar
c3b0: 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 31  e converted to 1
c3c0: 2e 20 20 54 68 75 73 2c 20 66 6f 72 20 65 78 61  .  Thus, for exa
c3d0: 6d 70 6c 65 2c 0a 20 20 20 20 20 20 2a 2a 20 77  mple,.      ** w
c3e0: 69 74 68 20 30 78 32 30 30 20 73 65 74 2c 20 20  ith 0x200 set,  
c3f0: 4e 55 4c 4c 3d 3d 4e 55 4c 4c 20 69 73 20 74 72  NULL==NULL is tr
c400: 75 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f  ue whereas it wo
c410: 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 20 20 20  uld normally.   
c420: 20 20 20 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20     ** be NULL.  
c430: 53 69 6d 69 6c 61 72 6c 79 2c 20 20 4e 55 4c 4c  Similarly,  NULL
c440: 21 3d 31 32 33 20 69 73 20 74 72 75 65 2e 0a 20  !=123 is true.. 
c450: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
c460: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
c470: 6e 74 36 34 28 70 54 6f 73 2c 20 28 70 54 6f 73  nt64(pTos, (pTos
c480: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
c490: 6c 6c 29 3d 3d 30 29 3b 0a 20 20 20 20 20 20 73  ll)==0);.      s
c4a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c4b0: 49 6e 74 36 34 28 70 4e 6f 73 2c 20 28 70 4e 6f  Int64(pNos, (pNo
c4c0: 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  s->flags & MEM_N
c4d0: 75 6c 6c 29 3d 3d 30 29 3b 0a 20 20 20 20 7d 65  ull)==0);.    }e
c4e0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
c4f0: 20 74 68 65 20 30 78 32 30 30 20 62 69 74 20 6f   the 0x200 bit o
c500: 66 20 50 31 20 69 73 20 63 6c 65 61 72 20 61 6e  f P1 is clear an
c510: 64 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  d either operand
c520: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 0a 20 20   is NULL then.  
c530: 20 20 20 20 2a 2a 20 74 68 65 20 72 65 73 75 6c      ** the resul
c540: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
c550: 2e 20 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  .  The jump is t
c560: 61 6b 65 6e 20 69 66 20 74 68 65 20 30 78 31 30  aken if the 0x10
c570: 30 20 62 69 74 0a 20 20 20 20 20 20 2a 2a 20 6f  0 bit.      ** o
c580: 66 20 50 31 20 69 73 20 73 65 74 2e 0a 20 20 20  f P1 is set..   
c590: 20 20 20 2a 2f 0a 20 20 20 20 20 20 70 6f 70 53     */.      popS
c5a0: 74 61 63 6b 28 26 70 54 6f 73 2c 20 32 29 3b 0a  tack(&pTos, 2);.
c5b0: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
c5c0: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  2 ){.        if(
c5d0: 20 70 4f 70 2d 3e 70 31 20 26 20 30 78 31 30 30   pOp->p1 & 0x100
c5e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63   ){.          pc
c5f0: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
c600: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
c610: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 6f  lse{.        pTo
c620: 73 2b 2b 3b 0a 20 20 20 20 20 20 20 20 70 54 6f  s++;.        pTo
c630: 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  s->flags = MEM_N
c640: 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ull;.      }.   
c650: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
c660: 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69 74 79 20    }..  affinity 
c670: 3d 20 70 4f 70 2d 3e 70 31 20 26 20 30 78 46 46  = pOp->p1 & 0xFF
c680: 3b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  ;.  if( affinity
c690: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
c6a0: 69 6e 69 74 79 28 70 4e 6f 73 2c 20 61 66 66 69  inity(pNos, affi
c6b0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
c6c0: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
c6d0: 74 79 28 70 54 6f 73 2c 20 61 66 66 69 6e 69 74  ty(pTos, affinit
c6e0: 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  y, encoding);.  
c6f0: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
c700: 2d 3e 70 33 74 79 70 65 3d 3d 50 33 5f 43 4f 4c  ->p3type==P3_COL
c710: 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d  LSEQ || pOp->p3=
c720: 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 73 71  =0 );.  res = sq
c730: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
c740: 70 4e 6f 73 2c 20 70 54 6f 73 2c 20 28 43 6f 6c  pNos, pTos, (Col
c750: 6c 53 65 71 2a 29 70 4f 70 2d 3e 70 33 29 3b 0a  lSeq*)pOp->p3);.
c760: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
c770: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
c780: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
c790: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
c7a0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
c7b0: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
c7c0: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
c7d0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
c7e0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
c7f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c800: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
c810: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
c820: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
c830: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
c840: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
c850: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
c860: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
c870: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
c880: 0a 20 20 7d 0a 0a 20 20 70 6f 70 53 74 61 63 6b  .  }..  popStack
c890: 28 26 70 54 6f 73 2c 20 32 29 3b 0a 20 20 69 66  (&pTos, 2);.  if
c8a0: 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  ( pOp->p2 ){.   
c8b0: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
c8c0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
c8d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
c8e0: 0a 20 20 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 20  .    pTos++;.   
c8f0: 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d   pTos->flags = M
c900: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 54 6f 73  EM_Int;.    pTos
c910: 2d 3e 69 20 3d 20 72 65 73 3b 0a 20 20 7d 0a 20  ->i = res;.  }. 
c920: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c930: 63 6f 64 65 3a 20 41 6e 64 20 2a 20 2a 20 2a 0a  code: And * * *.
c940: 2a 2a 0a 2a 2a 20 50 6f 70 20 74 77 6f 20 76 61  **.** Pop two va
c950: 6c 75 65 73 20 6f 66 66 20 74 68 65 20 73 74 61  lues off the sta
c960: 63 6b 2e 20 20 54 61 6b 65 20 74 68 65 20 6c 6f  ck.  Take the lo
c970: 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65  gical AND of the
c980: 0a 2a 2a 20 74 77 6f 20 76 61 6c 75 65 73 20 61  .** two values a
c990: 6e 64 20 70 75 73 68 20 74 68 65 20 72 65 73 75  nd push the resu
c9a0: 6c 74 69 6e 67 20 62 6f 6f 6c 65 61 6e 20 76 61  lting boolean va
c9b0: 6c 75 65 20 62 61 63 6b 20 6f 6e 74 6f 20 74 68  lue back onto th
c9c0: 65 0a 2a 2a 20 73 74 61 63 6b 2e 20 0a 2a 2f 0a  e.** stack. .*/.
c9d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 2a 20  /* Opcode: Or * 
c9e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20 74 77  * *.**.** Pop tw
c9f0: 6f 20 76 61 6c 75 65 73 20 6f 66 66 20 74 68 65  o values off the
ca00: 20 73 74 61 63 6b 2e 20 20 54 61 6b 65 20 74 68   stack.  Take th
ca10: 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
ca20: 74 68 65 0a 2a 2a 20 74 77 6f 20 76 61 6c 75 65  the.** two value
ca30: 73 20 61 6e 64 20 70 75 73 68 20 74 68 65 20 72  s and push the r
ca40: 65 73 75 6c 74 69 6e 67 20 62 6f 6f 6c 65 61 6e  esulting boolean
ca50: 20 76 61 6c 75 65 20 62 61 63 6b 20 6f 6e 74 6f   value back onto
ca60: 20 74 68 65 0a 2a 2a 20 73 74 61 63 6b 2e 20 0a   the.** stack. .
ca70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca90: 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
caa0: 6e 6f 2d 70 75 73 68 20 2a 2f 0a 63 61 73 65 20  no-push */.case 
cab0: 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
cac0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cad0: 54 4b 5f 4f 52 2c 20 6e 6f 2d 70 75 73 68 20 2a  TK_OR, no-push *
cae0: 2f 0a 20 20 4d 65 6d 20 2a 70 4e 6f 73 20 3d 20  /.  Mem *pNos = 
caf0: 26 70 54 6f 73 5b 2d 31 5d 3b 0a 20 20 69 6e 74  &pTos[-1];.  int
cb00: 20 76 31 2c 20 76 32 3b 20 20 20 20 2f 2a 20 30   v1, v2;    /* 0
cb10: 3d 3d 54 52 55 45 2c 20 31 3d 3d 46 41 4c 53 45  ==TRUE, 1==FALSE
cb20: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
cb30: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 61 73 73 65 72  NULL */..  asser
cb40: 74 28 20 70 4e 6f 73 3e 3d 70 2d 3e 61 53 74 61  t( pNos>=p->aSta
cb50: 63 6b 20 29 3b 0a 20 20 69 66 28 20 70 54 6f 73  ck );.  if( pTos
cb60: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
cb70: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
cb80: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
cb90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
cba0: 65 67 65 72 69 66 79 28 70 54 6f 73 29 3b 0a 20  egerify(pTos);. 
cbb0: 20 20 20 76 31 20 3d 20 70 54 6f 73 2d 3e 69 3d     v1 = pTos->i=
cbc0: 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4e  =0;.  }.  if( pN
cbd0: 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  os->flags & MEM_
cbe0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d  Null ){.    v2 =
cbf0: 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
cc00: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
cc10: 6e 74 65 67 65 72 69 66 79 28 70 4e 6f 73 29 3b  ntegerify(pNos);
cc20: 0a 20 20 20 20 76 32 20 3d 20 70 4e 6f 73 2d 3e  .    v2 = pNos->
cc30: 69 3d 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  i==0;.  }.  if( 
cc40: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
cc50: 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
cc60: 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
cc70: 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
cc80: 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
cc90: 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
cca0: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
ccb0: 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
ccc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
ccd0: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
cce0: 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
ccf0: 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
cd00: 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
cd10: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
cd20: 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
cd30: 20 20 7d 0a 20 20 70 6f 70 53 74 61 63 6b 28 26    }.  popStack(&
cd40: 70 54 6f 73 2c 20 32 29 3b 0a 20 20 70 54 6f 73  pTos, 2);.  pTos
cd50: 2b 2b 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  ++;.  if( v1==2 
cd60: 29 7b 0a 20 20 20 20 70 54 6f 73 2d 3e 66 6c 61  ){.    pTos->fla
cd70: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
cd80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 6f 73   }else{.    pTos
cd90: 2d 3e 69 20 3d 20 76 31 3d 3d 30 3b 0a 20 20 20  ->i = v1==0;.   
cda0: 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d   pTos->flags = M
cdb0: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72  EM_Int;.  }.  br
cdc0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
cdd0: 65 3a 20 4e 65 67 61 74 69 76 65 20 2a 20 2a 20  e: Negative * * 
cde0: 2a 0a 2a 2a 0a 2a 2a 20 54 72 65 61 74 20 74 68  *.**.** Treat th
cdf0: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
ce00: 63 6b 20 61 73 20 61 20 6e 75 6d 65 72 69 63 20  ck as a numeric 
ce10: 71 75 61 6e 74 69 74 79 2e 20 20 52 65 70 6c 61  quantity.  Repla
ce20: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
ce30: 73 20 61 64 64 69 74 69 76 65 20 69 6e 76 65 72  s additive inver
ce40: 73 65 2e 20 20 49 66 20 74 68 65 20 74 6f 70 20  se.  If the top 
ce50: 6f 66 20 74 68 65 20 73 74 61 63 6b 20 69 73 20  of the stack is 
ce60: 4e 55 4c 4c 0a 2a 2a 20 69 74 73 20 76 61 6c 75  NULL.** its valu
ce70: 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  e is unchanged..
ce80: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 62  */./* Opcode: Ab
ce90: 73 56 61 6c 75 65 20 2a 20 2a 20 2a 0a 2a 2a 0a  sValue * * *.**.
cea0: 2a 2a 20 54 72 65 61 74 20 74 68 65 20 74 6f 70  ** Treat the top
ceb0: 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 61 73   of the stack as
cec0: 20 61 20 6e 75 6d 65 72 69 63 20 71 75 61 6e 74   a numeric quant
ced0: 69 74 79 2e 20 20 52 65 70 6c 61 63 65 20 69 74  ity.  Replace it
cee0: 0a 2a 2a 20 77 69 74 68 20 69 74 73 20 61 62 73  .** with its abs
cef0: 6f 6c 75 74 65 20 76 61 6c 75 65 2e 20 49 66 20  olute value. If 
cf00: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73  the top of the s
cf10: 74 61 63 6b 20 69 73 20 4e 55 4c 4c 0a 2a 2a 20  tack is NULL.** 
cf20: 69 74 73 20 76 61 6c 75 65 20 69 73 20 75 6e 63  its value is unc
cf30: 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  hanged..*/.case 
cf40: 4f 50 5f 4e 65 67 61 74 69 76 65 3a 20 20 20 20  OP_Negative:    
cf50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cf60: 65 20 61 73 20 54 4b 5f 55 4d 49 4e 55 53 2c 20  e as TK_UMINUS, 
cf70: 6e 6f 2d 70 75 73 68 20 2a 2f 0a 63 61 73 65 20  no-push */.case 
cf80: 4f 50 5f 41 62 73 56 61 6c 75 65 3a 20 7b 0a 20  OP_AbsValue: {. 
cf90: 20 61 73 73 65 72 74 28 20 70 54 6f 73 3e 3d 70   assert( pTos>=p
cfa0: 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 69 66  ->aStack );.  if
cfb0: 28 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20  ( pTos->flags & 
cfc0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
cfd0: 6e 65 67 5f 61 62 73 5f 72 65 61 6c 5f 63 61 73  neg_abs_real_cas
cfe0: 65 3a 0a 20 20 20 20 52 65 6c 65 61 73 65 28 70  e:.    Release(p
cff0: 54 6f 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  Tos);.    if( pO
d000: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
d010: 67 61 74 69 76 65 20 7c 7c 20 70 54 6f 73 2d 3e  gative || pTos->
d020: 72 3c 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 70  r<0.0 ){.      p
d030: 54 6f 73 2d 3e 72 20 3d 20 2d 70 54 6f 73 2d 3e  Tos->r = -pTos->
d040: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 54 6f  r;.    }.    pTo
d050: 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  s->flags = MEM_R
d060: 65 61 6c 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eal;.  }else if(
d070: 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d   pTos->flags & M
d080: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 52 65  EM_Int ){.    Re
d090: 6c 65 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 20  lease(pTos);.   
d0a0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
d0b0: 3d 3d 4f 50 5f 4e 65 67 61 74 69 76 65 20 7c 7c  ==OP_Negative ||
d0c0: 20 70 54 6f 73 2d 3e 69 3c 30 20 29 7b 0a 20 20   pTos->i<0 ){.  
d0d0: 20 20 20 20 70 54 6f 73 2d 3e 69 20 3d 20 2d 70      pTos->i = -p
d0e0: 54 6f 73 2d 3e 69 3b 0a 20 20 20 20 7d 0a 20 20  Tos->i;.    }.  
d0f0: 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20    pTos->flags = 
d100: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
d110: 20 69 66 28 20 70 54 6f 73 2d 3e 66 6c 61 67 73   if( pTos->flags
d120: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
d130: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67     /* Do nothing
d140: 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
d150: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
d160: 75 6d 65 72 69 66 79 28 70 54 6f 73 29 3b 0a 20  umerify(pTos);. 
d170: 20 20 20 67 6f 74 6f 20 6e 65 67 5f 61 62 73 5f     goto neg_abs_
d180: 72 65 61 6c 5f 63 61 73 65 3b 0a 20 20 7d 0a 20  real_case;.  }. 
d190: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d1a0: 63 6f 64 65 3a 20 4e 6f 74 20 2a 20 2a 20 2a 0a  code: Not * * *.
d1b0: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
d1c0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73  the top of the s
d1d0: 74 61 63 6b 20 61 73 20 61 20 62 6f 6f 6c 65 61  tack as a boolea
d1e0: 6e 20 76 61 6c 75 65 2e 20 20 52 65 70 6c 61 63  n value.  Replac
d1f0: 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74 73  e it.** with its
d200: 20 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49 66   complement.  If
d210: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
d220: 73 74 61 63 6b 20 69 73 20 4e 55 4c 4c 20 69 74  stack is NULL it
d230: 73 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 75 6e  s value.** is un
d240: 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65  changed..*/.case
d250: 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
d260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d270: 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 6e 6f 2d  e as TK_NOT, no-
d280: 70 75 73 68 20 2a 2f 0a 20 20 61 73 73 65 72 74  push */.  assert
d290: 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61 63  ( pTos>=p->aStac
d2a0: 6b 20 29 3b 0a 20 20 69 66 28 20 70 54 6f 73 2d  k );.  if( pTos-
d2b0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
d2c0: 6c 20 29 20 62 72 65 61 6b 3b 20 20 2f 2a 20 44  l ) break;  /* D
d2d0: 6f 20 6e 6f 74 68 69 6e 67 20 74 6f 20 4e 55 4c  o nothing to NUL
d2e0: 4c 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  Ls */.  sqlite3V
d2f0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
d300: 28 70 54 6f 73 29 3b 0a 20 20 61 73 73 65 72 74  (pTos);.  assert
d310: 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26  ( (pTos->flags &
d320: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
d330: 20 20 70 54 6f 73 2d 3e 69 20 3d 20 21 70 54 6f    pTos->i = !pTo
d340: 73 2d 3e 69 3b 0a 20 20 70 54 6f 73 2d 3e 66 6c  s->i;.  pTos->fl
d350: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
d360: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d370: 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 2a 20 2a  code: BitNot * *
d380: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
d390: 65 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  et the top of th
d3a0: 65 20 73 74 61 63 6b 20 61 73 20 61 6e 20 76 61  e stack as an va
d3b0: 6c 75 65 2e 20 20 52 65 70 6c 61 63 65 20 69 74  lue.  Replace it
d3c0: 0a 2a 2a 20 77 69 74 68 20 69 74 73 20 6f 6e 65  .** with its one
d3d0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s-complement.  I
d3e0: 66 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  f the top of the
d3f0: 20 73 74 61 63 6b 20 69 73 20 4e 55 4c 4c 20 69   stack is NULL i
d400: 74 73 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75  ts.** value is u
d410: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73  nchanged..*/.cas
d420: 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
d430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d440: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
d450: 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 61 73   no-push */.  as
d460: 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61  sert( pTos>=p->a
d470: 53 74 61 63 6b 20 29 3b 0a 20 20 69 66 28 20 70  Stack );.  if( p
d480: 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Tos->flags & MEM
d490: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20  _Null ) break;  
d4a0: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f  /* Do nothing to
d4b0: 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69   NULLs */.  sqli
d4c0: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
d4d0: 72 69 66 79 28 70 54 6f 73 29 3b 0a 20 20 61 73  rify(pTos);.  as
d4e0: 73 65 72 74 28 20 28 70 54 6f 73 2d 3e 66 6c 61  sert( (pTos->fla
d4f0: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30  gs & MEM_Dyn)==0
d500: 20 29 3b 0a 20 20 70 54 6f 73 2d 3e 69 20 3d 20   );.  pTos->i = 
d510: 7e 70 54 6f 73 2d 3e 69 3b 0a 20 20 70 54 6f 73  ~pTos->i;.  pTos
d520: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
d530: 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  t;.  break;.}../
d540: 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
d550: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
d560: 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
d570: 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
d580: 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
d590: 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
d5a0: 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
d5b0: 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
d5c0: 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
d5d0: 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
d5e0: 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
d5f0: 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
d600: 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
d610: 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
d620: 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
d630: 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
d640: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
d650: 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
d660: 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
d670: 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
d680: 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
d690: 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
d6a0: 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
d6b0: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  m..*/.case OP_Ex
d6c0: 70 6c 61 69 6e 3a 0a 63 61 73 65 20 4f 50 5f 4e  plain:.case OP_N
d6d0: 6f 6f 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oop: {          
d6e0: 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a    /* no-push */.
d6f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d700: 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
d710: 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20 61 20 73 69  *.**.** Pop a si
d720: 6e 67 6c 65 20 62 6f 6f 6c 65 61 6e 20 66 72 6f  ngle boolean fro
d730: 6d 20 74 68 65 20 73 74 61 63 6b 2e 20 20 49 66  m the stack.  If
d740: 20 74 68 65 20 62 6f 6f 6c 65 61 6e 20 70 6f 70   the boolean pop
d750: 70 65 64 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20  ped is.** true, 
d760: 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 70 32 2e  then jump to p2.
d770: 20 20 4f 74 68 65 72 77 69 73 65 20 63 6f 6e 74    Otherwise cont
d780: 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74  inue to the next
d790: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
d7a0: 20 41 6e 20 69 6e 74 65 67 65 72 20 69 73 20 66   An integer is f
d7b0: 61 6c 73 65 20 69 66 20 7a 65 72 6f 20 61 6e 64  alse if zero and
d7c0: 20 74 72 75 65 20 6f 74 68 65 72 77 69 73 65 2e   true otherwise.
d7d0: 20 20 41 20 73 74 72 69 6e 67 20 69 73 0a 2a 2a    A string is.**
d7e0: 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
d7f0: 20 7a 65 72 6f 20 6c 65 6e 67 74 68 20 61 6e 64   zero length and
d800: 20 74 72 75 65 20 6f 74 68 65 72 77 69 73 65 2e   true otherwise.
d810: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
d820: 6c 75 65 20 70 6f 70 70 65 64 20 6f 66 20 74 68  lue popped of th
d830: 65 20 73 74 61 63 6b 20 69 73 20 4e 55 4c 4c 2c  e stack is NULL,
d840: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
d850: 75 6d 70 20 69 66 20 50 31 0a 2a 2a 20 69 73 20  ump if P1.** is 
d860: 74 72 75 65 20 61 6e 64 20 66 61 6c 6c 20 74 68  true and fall th
d870: 72 6f 75 67 68 20 69 66 20 50 31 20 69 73 20 66  rough if P1 is f
d880: 61 6c 73 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  alse..*/./* Opco
d890: 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
d8a0: 2a 0a 2a 2a 0a 2a 2a 20 50 6f 70 20 61 20 73 69  *.**.** Pop a si
d8b0: 6e 67 6c 65 20 62 6f 6f 6c 65 61 6e 20 66 72 6f  ngle boolean fro
d8c0: 6d 20 74 68 65 20 73 74 61 63 6b 2e 20 20 49 66  m the stack.  If
d8d0: 20 74 68 65 20 62 6f 6f 6c 65 61 6e 20 70 6f 70   the boolean pop
d8e0: 70 65 64 20 69 73 0a 2a 2a 20 66 61 6c 73 65 2c  ped is.** false,
d8f0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 70 32   then jump to p2
d900: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 63 6f 6e  .  Otherwise con
d910: 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78  tinue to the nex
d920: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
d930: 2a 20 41 6e 20 69 6e 74 65 67 65 72 20 69 73 20  * An integer is 
d940: 66 61 6c 73 65 20 69 66 20 7a 65 72 6f 20 61 6e  false if zero an
d950: 64 20 74 72 75 65 20 6f 74 68 65 72 77 69 73 65  d true otherwise
d960: 2e 20 20 41 20 73 74 72 69 6e 67 20 69 73 0a 2a  .  A string is.*
d970: 2a 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61  * false if it ha
d980: 73 20 7a 65 72 6f 20 6c 65 6e 67 74 68 20 61 6e  s zero length an
d990: 64 20 74 72 75 65 20 6f 74 68 65 72 77 69 73 65  d true otherwise
d9a0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  ..**.** If the v
d9b0: 61 6c 75 65 20 70 6f 70 70 65 64 20 6f 66 20 74  alue popped of t
d9c0: 68 65 20 73 74 61 63 6b 20 69 73 20 4e 55 4c 4c  he stack is NULL
d9d0: 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  , then take the 
d9e0: 6a 75 6d 70 20 69 66 20 50 31 0a 2a 2a 20 69 73  jump if P1.** is
d9f0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 6c 20 74   true and fall t
da00: 68 72 6f 75 67 68 20 69 66 20 50 31 20 69 73 20  hrough if P1 is 
da10: 66 61 6c 73 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  false..*/.case O
da20: 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
da30: 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68        /* no-push
da40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
da50: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
da60: 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
da70: 69 6e 74 20 63 3b 0a 20 20 61 73 73 65 72 74 28  int c;.  assert(
da80: 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b   pTos>=p->aStack
da90: 20 29 3b 0a 20 20 69 66 28 20 70 54 6f 73 2d 3e   );.  if( pTos->
daa0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
dab0: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
dac0: 3e 70 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p1;.  }else{.#i
dad0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
dae0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
daf0: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
db00: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 54 6f 73  dbeIntValue(pTos
db10: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  );.#else.    c =
db20: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
db30: 56 61 6c 75 65 28 70 54 6f 73 29 21 3d 30 2e 30  Value(pTos)!=0.0
db40: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
db50: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
db60: 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
db70: 0a 20 20 7d 0a 20 20 52 65 6c 65 61 73 65 28 70  .  }.  Release(p
db80: 54 6f 73 29 3b 0a 20 20 70 54 6f 73 2d 2d 3b 0a  Tos);.  pTos--;.
db90: 20 20 69 66 28 20 63 20 29 20 70 63 20 3d 20 70    if( c ) pc = p
dba0: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 62 72 65 61  Op->p2-1;.  brea
dbb0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
dbc0: 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 0a   IsNull P1 P2 *.
dbd0: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
dbe0: 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b  top of the stack
dbf0: 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20   and jump to P2 
dc00: 69 66 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  if the top of th
dc10: 65 20 73 74 61 63 6b 0a 2a 2a 20 69 73 20 4e 55  e stack.** is NU
dc20: 4c 4c 2e 20 20 49 66 20 50 31 20 69 73 20 70 6f  LL.  If P1 is po
dc30: 73 69 74 69 76 65 2c 20 74 68 65 6e 20 70 6f 70  sitive, then pop
dc40: 20 50 31 20 65 6c 65 6d 65 6e 74 73 20 66 72 6f   P1 elements fro
dc50: 6d 20 74 68 65 20 73 74 61 63 6b 0a 2a 2a 20 72  m the stack.** r
dc60: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
dc70: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
dc80: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 20 20  jump is taken.  
dc90: 49 66 20 50 31 20 69 73 20 6e 65 67 61 74 69 76  If P1 is negativ
dca0: 65 2c 0a 2a 2a 20 70 6f 70 20 2d 50 31 20 65 6c  e,.** pop -P1 el
dcb0: 65 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  ements from the 
dcc0: 73 74 61 63 6b 20 6f 6e 6c 79 20 69 66 20 74 68  stack only if th
dcd0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
dce0: 61 6e 64 20 6c 65 61 76 65 0a 2a 2a 20 74 68 65  and leave.** the
dcf0: 20 73 74 61 63 6b 20 75 6e 63 68 61 6e 67 65 64   stack unchanged
dd00: 20 69 66 20 74 68 65 20 6a 75 6d 70 20 69 73 20   if the jump is 
dd10: 6e 6f 74 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61  not taken..*/.ca
dd20: 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
dd30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dd40: 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
dd50: 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 66   no-push */.  if
dd60: 28 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20  ( pTos->flags & 
dd70: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
dd80: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
dd90: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3c      if( pOp->p1<
dda0: 30 20 29 7b 0a 20 20 20 20 20 20 70 6f 70 53 74  0 ){.      popSt
ddb0: 61 63 6b 28 26 70 54 6f 73 2c 20 2d 70 4f 70 2d  ack(&pTos, -pOp-
ddc0: 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  >p1);.    }.  }.
ddd0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 30 20    if( pOp->p1>0 
dde0: 29 7b 0a 20 20 20 20 70 6f 70 53 74 61 63 6b 28  ){.    popStack(
ddf0: 26 70 54 6f 73 2c 20 70 4f 70 2d 3e 70 31 29 3b  &pTos, pOp->p1);
de00: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
de10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
de20: 75 6c 6c 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  ull P1 P2 *.**.*
de30: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
de40: 74 68 65 20 74 6f 70 20 61 62 73 28 50 31 29 20  the top abs(P1) 
de50: 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 73 74  values on the st
de60: 61 63 6b 20 61 72 65 20 61 6c 6c 20 6e 6f 74 20  ack are all not 
de70: 4e 55 4c 4c 2e 20 20 0a 2a 2a 20 52 65 67 61 72  NULL.  .** Regar
de80: 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
de90: 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
dea0: 20 69 73 20 74 61 6b 65 6e 2c 20 70 6f 70 20 74   is taken, pop t
deb0: 68 65 20 73 74 61 63 6b 0a 2a 2a 20 50 31 20 74  he stack.** P1 t
dec0: 69 6d 65 73 20 69 66 20 50 31 20 69 73 20 67 72  imes if P1 is gr
ded0: 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2e  eater than zero.
dee0: 20 20 42 75 74 20 69 66 20 50 31 20 69 73 20 6e    But if P1 is n
def0: 65 67 61 74 69 76 65 2c 0a 2a 2a 20 6c 65 61 76  egative,.** leav
df00: 65 20 74 68 65 20 73 74 61 63 6b 20 75 6e 63 68  e the stack unch
df10: 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  anged..*/.case O
df20: 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
df30: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
df40: 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6e  as TK_NOTNULL, n
df50: 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20  o-push */.  int 
df60: 69 2c 20 63 6e 74 3b 0a 20 20 63 6e 74 20 3d 20  i, cnt;.  cnt = 
df70: 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 66 28 20 63  pOp->p1;.  if( c
df80: 6e 74 3c 30 20 29 20 63 6e 74 20 3d 20 2d 63 6e  nt<0 ) cnt = -cn
df90: 74 3b 0a 20 20 61 73 73 65 72 74 28 20 26 70 54  t;.  assert( &pT
dfa0: 6f 73 5b 31 2d 63 6e 74 5d 20 3e 3d 20 70 2d 3e  os[1-cnt] >= p->
dfb0: 61 53 74 61 63 6b 20 29 3b 0a 20 20 66 6f 72 28  aStack );.  for(
dfc0: 69 3d 30 3b 20 69 3c 63 6e 74 20 26 26 20 28 70  i=0; i<cnt && (p
dfd0: 54 6f 73 5b 31 2b 69 2d 63 6e 74 5d 2e 66 6c 61  Tos[1+i-cnt].fla
dfe0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
dff0: 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20  0; i++){}.  if( 
e000: 69 3e 3d 63 6e 74 20 29 20 70 63 20 3d 20 70 4f  i>=cnt ) pc = pO
e010: 70 2d 3e 70 32 2d 31 3b 0a 20 20 69 66 28 20 70  p->p2-1;.  if( p
e020: 4f 70 2d 3e 70 31 3e 30 20 29 20 70 6f 70 53 74  Op->p1>0 ) popSt
e030: 61 63 6b 28 26 70 54 6f 73 2c 20 63 6e 74 29 3b  ack(&pTos, cnt);
e040: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e050: 4f 70 63 6f 64 65 3a 20 53 65 74 4e 75 6d 43 6f  Opcode: SetNumCo
e060: 6c 75 6d 6e 73 20 50 31 20 50 32 20 2a 0a 2a 2a  lumns P1 P2 *.**
e070: 0a 2a 2a 20 42 65 66 6f 72 65 20 74 68 65 20 4f  .** Before the O
e080: 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
e090: 63 61 6e 20 62 65 20 65 78 65 63 75 74 65 64 20  can be executed 
e0a0: 6f 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 69  on a cursor, thi
e0b0: 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74  s.** opcode must
e0c0: 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 73 65   be called to se
e0d0: 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
e0e0: 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61  fields in the ta
e0f0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ble..**.** This 
e100: 6f 70 63 6f 64 65 20 73 65 74 73 20 74 68 65 20  opcode sets the 
e110: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
e120: 73 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20  s for cursor P1 
e130: 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  to P2..**.** If 
e140: 4f 50 5f 4b 65 79 41 73 44 61 74 61 20 69 73 20  OP_KeyAsData is 
e150: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f  to be applied to
e160: 20 63 75 72 73 6f 72 20 50 31 2c 20 69 74 20 6d   cursor P1, it m
e170: 75 73 74 20 62 65 20 65 78 65 63 75 74 65 64 0a  ust be executed.
e180: 2a 2a 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  ** before this o
e190: 70 2d 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  p-code..*/.case 
e1a0: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
e1b0: 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d  : {       /* no-
e1c0: 70 75 73 68 20 2a 2f 0a 20 20 43 75 72 73 6f 72  push */.  Cursor
e1d0: 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
e1e0: 28 70 4f 70 2d 3e 70 31 29 3c 70 2d 3e 6e 43 75  (pOp->p1)<p->nCu
e1f0: 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
e200: 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
e210: 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  p1]!=0 );.  pC =
e220: 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
e230: 31 5d 3b 0a 20 20 70 43 2d 3e 6e 46 69 65 6c 64  1];.  pC->nField
e240: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72   = pOp->p2;.  br
e250: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e260: 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
e270: 50 33 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  P3.**.** Interpr
e280: 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
e290: 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
e2a0: 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
e2b0: 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
e2c0: 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
e2d0: 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
e2e0: 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
e2f0: 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
e300: 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
e310: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
e320: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
e330: 20 64 61 74 61 2e 29 20 50 75 73 68 20 6f 6e 74   data.) Push ont
e340: 6f 20 74 68 65 20 73 74 61 63 6b 20 74 68 65 20  o the stack the 
e350: 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20  value.** of the 
e360: 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 63 6f 6e  P2-th column con
e370: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 64 61  tained in the da
e380: 74 61 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ta. If there are
e390: 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
e3a0: 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
e3b0: 74 68 65 20 72 65 63 6f 72 64 2c 20 70 75 73 68  the record, push
e3c0: 20 61 20 4e 55 4c 4c 20 6f 6e 74 6f 20 74 68 65   a NULL onto the
e3d0: 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 49 66   stack..**.** If
e3e0: 20 74 68 65 20 4b 65 79 41 73 44 61 74 61 20 6f   the KeyAsData o
e3f0: 70 63 6f 64 65 20 68 61 73 20 70 72 65 76 69 6f  pcode has previo
e400: 75 73 6c 79 20 65 78 65 63 75 74 65 64 20 6f 6e  usly executed on
e410: 20 74 68 69 73 20 63 75 72 73 6f 72 2c 20 74 68   this cursor, th
e420: 65 6e 20 74 68 65 0a 2a 2a 20 66 69 65 6c 64 20  en the.** field 
e430: 6d 69 67 68 74 20 62 65 20 65 78 74 72 61 63 74  might be extract
e440: 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65 79 20  ed from the key 
e450: 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
e460: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  data..**.** If t
e470: 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
e480: 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
e490: 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 70 75   fields, then pu
e4a0: 73 68 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 0a 2a  sh a NULL.  Or.*
e4b0: 2a 20 69 66 20 50 33 20 69 73 20 6f 66 20 74 79  * if P3 is of ty
e4c0: 70 65 20 50 33 5f 4d 45 4d 2c 20 74 68 65 6e 20  pe P3_MEM, then 
e4d0: 70 75 73 68 20 74 68 65 20 50 33 20 76 61 6c 75  push the P3 valu
e4e0: 65 2e 20 20 54 68 65 20 50 33 20 76 61 6c 75 65  e.  The P3 value
e4f0: 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 64 65 66 61   will.** be defa
e500: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 61 20  ult value for a 
e510: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 68 61 73 20  column that has 
e520: 62 65 65 6e 20 61 64 64 65 64 20 75 73 69 6e 67  been added using
e530: 20 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45   the ALTER TABLE
e540: 0a 2a 2a 20 41 44 44 20 43 4f 4c 55 4d 4e 20 63  .** ADD COLUMN c
e550: 6f 6d 6d 61 6e 64 2e 20 20 49 66 20 50 33 20 69  ommand.  If P3 i
e560: 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 73 74  s an ordinary st
e570: 72 69 6e 67 2c 20 6a 75 73 74 20 70 75 73 68 20  ring, just push 
e580: 61 20 4e 55 4c 4c 2e 0a 2a 2a 20 57 68 65 6e 20  a NULL..** When 
e590: 50 33 20 69 73 20 61 20 73 74 72 69 6e 67 20 69  P3 is a string i
e5a0: 74 20 69 73 20 72 65 61 6c 6c 79 20 6a 75 73 74  t is really just
e5b0: 20 61 20 63 6f 6d 6d 65 6e 74 20 64 65 73 63 72   a comment descr
e5c0: 69 62 69 6e 67 20 74 68 65 20 76 61 6c 75 65 0a  ibing the value.
e5d0: 2a 2a 20 74 6f 20 62 65 20 70 75 73 68 65 64 2c  ** to be pushed,
e5e0: 20 6e 6f 74 20 61 20 64 65 66 61 75 6c 74 20 76   not a default v
e5f0: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
e600: 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32  _Column: {.  u32
e610: 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20   payloadSize;   
e620: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
e630: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
e640: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70   */.  int p1 = p
e650: 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20 50 31 20 76  Op->p1;  /* P1 v
e660: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
e670: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 20 3d  de */.  int p2 =
e680: 20 70 4f 70 2d 3e 70 32 3b 20 20 2f 2a 20 63 6f   pOp->p2;  /* co
e690: 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
e6a0: 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 43 75 72  etrieve */.  Cur
e6b0: 73 6f 72 20 2a 70 43 20 3d 20 30 3b 20 20 20 20  sor *pC = 0;    
e6c0: 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
e6d0: 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52  or */.  char *zR
e6e0: 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ec;        /* Po
e6f0: 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  inter to complet
e700: 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f  e record-data */
e710: 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
e720: 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
e730: 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
e740: 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20  32 *aType;      
e750: 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f    /* aType[i] ho
e760: 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  lds the numeric 
e770: 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68  type of the i-th
e780: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
e790: 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
e7a0: 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
e7b0: 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
e7c0: 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
e7d0: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
e7e0: 32 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  2 nField;       
e7f0: 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69   /* number of fi
e800: 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
e810: 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  rd */.  int len;
e820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
e830: 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
e840: 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
e850: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
e860: 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
e870: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
e880: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72  ounter */.  char
e890: 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *zData;       /
e8a0: 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
e8b0: 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
e8c0: 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ed */.  Mem sMem
e8d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
e8e0: 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
e8f0: 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
e900: 65 64 20 2a 2f 0a 0a 20 20 73 4d 65 6d 2e 66 6c  ed */..  sMem.fl
e910: 61 67 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  ags = 0;.  asser
e920: 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  t( p1<p->nCursor
e930: 20 29 3b 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20   );.  pTos++;.  
e940: 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pTos->flags = ME
e950: 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 2f 2a 20 54 68  M_Null;..  /* Th
e960: 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
e970: 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
e980: 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
e990: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
e9a0: 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
e9b0: 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
e9c0: 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
e9d0: 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
e9e0: 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
e9f0: 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
ea00: 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
ea10: 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
ea20: 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
ea30: 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
ea40: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
ea50: 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
ea60: 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
ea70: 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
ea80: 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
ea90: 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
eaa0: 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
eab0: 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
eac0: 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
ead0: 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
eae0: 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
eaf0: 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
eb00: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
eb10: 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
eb20: 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
eb30: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
eb40: 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
eb50: 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
eb60: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
eb70: 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
eb80: 69 6e 20 74 68 65 20 43 75 72 73 6f 72 2e 6e 46  in the Cursor.nF
eb90: 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 20 20 46  ield element.  F
eba0: 6f 72 0a 20 20 2a 2a 20 72 65 63 6f 72 64 73 20  or.  ** records 
ebb0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68  on the stack, th
ebc0: 65 20 6e 65 78 74 20 65 6e 74 72 79 20 64 6f 77  e next entry dow
ebd0: 6e 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 69  n on the stack i
ebe0: 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 20 20 2a  s an integer.  *
ebf0: 2a 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6e  * which is the n
ec00: 75 6d 62 65 72 20 6f 66 20 72 65 63 6f 72 64 73  umber of records
ec10: 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
ec20: 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 23 69 66 6e  >apCsr[p1];.#ifn
ec30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ec40: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
ec50: 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
ec60: 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e  Cursor==0 );.#en
ec70: 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
ec80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
ec90: 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
eca0: 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
ecb0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
ecc0: 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63  B-Tree */.    rc
ecd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
ece0: 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
ecf0: 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
ed00: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
ed10: 72 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20 3d  rror;.    zRec =
ed20: 20 30 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   0;.    pCrsr = 
ed30: 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
ed40: 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
ed50: 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   ){.      payloa
ed60: 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d  dSize = 0;.    }
ed70: 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63  else if( pC->cac
ed80: 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
ed90: 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70  heCtr ){.      p
eda0: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
edb0: 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
edc0: 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72      zRec = (char
edd0: 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  *)pC->aRow;.    
ede0: 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73  }else if( pC->is
edf0: 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 69  Index ){.      i
ee00: 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
ee10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
ee20: 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
ee30: 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
ee40: 34 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61  4);.      payloa
ee50: 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
ee60: 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65  ize64;.    }else
ee70: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
ee80: 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
ee90: 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
eea0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 46 69  );.    }.    nFi
eeb0: 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
eec0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
eed0: 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
eee0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
eef0: 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65  rd is the sole e
ef00: 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f  ntry of a pseudo
ef10: 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61  -table */.    pa
ef20: 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
ef30: 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20  nData;.    zRec 
ef40: 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20  = pC->pData;.   
ef50: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
ef60: 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
ef70: 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
ef80: 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
ef90: 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46 69  ec!=0 );.    nFi
efa0: 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
efb0: 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b  ;.    pCrsr = 0;
efc0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52  .  }else{.    zR
efd0: 65 63 20 3d 20 30 3b 0a 20 20 20 20 70 61 79 6c  ec = 0;.    payl
efe0: 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20  oadSize = 0;.   
eff0: 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20   pCrsr = 0;.    
f000: 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 7d 0a  nField = 0;.  }.
f010: 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
f020: 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
f030: 6a 75 73 74 20 70 75 73 68 20 61 20 4e 55 4c 4c  just push a NULL
f040: 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 2e   onto the stack.
f050: 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61   */.  if( payloa
f060: 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20  dSize==0 ){.    
f070: 61 73 73 65 72 74 28 20 70 54 6f 73 2d 3e 66 6c  assert( pTos->fl
f080: 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  ags==MEM_Null );
f090: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
f0a0: 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
f0b0: 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
f0c0: 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
f0d0: 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
f0e0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
f0f0: 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
f100: 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
f110: 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
f120: 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
f130: 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66  ursor..  */.  if
f140: 28 20 70 43 20 26 26 20 70 43 2d 3e 63 61 63 68  ( pC && pC->cach
f150: 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
f160: 65 43 74 72 20 29 7b 0a 20 20 20 20 61 54 79 70  eCtr ){.    aTyp
f170: 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
f180: 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d     aOffset = pC-
f190: 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73  >aOffset;.  }els
f1a0: 65 7b 0a 20 20 20 20 75 38 20 2a 7a 49 64 78 3b  e{.    u8 *zIdx;
f1b0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
f1c0: 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a   into header */.
f1d0: 20 20 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b      u8 *zEndHdr;
f1e0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
f1f0: 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
f200: 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
f210: 2f 0a 20 20 20 20 75 33 32 20 6f 66 66 73 65 74  /.    u32 offset
f220: 3b 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  ;      /* Offset
f230: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
f240: 2f 0a 20 20 20 20 69 6e 74 20 73 7a 48 64 72 53  /.    int szHdrS
f250: 7a 3b 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f  z;     /* Size o
f260: 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a  f the header siz
f270: 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72 74  e field at start
f280: 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20   of record */.  
f290: 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20    int avail;    
f2a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f2b0: 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
f2c0: 6c 65 20 64 61 74 61 20 2a 2f 0a 0a 20 20 20 20  le data */..    
f2d0: 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70  aType = pC->aTyp
f2e0: 65 3b 0a 20 20 20 20 69 66 28 20 61 54 79 70 65  e;.    if( aType
f2f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 43 2d  ==0 ){.      pC-
f300: 3e 61 54 79 70 65 20 3d 20 61 54 79 70 65 20 3d  >aType = aType =
f310: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77   sqliteMallocRaw
f320: 28 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f  ( 2*nField*sizeo
f330: 66 28 61 54 79 70 65 29 20 29 3b 0a 20 20 20 20  f(aType) );.    
f340: 7d 0a 20 20 20 20 69 66 28 20 61 54 79 70 65 3d  }.    if( aType=
f350: 3d 30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 ){.      goto
f360: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
f370: 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d     pC->aOffset =
f380: 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70   aOffset = &aTyp
f390: 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70  e[nField];.    p
f3a0: 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
f3b0: 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20   payloadSize;.  
f3c0: 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
f3d0: 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
f3e0: 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20  ..    /* Figure 
f3f0: 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74  out how many byt
f400: 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65  es are in the he
f410: 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20  ader */.    if( 
f420: 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44  zRec ){.      zD
f430: 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20  ata = zRec;.    
f440: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
f450: 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
f460: 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
f470: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
f480: 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
f490: 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
f4a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
f4b0: 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
f4c0: 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
f4d0: 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
f4e0: 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
f4f0: 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74      /* If KeyFet
f500: 63 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29  ch()/DataFetch()
f510: 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20   managed to get 
f520: 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
f530: 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ad,.      ** sav
f540: 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  e the payload in
f550: 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61   the pC->aRow ca
f560: 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  che.  That will 
f570: 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20  save us from.   
f580: 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20     ** having to 
f590: 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20  make additional 
f5a0: 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74  calls to fetch t
f5b0: 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69  he content porti
f5c0: 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  on of.      ** t
f5d0: 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
f5e0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 76   */.      if( av
f5f0: 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65  ail>=payloadSize
f600: 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63   ){.        zRec
f610: 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20   = zData;.      
f620: 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
f630: 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d  *)zData;.      }
f640: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
f650: 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ->aRow = 0;.    
f660: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a    }.    }.    /*
f670: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
f680: 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e  ssert is true in
f690: 20 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70   all cases accep
f6a0: 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68  t when.    ** th
f6b0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
f6c0: 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74  has been corrupt
f6d0: 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed externally.. 
f6e0: 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28     **    assert(
f6f0: 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69   zRec!=0 || avai
f700: 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c  l>=payloadSize |
f710: 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f  | avail>=9 ); */
f720: 0a 20 20 20 20 73 7a 48 64 72 53 7a 20 3d 20 47  .    szHdrSz = G
f730: 65 74 56 61 72 69 6e 74 28 28 75 38 2a 29 7a 44  etVarint((u8*)zD
f740: 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20  ata, offset);.. 
f750: 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74     /* The KeyFet
f760: 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63  ch() or DataFetc
f770: 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61  h() above are fa
f780: 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20  st and will get 
f790: 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a  the entire.    *
f7a0: 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
f7b0: 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20  in most cases.  
f7c0: 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61  But they will fa
f7d0: 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f  il to get the co
f7e0: 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65  mplete.    ** re
f7f0: 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74  cord header if t
f800: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
f810: 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e   does not fit on
f820: 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20   a single page. 
f830: 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54     ** in the B-T
f840: 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20  ree.  When that 
f850: 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c  happens, use sql
f860: 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
f870: 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a  tree() to.    **
f880: 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d   acquire the com
f890: 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78  plete header tex
f8a0: 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  t..    */.    if
f8b0: 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c  ( !zRec && avail
f8c0: 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20  <offset ){.     
f8d0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
f8e0: 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
f8f0: 72 73 72 2c 20 30 2c 20 6f 66 66 73 65 74 2c 20  rsr, 0, offset, 
f900: 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
f910: 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
f920: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
f930: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
f940: 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
f950: 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
f960: 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a  = sMem.z;.    }.
f970: 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75      zEndHdr = (u
f980: 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66 73 65  8 *)&zData[offse
f990: 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28  t];.    zIdx = (
f9a0: 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64  u8 *)&zData[szHd
f9b0: 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63  rSz];..    /* Sc
f9c0: 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e  an the header an
f9d0: 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c  d use it to fill
f9e0: 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20   in the aType[] 
f9f0: 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20  and aOffset[].  
fa00: 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54    ** arrays.  aT
fa10: 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  ype[i] will cont
fa20: 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74  ain the type int
fa30: 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74  eger for the i-t
fa40: 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20  h.    ** column 
fa50: 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77  and aOffset[i] w
fa60: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
fa70: 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
fa80: 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a  beginning.    **
fa90: 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
faa0: 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  o the start of t
fab0: 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
fac0: 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  i-th column.    
fad0: 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  */.    for(i=0; 
fae0: 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
faf0: 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
fb00: 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
fb10: 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f    aOffset[i] = o
fb20: 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 7a  ffset;.        z
fb30: 49 64 78 20 2b 3d 20 47 65 74 56 61 72 69 6e 74  Idx += GetVarint
fb40: 28 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d 29  (zIdx, aType[i])
fb50: 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
fb60: 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
fb70: 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79  erialTypeLen(aTy
fb80: 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65  pe[i]);.      }e
fb90: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
fba0: 49 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61  If i is less tha
fbb0: 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74  t nField, then t
fbc0: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 66 69  here are less fi
fbd0: 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20  elds in this.   
fbe0: 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74       ** record t
fbf0: 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  han SetNumColumn
fc00: 73 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72  s indicated ther
fc10: 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
fc20: 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
fc30: 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f  table. Set the o
fc40: 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78  ffset for any ex
fc50: 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20  tra columns not 
fc60: 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20  present in.     
fc70: 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
fc80: 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c   to 0. This tell
fc90: 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20  s code below to 
fca0: 70 75 73 68 20 61 20 4e 55 4c 4c 20 6f 6e 74 6f  push a NULL onto
fcb0: 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
fcc0: 73 74 61 63 6b 20 69 6e 73 74 65 61 64 20 6f 66  stack instead of
fcd0: 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61   deserializing a
fce0: 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
fcf0: 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20  record..        
fd00: 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  */.        aOffs
fd10: 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20  et[i] = 0;.     
fd20: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 52 65 6c   }.    }.    Rel
fd30: 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
fd40: 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45   sMem.flags = ME
fd50: 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20  M_Null;..    /* 
fd60: 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20  If we have read 
fd70: 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61  more header data
fd80: 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69   than was contai
fd90: 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65  ned in the heade
fda0: 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20  r,.    ** or if 
fdb0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
fdc0: 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
fdd0: 73 20 74 6f 20 62 65 20 70 61 73 74 20 74 68 65  s to be past the
fde0: 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20   end of the.    
fdf0: 2a 2a 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ** record, then 
fe00: 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69  we must be deali
fe10: 6e 67 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ng with a corrup
fe20: 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
fe30: 2a 2f 0a 20 20 20 20 69 66 28 20 7a 49 64 78 3e  */.    if( zIdx>
fe40: 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
fe50: 74 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  t>payloadSize ){
fe60: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
fe70: 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
fe80: 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
fe90: 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
fea0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74  .  }..  /* Get t
feb0: 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d  he column inform
fec0: 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65  ation. If aOffse
fed0: 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72  t[p2] is non-zer
fee0: 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65  o, then .  ** de
fef0: 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61  serialize the va
ff00: 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
ff10: 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b  ord. If aOffset[
ff20: 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a  p2] is zero,.  *
ff30: 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  * then there are
ff40: 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c   not enough fiel
ff50: 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
ff60: 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a   to satisfy the.
ff70: 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49    ** request.  I
ff80: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74  n this case, set
ff90: 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
ffa0: 6f 72 20 74 6f 20 50 33 20 69 66 20 50 33 20 69  or to P3 if P3 i
ffb0: 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72  s.  ** a pointer
ffc0: 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74   to a Mem object
ffd0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66  ..  */.  if( aOf
ffe0: 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20  fset[p2] ){.    
fff0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
10000 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28  TE_OK );.    if(
10010 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a   zRec ){.      z
10020 44 61 74 61 20 3d 20 26 7a 52 65 63 5b 61 4f 66  Data = &zRec[aOf
10030 66 73 65 74 5b 70 32 5d 5d 3b 0a 20 20 20 20 7d  fset[p2]];.    }
10040 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20  else{.      len 
10050 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
10060 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65  ialTypeLen(aType
10070 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 72 63 20  [p2]);.      rc 
10080 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
10090 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
100a0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
100b0 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 26  n, pC->isIndex,&
100c0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
100d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
100e0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
100f0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10100 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
10110 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
10120 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
10130 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29  eSerialGet((u8*)
10140 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d  zData, aType[p2]
10150 2c 20 70 54 6f 73 29 3b 0a 20 20 20 20 70 54 6f  , pTos);.    pTo
10160 73 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  s->enc = encodin
10170 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  g;.  }else{.    
10180 69 66 28 20 70 4f 70 2d 3e 70 33 74 79 70 65 3d  if( pOp->p3type=
10190 3d 50 33 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  =P3_MEM ){.     
101a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
101b0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 54 6f 73 2c  hallowCopy(pTos,
101c0 20 28 4d 65 6d 20 2a 29 28 70 4f 70 2d 3e 70 33   (Mem *)(pOp->p3
101d0 29 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  ), MEM_Static);.
101e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
101f0 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d   pTos->flags = M
10200 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  EM_Null;.    }. 
10210 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64   }..  /* If we d
10220 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
10230 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f  ated space to ho
10240 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20  ld the data (in 
10250 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
10260 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
10270 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74  () call above) t
10280 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e  hen transfer con
10290 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a  trol of that.  *
102a0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
102b0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
102c0 65 72 20 74 6f 20 74 68 65 20 70 54 6f 73 20 73  er to the pTos s
102d0 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54  tructure..  ** T
102e0 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
102f0 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f  emory copy..  */
10300 0a 20 20 69 66 28 20 28 73 4d 65 6d 2e 66 6c 61  .  if( (sMem.fla
10310 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 21 3d 30  gs & MEM_Dyn)!=0
10320 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
10330 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pTos->flags & ME
10340 4d 5f 45 70 68 65 6d 20 29 3b 0a 20 20 20 20 61  M_Ephem );.    a
10350 73 73 65 72 74 28 20 70 54 6f 73 2d 3e 66 6c 61  ssert( pTos->fla
10360 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
10370 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 20 20 61  M_Blob) );.    a
10380 73 73 65 72 74 28 20 70 54 6f 73 2d 3e 7a 3d 3d  ssert( pTos->z==
10390 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 61 73  sMem.z );.    as
103a0 73 65 72 74 28 20 73 4d 65 6d 2e 66 6c 61 67 73  sert( sMem.flags
103b0 20 26 20 4d 45 4d 5f 54 65 72 6d 20 29 3b 0a 20   & MEM_Term );. 
103c0 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26     pTos->flags &
103d0 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
103e0 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 7c 3d    pTos->flags |=
103f0 20 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 54 65 72   MEM_Dyn|MEM_Ter
10400 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 70 54 6f  m;.  }..  /* pTo
10410 73 2d 3e 7a 20 6d 69 67 68 74 20 62 65 20 70 6f  s->z might be po
10420 69 6e 74 69 6e 67 20 74 6f 20 73 4d 65 6d 2e 7a  inting to sMem.z
10430 53 68 6f 72 74 5b 5d 2e 20 20 46 69 78 20 74 68  Short[].  Fix th
10440 61 74 20 73 6f 20 74 68 61 74 20 77 65 0a 20 20  at so that we.  
10450 2a 2a 20 63 61 6e 20 61 62 61 6e 64 6f 6e 20 73  ** can abandon s
10460 4d 65 6d 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  Mem */.  rc = sq
10470 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
10480 57 72 69 74 65 61 62 6c 65 28 70 54 6f 73 29 3b  Writeable(pTos);
10490 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
104a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
104b0 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
104c0 72 64 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  rd P1 P2 P3.**.*
104d0 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 74 6f  * Convert the to
104e0 70 20 61 62 73 28 50 31 29 20 65 6e 74 72 69 65  p abs(P1) entrie
104f0 73 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 69  s of the stack i
10500 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e 74  nto a single ent
10510 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20 66  ry.** suitable f
10520 6f 72 20 75 73 65 20 61 73 20 61 20 64 61 74 61  or use as a data
10530 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74   record in a dat
10540 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61  abase table or a
10550 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e  s a key.** in an
10560 20 69 6e 64 65 78 2e 20 20 54 68 65 20 64 65 74   index.  The det
10570 61 69 6c 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ails of the form
10580 61 74 20 61 72 65 20 69 72 72 65 6c 61 76 61 6e  at are irrelavan
10590 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20  t as long as.** 
105a0 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
105b0 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20  code can decode 
105c0 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72  the record later
105d0 20 61 6e 64 20 61 73 20 6c 6f 6e 67 20 61 73 20   and as long as 
105e0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64  the.** sqlite3Vd
105f0 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20  beRecordCompare 
10600 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 63 6f  function will co
10610 72 72 65 63 74 6c 79 20 63 6f 6d 70 61 72 65 20  rrectly compare 
10620 74 77 6f 20 65 6e 63 6f 64 65 64 0a 2a 2a 20 72  two encoded.** r
10630 65 63 6f 72 64 73 2e 20 20 52 65 66 65 72 20 74  ecords.  Refer t
10640 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63 6f  o source code co
10650 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 64  mments for the d
10660 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 72 65  etails of the re
10670 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a  cord.** format..
10680 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67 69 6e  **.** The origin
10690 61 6c 20 73 74 61 63 6b 20 65 6e 74 72 69 65 73  al stack entries
106a0 20 61 72 65 20 70 6f 70 70 65 64 20 66 72 6f 6d   are popped from
106b0 20 74 68 65 20 73 74 61 63 6b 20 69 66 20 50 31   the stack if P1
106c0 3e 30 20 62 75 74 0a 2a 2a 20 72 65 6d 61 69 6e  >0 but.** remain
106d0 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 69 66   on the stack if
106e0 20 50 31 3c 30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   P1<0..**.** If 
106f0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P2 is not zero a
10700 6e 64 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  nd one or more o
10710 66 20 74 68 65 20 65 6e 74 72 69 65 73 20 61 72  f the entries ar
10720 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 6a 75 6d  e NULL, then jum
10730 70 0a 2a 2a 20 74 6f 20 74 68 65 20 61 64 64 72  p.** to the addr
10740 65 73 73 20 67 69 76 65 6e 20 62 79 20 50 32 2e  ess given by P2.
10750 20 20 54 68 69 73 20 66 65 61 74 75 72 65 20 63    This feature c
10760 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 73 6b  an be used to sk
10770 69 70 20 61 0a 2a 2a 20 75 6e 69 71 75 65 6e 65  ip a.** uniquene
10780 73 73 20 74 65 73 74 20 6f 6e 20 69 6e 64 69 63  ss test on indic
10790 65 73 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 6d 61 79  es..**.** P3 may
107a0 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
107b0 74 20 69 73 20 50 31 20 63 68 61 72 61 63 74 65  t is P1 characte
107c0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
107d0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
107e0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
107f0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
10800 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
10810 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
10820 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
10830 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
10840 20 6b 65 79 20 28 69 2e 65 2e 20 74 68 65 20 66   key (i.e. the f
10850 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
10860 66 20 50 33 20 63 6f 72 72 65 73 70 6f 6e 64 73  f P3 corresponds
10870 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 6f 77 65 73   to the.** lowes
10880 74 20 65 6c 65 6d 65 6e 74 20 6f 6e 20 74 68 65  t element on the
10890 20 73 74 61 63 6b 29 2e 0a 2a 2a 0a 2a 2a 20 54   stack)..**.** T
108a0 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
108b0 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
108c0 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
108d0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
108e0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
108f0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
10900 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  .h..**.** If P3 
10910 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
10920 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
10930 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
10940 4e 4f 4e 45 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  NONE..**.** See 
10950 61 6c 73 6f 20 4f 50 5f 4d 61 6b 65 49 64 78 52  also OP_MakeIdxR
10960 65 63 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ec.*/./* Opcode:
10970 20 4d 61 6b 65 49 64 78 52 65 63 20 50 31 20 50   MakeIdxRec P1 P
10980 32 20 50 33 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  2 P3.**.** This 
10990 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
109a0 74 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  t OP_MakeRecord 
109b0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 72  except that it r
109c0 65 61 64 73 20 61 6e 20 65 78 74 72 61 0a 2a 2a  eads an extra.**
109d0 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 74 68   integer from th
109e0 65 20 73 74 61 63 6b 20 28 74 68 75 73 20 72 65  e stack (thus re
109f0 61 64 69 6e 67 20 61 20 74 6f 74 61 6c 20 6f 66  ading a total of
10a00 20 61 62 73 28 50 31 2b 31 29 20 65 6e 74 72 69   abs(P1+1) entri
10a10 65 73 29 0a 2a 2a 20 61 6e 64 20 61 70 70 65 6e  es).** and appen
10a20 64 73 20 74 68 61 74 20 65 78 74 72 61 20 69 6e  ds that extra in
10a30 74 65 67 65 72 20 74 6f 20 74 68 65 20 65 6e 64  teger to the end
10a40 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 61   of the record a
10a50 73 20 61 20 76 61 72 69 6e 74 2e 0a 2a 2a 20 54  s a varint..** T
10a60 68 69 73 20 72 65 73 75 6c 74 73 20 69 6e 20 61  his results in a
10a70 6e 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2f 0a  n index key..*/.
10a80 63 61 73 65 20 4f 50 5f 4d 61 6b 65 49 64 78 52  case OP_MakeIdxR
10a90 65 63 3a 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  ec:.case OP_Make
10aa0 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20 41  Record: {.  /* A
10ab0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
10ac0 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
10ad0 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
10ae0 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
10af0 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
10b00 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
10b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10b30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10b40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10b50 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
10b60 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
10b70 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
10b80 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
10b90 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
10ba0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
10bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10bd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10be0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
10bf0 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
10c00 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68  is taken from th
10c10 65 20 6c 6f 77 65 73 74 20 65 6c 65 6d 65 6e 74  e lowest element
10c20 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 61 6e   of the stack an
10c30 64 20 64 61 74 61 28 4e 2d 31 29 20 69 73 0a 20  d data(N-1) is. 
10c40 20 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74   ** the top of t
10c50 68 65 20 73 74 61 63 6b 2e 0a 20 20 2a 2a 0a 20  he stack..  **. 
10c60 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
10c70 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
10c80 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
10c90 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
10ca0 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
10cb0 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
10cc0 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
10cd0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
10ce0 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
10cf0 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
10d00 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
10d10 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
10d20 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
10d30 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
10d40 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
10d50 0a 20 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  .  */.  unsigned
10d60 20 63 68 61 72 20 2a 7a 4e 65 77 52 65 63 6f 72   char *zNewRecor
10d70 64 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68  d;.  unsigned ch
10d80 61 72 20 2a 7a 43 73 72 3b 0a 20 20 4d 65 6d 20  ar *zCsr;.  Mem 
10d90 2a 70 52 65 63 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pRec;.  Mem *pR
10da0 6f 77 69 64 20 3d 20 30 3b 0a 20 20 69 6e 74 20  owid = 0;.  int 
10db0 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
10dc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10dd0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
10de0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
10df0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
10e00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
10e10 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
10e20 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  ce */.  int nByt
10e30 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  e = 0;         /
10e40 2a 20 53 70 61 63 65 20 72 65 71 75 69 72 65 64  * Space required
10e50 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
10e60 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
10e70 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10e80 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
10e90 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
10ea0 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
10eb0 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
10ec0 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 63  field */.  int c
10ed0 6f 6e 74 61 69 6e 73 4e 75 6c 6c 20 3d 20 30 3b  ontainsNull = 0;
10ee0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 79    /* True if any
10ef0 20 6f 66 20 74 68 65 20 64 61 74 61 20 66 69 65   of the data fie
10f00 6c 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  lds are NULL */.
10f10 20 20 63 68 61 72 20 7a 54 65 6d 70 5b 4e 42 46    char zTemp[NBF
10f20 53 5d 3b 20 20 20 20 20 20 2f 2a 20 53 70 61 63  S];      /* Spac
10f30 65 20 74 6f 20 68 6f 6c 64 20 73 6d 61 6c 6c 20  e to hold small 
10f40 72 65 63 6f 72 64 73 20 2a 2f 0a 20 20 4d 65 6d  records */.  Mem
10f50 20 2a 70 44 61 74 61 30 3b 0a 0a 20 20 69 6e 74   *pData0;..  int
10f60 20 6c 65 61 76 65 4f 6e 53 74 61 63 6b 3b 20 20   leaveOnStack;  
10f70 20 20 20 20 2f 2a 20 49 66 20 74 72 75 65 2c 20      /* If true, 
10f80 6c 65 61 76 65 20 74 68 65 20 65 6e 74 72 69 65  leave the entrie
10f90 73 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 2a  s on the stack *
10fa0 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
10fb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10fc0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
10fd0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
10fe0 20 20 69 6e 74 20 6a 75 6d 70 49 66 4e 75 6c 6c    int jumpIfNull
10ff0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70  ;        /* Jump
11000 20 68 65 72 65 20 69 66 20 6e 6f 6e 2d 7a 65 72   here if non-zer
11010 6f 20 61 6e 64 20 61 6e 79 20 65 6e 74 72 69 65  o and any entrie
11020 73 20 61 72 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 20  s are NULL. */. 
11030 20 69 6e 74 20 61 64 64 52 6f 77 69 64 3b 20 20   int addRowid;  
11040 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
11050 74 6f 20 61 70 70 65 6e 64 20 61 20 72 6f 77 69  to append a rowi
11060 64 20 63 6f 6c 75 6d 6e 20 61 74 20 74 68 65 20  d column at the 
11070 65 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  end */.  char *z
11080 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
11090 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
110a0 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
110b0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
110c0 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
110d0 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
110e0 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
110f0 64 69 6e 67 20 2a 2f 0a 0a 20 20 6c 65 61 76 65  ding */..  leave
11100 4f 6e 53 74 61 63 6b 20 3d 20 28 28 70 4f 70 2d  OnStack = ((pOp-
11110 3e 70 31 3c 30 29 3f 31 3a 30 29 3b 0a 20 20 6e  >p1<0)?1:0);.  n
11120 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 20  Field = pOp->p1 
11130 2a 20 28 6c 65 61 76 65 4f 6e 53 74 61 63 6b 3f  * (leaveOnStack?
11140 2d 31 3a 31 29 3b 0a 20 20 6a 75 6d 70 49 66 4e  -1:1);.  jumpIfN
11150 75 6c 6c 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ull = pOp->p2;. 
11160 20 61 64 64 52 6f 77 69 64 20 3d 20 70 4f 70 2d   addRowid = pOp-
11170 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 61 6b 65  >opcode==OP_Make
11180 49 64 78 52 65 63 3b 0a 20 20 7a 41 66 66 69 6e  IdxRec;.  zAffin
11190 69 74 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a  ity = pOp->p3;..
111a0 20 20 70 44 61 74 61 30 20 3d 20 26 70 54 6f 73    pData0 = &pTos
111b0 5b 31 2d 6e 46 69 65 6c 64 5d 3b 0a 20 20 61 73  [1-nField];.  as
111c0 73 65 72 74 28 20 70 44 61 74 61 30 3e 3d 70 2d  sert( pData0>=p-
111d0 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 63 6f 6e  >aStack );.  con
111e0 74 61 69 6e 73 4e 75 6c 6c 20 3d 20 30 3b 0a 20  tainsNull = 0;. 
111f0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
11200 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
11210 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  rmat;..  /* Loop
11220 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
11230 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
11240 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
11250 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
11260 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
11270 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
11280 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
11290 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ord..  */.  for(
112a0 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
112b0 63 3c 3d 70 54 6f 73 3b 20 70 52 65 63 2b 2b 29  c<=pTos; pRec++)
112c0 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e  {.    if( zAffin
112d0 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
112e0 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
112f0 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
11300 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
11310 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  g);.    }.    if
11320 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  ( pRec->flags&ME
11330 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
11340 63 6f 6e 74 61 69 6e 73 4e 75 6c 6c 20 3d 20 31  containsNull = 1
11350 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
11360 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
11370 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
11380 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
11390 74 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d  t);.    nData +=
113a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
113b0 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c  alTypeLen(serial
113c0 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 48 64 72  _type);.    nHdr
113d0 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
113e0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
113f0 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  );.  }..  /* If 
11400 77 65 20 68 61 76 65 20 74 6f 20 61 70 70 65 6e  we have to appen
11410 64 20 61 20 76 61 72 69 6e 74 20 72 6f 77 69 64  d a varint rowid
11420 20 74 6f 20 74 68 69 73 20 72 65 63 6f 72 64 2c   to this record,
11430 20 73 65 74 20 27 72 6f 77 69 64 27 0a 20 20 2a   set 'rowid'.  *
11440 2a 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  * to the value o
11450 66 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20  f the rowid and 
11460 69 6e 63 72 65 61 73 65 20 6e 42 79 74 65 20 62  increase nByte b
11470 79 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  y the amount of 
11480 73 70 61 63 65 0a 20 20 2a 2a 20 72 65 71 75 69  space.  ** requi
11490 72 65 64 20 74 6f 20 73 74 6f 72 65 20 69 74 20  red to store it 
114a0 61 6e 64 20 74 68 65 20 30 78 30 30 20 73 65 70  and the 0x00 sep
114b0 65 72 61 74 6f 72 20 62 79 74 65 2e 0a 20 20 2a  erator byte..  *
114c0 2f 0a 20 20 69 66 28 20 61 64 64 52 6f 77 69 64  /.  if( addRowid
114d0 20 29 7b 0a 20 20 20 20 70 52 6f 77 69 64 20 3d   ){.    pRowid =
114e0 20 26 70 54 6f 73 5b 30 2d 6e 46 69 65 6c 64 5d   &pTos[0-nField]
114f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52  ;.    assert( pR
11500 6f 77 69 64 3e 3d 70 2d 3e 61 53 74 61 63 6b 20  owid>=p->aStack 
11510 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
11520 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
11530 70 52 6f 77 69 64 29 3b 0a 20 20 20 20 73 65 72  pRowid);.    ser
11540 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
11550 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
11560 28 70 52 6f 77 69 64 2c 20 30 29 3b 0a 20 20 20  (pRowid, 0);.   
11570 20 6e 44 61 74 61 20 2b 3d 20 73 71 6c 69 74 65   nData += sqlite
11580 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
11590 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
115a0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c  .    nHdr += sql
115b0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
115c0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 0a  rial_type);.  }.
115d0 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e  .  /* Add the in
115e0 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72  itial header var
115f0 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68  int and total th
11600 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72  e size */.  nHdr
11610 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71   += nVarint = sq
11620 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
11630 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72  Hdr);.  if( nVar
11640 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
11650 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20  tLen(nHdr) ){.  
11660 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20    nHdr++;.  }.  
11670 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
11680 74 61 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61  ta;..  /* Alloca
11690 74 65 20 73 70 61 63 65 20 66 6f 72 20 74 68 65  te space for the
116a0 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 2a 2f 0a   new record. */.
116b0 20 20 69 66 28 20 6e 42 79 74 65 3e 73 69 7a 65    if( nByte>size
116c0 6f 66 28 7a 54 65 6d 70 29 20 29 7b 0a 20 20 20  of(zTemp) ){.   
116d0 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 73 71   zNewRecord = sq
116e0 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 6e 42  liteMallocRaw(nB
116f0 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  yte);.    if( !z
11700 4e 65 77 52 65 63 6f 72 64 20 29 7b 0a 20 20 20  NewRecord ){.   
11710 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
11720 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
11730 20 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20     zNewRecord = 
11740 28 75 38 2a 29 7a 54 65 6d 70 3b 0a 20 20 7d 0a  (u8*)zTemp;.  }.
11750 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
11760 72 65 63 6f 72 64 20 2a 2f 0a 20 20 7a 43 73 72  record */.  zCsr
11770 20 3d 20 7a 4e 65 77 52 65 63 6f 72 64 3b 0a 20   = zNewRecord;. 
11780 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
11790 50 75 74 56 61 72 69 6e 74 28 7a 43 73 72 2c 20  PutVarint(zCsr, 
117a0 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65  nHdr);.  for(pRe
117b0 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
117c0 70 54 6f 73 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  pTos; pRec++){. 
117d0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
117e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
117f0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
11800 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 7a  e_format);.    z
11810 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 50 75  Csr += sqlite3Pu
11820 74 56 61 72 69 6e 74 28 7a 43 73 72 2c 20 73 65  tVarint(zCsr, se
11830 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20  rial_type);     
11840 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20   /* serial type 
11850 2a 2f 0a 20 20 7d 0a 20 20 69 66 28 20 61 64 64  */.  }.  if( add
11860 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 7a 43 73  Rowid ){.    zCs
11870 72 20 2b 3d 20 73 71 6c 69 74 65 33 50 75 74 56  r += sqlite3PutV
11880 61 72 69 6e 74 28 7a 43 73 72 2c 20 73 71 6c 69  arint(zCsr, sqli
11890 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
118a0 65 28 70 52 6f 77 69 64 2c 20 30 29 29 3b 0a 20  e(pRowid, 0));. 
118b0 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44   }.  for(pRec=pD
118c0 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 54 6f 73  ata0; pRec<=pTos
118d0 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 7a  ; pRec++){.    z
118e0 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  Csr += sqlite3Vd
118f0 62 65 53 65 72 69 61 6c 50 75 74 28 7a 43 73 72  beSerialPut(zCsr
11900 2c 20 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  , pRec, file_for
11910 6d 61 74 29 3b 20 20 2f 2a 20 73 65 72 69 61 6c  mat);  /* serial
11920 20 64 61 74 61 20 2a 2f 0a 20 20 7d 0a 20 20 69   data */.  }.  i
11930 66 28 20 61 64 64 52 6f 77 69 64 20 29 7b 0a 20  f( addRowid ){. 
11940 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
11950 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
11960 7a 43 73 72 2c 20 70 52 6f 77 69 64 2c 20 30 29  zCsr, pRowid, 0)
11970 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
11980 7a 43 73 72 3d 3d 28 7a 4e 65 77 52 65 63 6f 72  zCsr==(zNewRecor
11990 64 2b 6e 42 79 74 65 29 20 29 3b 0a 0a 20 20 2f  d+nByte) );..  /
119a0 2a 20 50 6f 70 20 65 6e 74 72 69 65 73 20 6f 66  * Pop entries of
119b0 66 20 74 68 65 20 73 74 61 63 6b 20 69 66 20 72  f the stack if r
119c0 65 71 75 69 72 65 64 2e 20 50 75 73 68 20 74 68  equired. Push th
119d0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6f 6e 2e  e new record on.
119e0 20 2a 2f 0a 20 20 69 66 28 20 21 6c 65 61 76 65   */.  if( !leave
119f0 4f 6e 53 74 61 63 6b 20 29 7b 0a 20 20 20 20 70  OnStack ){.    p
11a00 6f 70 53 74 61 63 6b 28 26 70 54 6f 73 2c 20 6e  opStack(&pTos, n
11a10 46 69 65 6c 64 2b 61 64 64 52 6f 77 69 64 29 3b  Field+addRowid);
11a20 0a 20 20 7d 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20  .  }.  pTos++;. 
11a30 20 70 54 6f 73 2d 3e 6e 20 3d 20 6e 42 79 74 65   pTos->n = nByte
11a40 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3c 3d 73  ;.  if( nByte<=s
11a50 69 7a 65 6f 66 28 7a 54 65 6d 70 29 20 29 7b 0a  izeof(zTemp) ){.
11a60 20 20 20 20 61 73 73 65 72 74 28 20 7a 4e 65 77      assert( zNew
11a70 52 65 63 6f 72 64 3d 3d 28 75 6e 73 69 67 6e 65  Record==(unsigne
11a80 64 20 63 68 61 72 20 2a 29 7a 54 65 6d 70 20 29  d char *)zTemp )
11a90 3b 0a 20 20 20 20 70 54 6f 73 2d 3e 7a 20 3d 20  ;.    pTos->z = 
11aa0 70 54 6f 73 2d 3e 7a 53 68 6f 72 74 3b 0a 20 20  pTos->zShort;.  
11ab0 20 20 6d 65 6d 63 70 79 28 70 54 6f 73 2d 3e 7a    memcpy(pTos->z
11ac0 53 68 6f 72 74 2c 20 7a 54 65 6d 70 2c 20 6e 42  Short, zTemp, nB
11ad0 79 74 65 29 3b 0a 20 20 20 20 70 54 6f 73 2d 3e  yte);.    pTos->
11ae0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
11af0 20 7c 20 4d 45 4d 5f 53 68 6f 72 74 3b 0a 20 20   | MEM_Short;.  
11b00 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
11b10 74 28 20 7a 4e 65 77 52 65 63 6f 72 64 21 3d 28  t( zNewRecord!=(
11b20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
11b30 7a 54 65 6d 70 20 29 3b 0a 20 20 20 20 70 54 6f  zTemp );.    pTo
11b40 73 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29 7a 4e  s->z = (char*)zN
11b50 65 77 52 65 63 6f 72 64 3b 0a 20 20 20 20 70 54  ewRecord;.    pT
11b60 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  os->flags = MEM_
11b70 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a  Blob | MEM_Dyn;.
11b80 20 20 20 20 70 54 6f 73 2d 3e 78 44 65 6c 20 3d      pTos->xDel =
11b90 20 30 3b 0a 20 20 7d 0a 20 20 70 54 6f 73 2d 3e   0;.  }.  pTos->
11ba0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
11bb0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
11bc0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
11bd0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
11be0 74 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 61 20  t */..  /* If a 
11bf0 4e 55 4c 4c 20 77 61 73 20 65 6e 63 6f 75 6e 74  NULL was encount
11c00 65 72 65 64 20 61 6e 64 20 6a 75 6d 70 49 66 4e  ered and jumpIfN
11c10 75 6c 6c 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  ull is non-zero,
11c20 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
11c30 2a 2f 0a 20 20 69 66 28 20 6a 75 6d 70 49 66 4e  */.  if( jumpIfN
11c40 75 6c 6c 20 26 26 20 63 6f 6e 74 61 69 6e 73 4e  ull && containsN
11c50 75 6c 6c 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ull ){.    pc = 
11c60 6a 75 6d 70 49 66 4e 75 6c 6c 20 2d 20 31 3b 0a  jumpIfNull - 1;.
11c70 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11c80 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65  /* Opcode: State
11c90 6d 65 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a  ment P1 * *.**.*
11ca0 2a 20 42 65 67 69 6e 20 61 6e 20 69 6e 64 69 76  * Begin an indiv
11cb0 69 64 75 61 6c 20 73 74 61 74 65 6d 65 6e 74 20  idual statement 
11cc0 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 63  transaction whic
11cd0 68 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 6c  h is part of a l
11ce0 61 72 67 65 72 0a 2a 2a 20 42 45 47 49 4e 2e 2e  arger.** BEGIN..
11cf0 43 4f 4d 4d 49 54 20 74 72 61 6e 73 61 63 74 69  COMMIT transacti
11d00 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 65  on.  This is nee
11d10 64 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ded so that the 
11d20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 61 6e  statement.** can
11d30 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
11d40 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
11d50 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
11d60 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
11d70 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
11d80 74 69 6f 6e 2e 20 20 54 68 65 20 73 74 61 74 65  tion.  The state
11d90 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
11da0 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
11db0 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69 74 20 77 68  lly.** commit wh
11dc0 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
11dd0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 61  s..**.** The sta
11de0 74 65 6d 65 6e 74 20 69 73 20 62 65 67 75 6e 20  tement is begun 
11df0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
11e00 66 69 6c 65 20 77 69 74 68 20 69 6e 64 65 78 20  file with index 
11e10 50 31 2e 20 20 54 68 65 20 6d 61 69 6e 0a 2a 2a  P1.  The main.**
11e20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
11e30 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
11e40 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20 75 73   and the file us
11e50 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
11e60 20 74 61 62 6c 65 73 0a 2a 2a 20 68 61 73 20 61   tables.** has a
11e70 6e 20 69 6e 64 65 78 20 6f 66 20 31 2e 0a 2a 2f  n index of 1..*/
11e80 0a 63 61 73 65 20 4f 50 5f 53 74 61 74 65 6d 65  .case OP_Stateme
11e90 6e 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6e  nt: {       /* n
11ea0 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20  o-push */.  int 
11eb0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42  i = pOp->p1;.  B
11ec0 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 66 28  tree *pBt;.  if(
11ed0 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e   i>=0 && i<db->n
11ee0 44 62 20 26 26 20 28 70 42 74 20 3d 20 64 62 2d  Db && (pBt = db-
11ef0 3e 61 44 62 5b 69 5d 2e 70 42 74 29 21 3d 30 20  >aDb[i].pBt)!=0 
11f00 26 26 20 21 28 64 62 2d 3e 61 75 74 6f 43 6f 6d  && !(db->autoCom
11f10 6d 69 74 29 20 29 7b 0a 20 20 20 20 61 73 73 65  mit) ){.    asse
11f20 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
11f30 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
11f40 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74  ;.    if( !sqlit
11f50 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d 74 28  e3BtreeIsInStmt(
11f60 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 72 63  pBt) ){.      rc
11f70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
11f80 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b 0a 20  eginStmt(pBt);. 
11f90 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
11fa0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11fb0 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
11fc0 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
11fd0 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
11fe0 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
11ff0 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
12000 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
12010 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
12020 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
12030 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
12040 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
12050 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
12060 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
12070 6f 6e 65 29 2c 20 74 68 65 6e 20 74 68 65 20 43  one), then the C
12080 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43  OMMIT or ROLLBAC
12090 4b 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  K statement fail
120a0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  s..**.** This in
120b0 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
120c0 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
120d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
120e0 43 6f 6d 6d 69 74 3a 20 7b 20 20 20 20 20 20 20  Commit: {       
120f0 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
12100 75 38 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  u8 i = pOp->p1;.
12110 20 20 75 38 20 72 6f 6c 6c 62 61 63 6b 20 3d 20    u8 rollback = 
12120 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 61 73 73 65  pOp->p2;..  asse
12130 72 74 28 20 69 3d 3d 31 20 7c 7c 20 69 3d 3d 30  rt( i==1 || i==0
12140 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
12150 3d 31 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d  =1 || rollback==
12160 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  0 );..  assert( 
12170 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
12180 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  t>0 );  /* At le
12190 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
121a0 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20  is active */..  
121b0 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
121c0 62 65 43 6e 74 3e 31 20 26 26 20 69 20 26 26 20  beCnt>1 && i && 
121d0 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
121e0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
121f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
12200 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
12210 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 6f  T or ROLLBACK, o
12220 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20  ther VMs are.   
12230 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e   ** still runnin
12240 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63  g, and a transac
12250 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20  tion is active, 
12260 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
12270 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a  indicating.    *
12280 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  * that the other
12290 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
122a0 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
122b0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
122c0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
122d0 73 67 2c 20 22 63 61 6e 6e 6f 74 20 22 2c 20 72  sg, "cannot ", r
122e0 6f 6c 6c 62 61 63 6b 3f 22 72 6f 6c 6c 62 61 63  ollback?"rollbac
122f0 6b 22 3a 22 63 6f 6d 6d 69 74 22 2c 20 0a 20 20  k":"commit", .  
12300 20 20 20 20 20 20 22 20 74 72 61 6e 73 61 63 74        " transact
12310 69 6f 6e 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  ion - SQL statem
12320 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
12330 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ", (char*)0);.  
12340 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
12350 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ROR;.  }else if(
12360 20 69 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   i!=db->autoComm
12370 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  it ){.    if( pO
12380 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 20 20 61  p->p2 ){.      a
12390 73 73 65 72 74 28 20 69 3d 3d 31 20 29 3b 0a 20  ssert( i==1 );. 
123a0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
123b0 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20  backAll(db);.   
123c0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
123d0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
123e0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
123f0 43 6f 6d 6d 69 74 20 3d 20 69 3b 0a 20 20 20 20  Commit = i;.    
12400 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
12410 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
12420 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
12430 20 70 2d 3e 70 54 6f 73 20 3d 20 70 54 6f 73 3b   p->pTos = pTos;
12440 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
12450 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
12460 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 2d  >autoCommit = 1-
12470 69 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  i;.        p->rc
12480 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
12490 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
124a0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
124b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65    }.    }.    re
124c0 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 4f 4e 45  turn SQLITE_DONE
124d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
124e0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
124f0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 0a 20 20 20  &p->zErrMsg,.   
12500 20 20 20 20 20 28 21 69 29 3f 22 63 61 6e 6e 6f       (!i)?"canno
12510 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
12520 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
12530 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
12540 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b 29        (rollback)
12550 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
12560 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
12570 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
125a0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
125b0 6e 20 69 73 20 61 63 74 69 76 65 22 29 2c 20 28  n is active"), (
125c0 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20  char*)0);.      
125d0 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
125e0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
125f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12600 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
12610 6e 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  n P1 P2 *.**.** 
12620 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
12630 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61  ion.  The transa
12640 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20  ction ends when 
12650 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c  a Commit or Roll
12660 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69  back.** opcode i
12670 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20  s encountered.  
12680 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  Depending on the
12690 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74   ON CONFLICT set
126a0 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61  ting, the.** tra
126b0 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61  nsaction might a
126c0 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  lso be rolled ba
126d0 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69  ck if an error i
126e0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
126f0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
12700 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
12710 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
12720 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
12730 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
12740 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
12750 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
12760 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
12770 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
12780 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
12790 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
127a0 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
127b0 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
127c0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
127d0 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45  started.  A RESE
127e0 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  RVED lock is.** 
127f0 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
12800 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
12810 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
12820 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
12830 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20  d.  No.** other 
12840 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72  process can star
12850 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20  t another write 
12860 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c  transaction whil
12870 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  e this transacti
12880 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61  on is.** underwa
12890 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77  y.  Starting a w
128a0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
128b0 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20   also creates a 
128c0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
128d0 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61  . A.** write tra
128e0 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
128f0 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
12900 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20  any changes can 
12910 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a  be made to the.*
12920 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20  * database.  If 
12930 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74  P2 is 2 or great
12940 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55  er then an EXCLU
12950 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73  SIVE lock is als
12960 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e  o obtained.** on
12970 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a   the file..**.**
12980 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
12990 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b  then a read-lock
129a0 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20   is obtained on 
129b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
129c0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  e..*/.case OP_Tr
129d0 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 20 20 20 20  ansaction: {    
129e0 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
129f0 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
12a00 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  p1;.  Btree *pBt
12a10 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
12a20 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29  0 && i<db->nDb )
12a30 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
12a40 62 5b 69 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  b[i].pBt;..  if(
12a50 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
12a60 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
12a70 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
12a80 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
12a90 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
12aa0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
12ab0 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
12ac0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
12ad0 20 20 20 20 20 70 2d 3e 70 54 6f 73 20 3d 20 70       p->pTos = p
12ae0 54 6f 73 3b 0a 20 20 20 20 20 20 72 65 74 75 72  Tos;.      retur
12af0 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
12b00 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
12b10 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
12b20 21 3d 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  !=SQLITE_READONL
12b30 59 20 2f 2a 20 26 26 20 72 63 21 3d 53 51 4c 49  Y /* && rc!=SQLI
12b40 54 45 5f 42 55 53 59 20 2a 2f 20 29 7b 0a 20 20  TE_BUSY */ ){.  
12b50 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
12b60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
12b70 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
12b80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
12b90 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  adCookie P1 P2 *
12ba0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
12bb0 69 65 20 6e 75 6d 62 65 72 20 50 32 20 66 72 6f  ie number P2 fro
12bc0 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
12bd0 64 20 70 75 73 68 20 69 74 20 6f 6e 74 6f 20 74  d push it onto t
12be0 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 20 50 32 3d  he stack..** P2=
12bf0 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =0 is the schema
12c00 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31   version.  P2==1
12c10 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
12c20 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d   format..** P2==
12c30 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  2 is the recomme
12c40 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
12c50 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
12c60 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
12c70 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
12c80 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
12c90 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
12ca0 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
12cb0 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
12cc0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
12cd0 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
12ce0 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
12cf0 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
12d00 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
12d10 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
12d20 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
12d30 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
12d40 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
12d50 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
12d60 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
12d70 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
12d80 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  : {.  int iMeta;
12d90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
12da0 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
12db0 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
12dc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
12dd0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
12de0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
12df0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
12e00 70 42 74 21 3d 30 20 29 3b 0a 20 20 2f 2a 20 54  pBt!=0 );.  /* T
12e10 68 65 20 69 6e 64 65 78 69 6e 67 20 6f 66 20 6d  he indexing of m
12e20 65 74 61 20 76 61 6c 75 65 73 20 61 74 20 74 68  eta values at th
12e30 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72 20 69  e schema layer i
12e40 73 20 6f 66 66 20 62 79 20 6f 6e 65 20 66 72 6f  s off by one fro
12e50 6d 0a 20 20 2a 2a 20 74 68 65 20 69 6e 64 65 78  m.  ** the index
12e60 69 6e 67 20 69 6e 20 74 68 65 20 62 74 72 65 65  ing in the btree
12e70 20 6c 61 79 65 72 2e 20 20 54 68 65 20 62 74 72   layer.  The btr
12e80 65 65 20 63 6f 6e 73 69 64 65 72 73 20 6d 65 74  ee considers met
12e90 61 5b 30 5d 20 74 6f 0a 20 20 2a 2a 20 62 65 20  a[0] to.  ** be 
12ea0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  the number of fr
12eb0 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ee pages in the 
12ec0 64 61 74 61 62 61 73 65 20 28 61 20 72 65 61 64  database (a read
12ed0 2d 6f 6e 6c 79 20 76 61 6c 75 65 29 0a 20 20 2a  -only value).  *
12ee0 2a 20 61 6e 64 20 6d 65 74 61 5b 31 5d 20 74 6f  * and meta[1] to
12ef0 20 62 65 20 74 68 65 20 73 63 68 65 6d 61 20 63   be the schema c
12f00 6f 6f 6b 69 65 2e 20 20 54 68 65 20 73 63 68 65  ookie.  The sche
12f10 6d 61 20 6c 61 79 65 72 20 63 6f 6e 73 69 64 65  ma layer conside
12f20 72 73 0a 20 20 2a 2a 20 6d 65 74 61 5b 31 5d 20  rs.  ** meta[1] 
12f30 74 6f 20 62 65 20 74 68 65 20 73 63 68 65 6d 61  to be the schema
12f40 20 63 6f 6f 6b 69 65 2e 20 20 53 6f 20 77 65 20   cookie.  So we 
12f50 68 61 76 65 20 74 6f 20 73 68 69 66 74 20 74 68  have to shift th
12f60 65 20 69 6e 64 65 78 0a 20 20 2a 2a 20 62 79 20  e index.  ** by 
12f70 6f 6e 65 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  one in the follo
12f80 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 2e 0a  wing statement..
12f90 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69    */.  rc = sqli
12fa0 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
12fb0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
12fc0 2e 70 42 74 2c 20 31 20 2b 20 70 4f 70 2d 3e 70  .pBt, 1 + pOp->p
12fd0 32 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  2, (u32 *)&iMeta
12fe0 29 3b 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 70  );.  pTos++;.  p
12ff0 54 6f 73 2d 3e 69 20 3d 20 69 4d 65 74 61 3b 0a  Tos->i = iMeta;.
13000 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20    pTos->flags = 
13010 4d 45 4d 5f 49 6e 74 3b 0a 20 20 62 72 65 61 6b  MEM_Int;.  break
13020 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
13030 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
13040 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
13050 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
13060 63 6b 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ck into cookie n
13070 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
13080 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d  base P1..** P2==
13090 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  0 is the schema 
130a0 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20  version.  P2==1 
130b0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
130c0 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32  format..** P2==2
130d0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
130e0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
130f0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
13100 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
13110 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
13120 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
13130 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
13140 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
13150 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
13160 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
13170 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
13180 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
13190 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
131a0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
131b0 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
131c0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d  : {       /* no-
131d0 70 75 73 68 20 2a 2f 0a 20 20 44 62 20 2a 70 44  push */.  Db *pD
131e0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
131f0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
13200 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
13210 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
13220 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
13230 6e 44 62 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  nDb );.  pDb = &
13240 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
13250 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
13260 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
13270 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53  ert( pTos>=p->aS
13280 74 61 63 6b 20 29 3b 0a 20 20 73 71 6c 69 74 65  tack );.  sqlite
13290 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
132a0 66 79 28 70 54 6f 73 29 3b 0a 20 20 2f 2a 20 53  fy(pTos);.  /* S
132b0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
132c0 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
132d0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
132e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
132f0 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
13300 44 62 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d 3e  Db->pBt, 1+pOp->
13310 70 32 2c 20 28 69 6e 74 29 70 54 6f 73 2d 3e 69  p2, (int)pTos->i
13320 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
13330 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ==0 ){.    /* Wh
13340 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
13350 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
13360 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
13370 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
13380 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
13390 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
133a0 65 20 3d 20 70 54 6f 73 2d 3e 69 3b 0a 20 20 20  e = pTos->i;.   
133b0 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
133c0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
133d0 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
133e0 70 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20 20  pOp->p2==1 ){.  
133f0 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
13400 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
13410 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
13420 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
13430 5f 66 6f 72 6d 61 74 20 3d 20 70 54 6f 73 2d 3e  _format = pTos->
13440 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  i;.  }.  assert(
13450 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20   (pTos->flags & 
13460 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
13470 20 70 54 6f 73 2d 2d 3b 0a 20 20 69 66 28 20 70   pTos--;.  if( p
13480 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
13490 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
134a0 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
134b0 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
134c0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
134d0 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
134e0 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
134f0 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
13500 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
13510 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
13520 28 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  (db);.  }.  brea
13530 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13540 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31   VerifyCookie P1
13550 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63   P2 *.**.** Chec
13560 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67  k the value of g
13570 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70  lobal database p
13580 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
13590 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  0 (the.** schema
135a0 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61   version) and ma
135b0 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71  ke sure it is eq
135c0 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20  ual to P2.  .** 
135d0 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  P1 is the databa
135e0 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  se number which 
135f0 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69  is 0 for the mai
13600 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
13610 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65  ** and 1 for the
13620 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65   file holding te
13630 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
13640 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e  nd some higher n
13650 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78  umber.** for aux
13660 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
13670 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b  ..**.** The cook
13680 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
13690 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
136a0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
136b0 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
136c0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
136d0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
136e0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
136f0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
13700 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
13710 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
13720 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
13730 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  the schema..**.*
13740 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73  * Either a trans
13750 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
13760 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65  have been starte
13770 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20  d or an OP_Open 
13780 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65  needs.** to be e
13790 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61  xecuted (to esta
137a0 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63  blish a read loc
137b0 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  k) before this o
137c0 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f  pcode is.** invo
137d0 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ked..*/.case OP_
137e0 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 20  VerifyCookie: { 
137f0 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68        /* no-push
13800 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
13810 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
13820 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
13830 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
13840 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 70 42 74 20  b->nDb );.  pBt 
13850 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
13860 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42  1].pBt;.  if( pB
13870 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
13880 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
13890 61 28 70 42 74 2c 20 31 2c 20 28 75 33 32 20 2a  a(pBt, 1, (u32 *
138a0 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73  )&iMeta);.  }els
138b0 65 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  e{.    rc = SQLI
138c0 54 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d 65 74 61  TE_OK;.    iMeta
138d0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
138e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
138f0 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20   iMeta!=pOp->p2 
13900 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
13910 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
13920 4d 73 67 2c 20 22 64 61 74 61 62 61 73 65 20 73  Msg, "database s
13930 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
13940 64 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  d", (char*)0);. 
13950 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
13960 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
13970 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
13980 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
13990 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
139a0 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  db);.    rc = SQ
139b0 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
139c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
139d0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
139e0 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
139f0 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
13a00 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
13a10 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
13a20 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
13a30 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
13a40 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
13a50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
13a60 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
13a70 61 6e 20 0a 2a 2a 20 69 6e 74 65 67 65 72 20 66  an .** integer f
13a80 72 6f 6d 20 74 68 65 20 74 6f 70 20 6f 66 20 74  rom the top of t
13a90 68 65 20 73 74 61 63 6b 2e 20 20 30 20 6d 65 61  he stack.  0 mea
13aa0 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
13ab0 62 61 73 65 20 61 6e 64 0a 2a 2a 20 31 20 6d 65  base and.** 1 me
13ac0 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
13ad0 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
13ae0 61 72 79 20 74 61 62 6c 65 73 2e 20 20 47 69 76  ary tables.  Giv
13af0 65 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 63 75  e the new .** cu
13b00 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
13b10 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
13b20 31 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  1 values need no
13b30 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 0a  t be contiguous.
13b40 2a 2a 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  ** but all P1 va
13b50 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
13b60 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 20 20  mall integers.  
13b70 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
13b80 6f 72 0a 2a 2a 20 50 31 20 74 6f 20 62 65 20 6e  or.** P1 to be n
13b90 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
13ba0 66 20 50 32 3d 3d 30 20 74 68 65 6e 20 74 61 6b  f P2==0 then tak
13bb0 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
13bc0 6e 75 6d 62 65 72 20 66 72 6f 6d 20 74 68 65 20  number from the 
13bd0 6e 65 78 74 20 6f 66 20 74 68 65 20 73 74 61 63  next of the stac
13be0 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  k..**.** There w
13bf0 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
13c00 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
13c10 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
13c20 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
13c30 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
13c40 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
13c50 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
13c60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
13c70 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
13c80 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
13c90 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
13ca0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
13cb0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
13cc0 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
13cd0 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
13ce0 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
13cf0 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
13d00 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
13d10 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
13d20 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
13d30 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
13d40 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
13d50 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
13d60 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
13d70 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
13d80 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
13d90 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
13da0 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
13db0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
13dc0 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
13dd0 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
13de0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
13df0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
13e00 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
13e10 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
13e20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61  the.** content a
13e30 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  nd collating seq
13e40 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73  uence of indices
13e50 2e 20 20 50 33 20 69 73 20 4e 55 4c 4c 20 66 6f  .  P3 is NULL fo
13e60 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61  r cursors.** tha
13e70 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69  t are not pointi
13e80 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a  ng to indices..*
13e90 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
13ea0 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f  enWrite..*/./* O
13eb0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
13ec0 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
13ed0 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
13ee0 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
13ef0 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
13f00 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
13f10 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
13f20 2e 20 20 49 66 20 50 32 3d 3d 30 20 74 68 65 6e  .  If P2==0 then
13f30 20 74 61 6b 65 20 74 68 65 20 72 6f 6f 74 20 70   take the root p
13f40 61 67 65 20 6e 75 6d 62 65 72 20 66 72 6f 6d 20  age number from 
13f50 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a  the stack..**.**
13f60 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
13f70 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
13f80 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
13f90 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
13fa0 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e  he.** content an
13fb0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  d collating sequ
13fc0 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73 2e  ence of indices.
13fd0 20 20 50 33 20 69 73 20 4e 55 4c 4c 20 66 6f 72    P3 is NULL for
13fe0 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74   cursors.** that
13ff0 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e   are not pointin
14000 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a  g to indices..**
14010 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
14020 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20  tion works just 
14030 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78  like OpenRead ex
14040 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
14050 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a  ns the cursor.**
14060 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d   in read/write m
14070 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65  ode.  For a give
14080 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63  n table, there c
14090 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  an be one or mor
140a0 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63  e read-only.** c
140b0 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67  ursors or a sing
140c0 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75  le read/write cu
140d0 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74  rsor but not bot
140e0 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
140f0 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63  o OpenRead..*/.c
14100 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
14110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d            /* no-
14120 70 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  push */.case OP_
14130 4f 70 65 6e 57 72 69 74 65 3a 20 7b 20 20 20 20  OpenWrite: {    
14140 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
14150 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
14160 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20 70  p1;.  int p2 = p
14170 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20 77 72  Op->p2;.  int wr
14180 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
14190 58 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  X;.  int iDb;.  
141a0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
141b0 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61 73  Db *pDb;.  .  as
141c0 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61  sert( pTos>=p->a
141d0 53 74 61 63 6b 20 29 3b 0a 20 20 73 71 6c 69 74  Stack );.  sqlit
141e0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
141f0 69 66 79 28 70 54 6f 73 29 3b 0a 20 20 69 44 62  ify(pTos);.  iDb
14200 20 3d 20 70 54 6f 73 2d 3e 69 3b 0a 20 20 61 73   = pTos->i;.  as
14210 73 65 72 74 28 20 28 70 54 6f 73 2d 3e 66 6c 61  sert( (pTos->fla
14220 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30  gs & MEM_Dyn)==0
14230 20 29 3b 0a 20 20 70 54 6f 73 2d 2d 3b 0a 20 20   );.  pTos--;.  
14240 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
14250 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
14260 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
14270 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
14280 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
14290 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
142a0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
142b0 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
142c0 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20     wrFlag = 1;. 
142d0 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
142e0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
142f0 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
14300 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
14310 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
14320 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
14330 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
14340 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
14350 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
14360 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 32   0;.  }.  if( p2
14370 3c 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  <=0 ){.    asser
14380 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61  t( pTos>=p->aSta
14390 63 6b 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ck );.    sqlite
143a0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
143b0 66 79 28 70 54 6f 73 29 3b 0a 20 20 20 20 70 32  fy(pTos);.    p2
143c0 20 3d 20 70 54 6f 73 2d 3e 69 3b 0a 20 20 20 20   = pTos->i;.    
143d0 61 73 73 65 72 74 28 20 28 70 54 6f 73 2d 3e 66  assert( (pTos->f
143e0 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
143f0 3d 30 20 29 3b 0a 20 20 20 20 70 54 6f 73 2d 2d  =0 );.    pTos--
14400 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
14410 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 61 73 73  >=2 );.  }.  ass
14420 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70  ert( i>=0 );.  p
14430 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
14440 72 73 6f 72 28 70 2c 20 69 2c 20 69 44 62 29 3b  rsor(p, i, iDb);
14450 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
14460 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
14470 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
14480 31 3b 0a 20 20 69 66 28 20 70 58 3d 3d 30 20 29  1;.  if( pX==0 )
14490 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 57 65 20   break;.  /* We 
144a0 61 6c 77 61 79 73 20 70 72 6f 76 69 64 65 20 61  always provide a
144b0 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
144c0 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  function.  If th
144d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 0a 20 20  e table being.  
144e0 2a 2a 20 6f 70 65 6e 65 64 20 69 73 20 6f 66 20  ** opened is of 
144f0 74 79 70 65 20 49 4e 54 4b 45 59 2c 20 74 68 65  type INTKEY, the
14500 20 63 6f 6d 70 61 72 69 73 69 6f 6e 20 66 75 6e   comparision fun
14510 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 69 67  ction will be ig
14520 6e 6f 72 65 64 2e 20 2a 2f 0a 20 20 72 63 20 3d  nored. */.  rc =
14530 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
14540 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c  sor(pX, p2, wrFl
14550 61 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73  ag,.           s
14560 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
14570 43 6f 6d 70 61 72 65 2c 20 70 4f 70 2d 3e 70 33  Compare, pOp->p3
14580 2c 0a 20 20 20 20 20 20 20 20 20 20 20 26 70 43  ,.           &pC
14590 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
145a0 69 66 28 20 70 4f 70 2d 3e 70 33 74 79 70 65 3d  if( pOp->p3type=
145b0 3d 50 33 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P3_KEYINFO ){. 
145c0 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66     pCur->pKeyInf
145d0 6f 20 3d 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f  o = (KeyInfo*)pO
145e0 70 2d 3e 70 33 3b 0a 20 20 20 20 70 43 75 72 2d  p->p3;.    pCur-
145f0 3e 70 49 6e 63 72 4b 65 79 20 3d 20 26 70 43 75  >pIncrKey = &pCu
14600 72 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 69 6e 63  r->pKeyInfo->inc
14610 72 4b 65 79 3b 0a 20 20 20 20 70 43 75 72 2d 3e  rKey;.    pCur->
14620 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
14630 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 7d 65  ENC(p->db);.  }e
14640 6c 73 65 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70  lse{.    pCur->p
14650 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 20  KeyInfo = 0;.   
14660 20 70 43 75 72 2d 3e 70 49 6e 63 72 4b 65 79 20   pCur->pIncrKey 
14670 3d 20 26 70 43 75 72 2d 3e 62 6f 67 75 73 49 6e  = &pCur->bogusIn
14680 63 72 4b 65 79 3b 0a 20 20 7d 0a 20 20 73 77 69  crKey;.  }.  swi
14690 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63  tch( rc ){.    c
146a0 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a  ase SQLITE_BUSY:
146b0 20 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d   {.      p->pc =
146c0 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63   pc;.      p->rc
146d0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
146e0 20 20 20 20 20 20 70 2d 3e 70 54 6f 73 20 3d 20        p->pTos = 
146f0 26 70 54 6f 73 5b 31 20 2b 20 28 70 4f 70 2d 3e  &pTos[1 + (pOp->
14700 70 32 3c 3d 30 29 5d 3b 20 2f 2a 20 4f 70 65 72  p2<=0)]; /* Oper
14710 61 6e 64 73 20 6d 75 73 74 20 72 65 6d 61 69 6e  ands must remain
14720 20 6f 6e 20 73 74 61 63 6b 20 2a 2f 0a 20 20 20   on stack */.   
14730 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
14740 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20 20  _BUSY;.    }.   
14750 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a   case SQLITE_OK:
14760 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 66 6c 61   {.      int fla
14770 67 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  gs = sqlite3Btre
14780 65 46 6c 61 67 73 28 70 43 75 72 2d 3e 70 43 75  eFlags(pCur->pCu
14790 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 2f 2a 20  rsor);.      /* 
147a0 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 2e  Sanity checking.
147b0 20 20 4f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72    Only the lower
147c0 20 66 6f 75 72 20 62 69 74 73 20 6f 66 20 74 68   four bits of th
147d0 65 20 66 6c 61 67 73 20 62 79 74 65 20 73 68 6f  e flags byte sho
147e0 75 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62 65 20  uld.      ** be 
147f0 75 73 65 64 2e 20 20 42 69 74 20 33 20 28 6d 61  used.  Bit 3 (ma
14800 73 6b 20 30 78 30 38 29 20 69 73 20 75 6e 70 72  sk 0x08) is unpr
14810 65 64 69 74 61 62 6c 65 2e 20 20 54 68 65 20 6c  editable.  The l
14820 6f 77 65 72 20 33 20 62 69 74 73 0a 20 20 20 20  ower 3 bits.    
14830 20 20 2a 2a 20 28 6d 61 73 6b 20 30 78 30 37 29    ** (mask 0x07)
14840 20 73 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65   should be eithe
14850 72 20 35 20 28 69 6e 74 6b 65 79 2b 6c 65 61 66  r 5 (intkey+leaf
14860 64 61 74 61 20 66 6f 72 20 74 61 62 6c 65 73 29  data for tables)
14870 20 6f 72 0a 20 20 20 20 20 20 2a 2a 20 32 20 28   or.      ** 2 (
14880 7a 65 72 6f 64 61 74 61 20 66 6f 72 20 69 6e 64  zerodata for ind
14890 69 63 65 73 29 2e 20 20 49 66 20 74 68 65 73 65  ices).  If these
148a0 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 20   conditions are 
148b0 6e 6f 74 20 6d 65 74 20 69 74 20 63 61 6e 0a 20  not met it can. 
148c0 20 20 20 20 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61       ** only mea
148d0 6e 20 74 68 61 74 20 77 65 20 61 72 65 20 64 65  n that we are de
148e0 61 6c 69 6e 67 20 77 69 74 68 20 61 20 63 6f 72  aling with a cor
148f0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69  rupt database fi
14900 6c 65 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  le.      */.    
14910 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 30    if( (flags & 0
14920 78 66 30 29 21 3d 30 20 7c 7c 20 28 28 66 6c 61  xf0)!=0 || ((fla
14930 67 73 20 26 20 30 78 30 37 29 21 3d 35 20 26 26  gs & 0x07)!=5 &&
14940 20 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21   (flags & 0x07)!
14950 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  =2) ){.        r
14960 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
14970 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
14980 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14990 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
149a0 7d 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  }.      pCur->is
149b0 54 61 62 6c 65 20 3d 20 28 66 6c 61 67 73 20 26  Table = (flags &
149c0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d   BTREE_INTKEY)!=
149d0 30 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69  0;.      pCur->i
149e0 73 49 6e 64 65 78 20 3d 20 28 66 6c 61 67 73 20  sIndex = (flags 
149f0 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  & BTREE_ZERODATA
14a00 29 21 3d 30 3b 0a 20 20 20 20 20 20 2f 2a 20 49  )!=0;.      /* I
14a10 66 20 50 33 3d 3d 30 20 69 74 20 6d 65 61 6e 73  f P3==0 it means
14a20 20 77 65 20 61 72 65 20 65 78 70 65 63 74 65 64   we are expected
14a30 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c 65   to open a table
14a40 2e 20 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e  .  If P3!=0 then
14a50 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78 70  .      ** we exp
14a60 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69 6e  ect to be openin
14a70 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  g an index.  If 
14a80 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61 74  this is not what
14a90 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20 20   happened,.     
14aa0 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61 74   ** then the dat
14ab0 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
14ac0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14ad0 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61 62  if( (pCur->isTab
14ae0 6c 65 20 26 26 20 70 4f 70 2d 3e 70 33 74 79 70  le && pOp->p3typ
14af0 65 3d 3d 50 33 5f 4b 45 59 49 4e 46 4f 29 0a 20  e==P3_KEYINFO). 
14b00 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d 3e        || (pCur->
14b10 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d 3e  isIndex && pOp->
14b20 70 33 74 79 70 65 21 3d 50 33 5f 4b 45 59 49 4e  p3type!=P3_KEYIN
14b30 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  FO) ){.        r
14b40 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
14b50 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
14b60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14b70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
14b80 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
14b90 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
14ba0 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20 20  LITE_EMPTY: {.  
14bb0 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c      pCur->isTabl
14bc0 65 20 3d 20 70 4f 70 2d 3e 70 33 74 79 70 65 21  e = pOp->p3type!
14bd0 3d 50 33 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 20  =P3_KEYINFO;.   
14be0 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78     pCur->isIndex
14bf0 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
14c00 65 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e;.      rc = SQ
14c10 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62  LITE_OK;.      b
14c20 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
14c30 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
14c40 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14c50 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
14c60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
14c70 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
14c80 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 50  phemeral P1 P2 P
14c90 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  3.**.** Open a n
14ca0 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
14cb0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
14cc0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
14cd0 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
14ce0 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
14cf0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
14d00 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
14d10 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72  ad-only.  The tr
14d20 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72 74 75  ansient or virtu
14d30 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
14d40 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
14d50 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
14d60 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
14d70 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
14d80 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
14d90 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
14da0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
14db0 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
14dc0 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
14dd0 20 50 33 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P3==0 and to a 
14de0 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
14df0 66 20 50 33 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P3 is not 0.  
14e00 49 66 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  If P3 is not NUL
14e10 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
14e20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
14e30 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
14e40 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
14e50 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
14e60 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  dex..**.** This 
14e70 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20  opcode was once 
14e80 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e  called OpenTemp.
14e90 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74    But that creat
14ea0 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20  ed.** confusion 
14eb0 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d  because the term
14ec0 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d   "temp table", m
14ed0 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65  ight refer eithe
14ee0 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74  r.** to a TEMP t
14ef0 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20  able at the SQL 
14f00 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74  level, or to a t
14f10 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a  able opened by.*
14f20 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
14f30 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  Then this opcode
14f40 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69   was call OpenVi
14f50 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74  rtual.  But.** t
14f60 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66  hat created conf
14f70 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77  usion with the w
14f80 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62  hole virtual-tab
14f90 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65  le idea..*/.case
14fa0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
14fb0 6c 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6e 6f  l: {       /* no
14fc0 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20 69  -push */.  int i
14fd0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75   = pOp->p1;.  Cu
14fe0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 61 73 73  rsor *pCx;.  ass
14ff0 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70  ert( i>=0 );.  p
15000 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
15010 73 6f 72 28 70 2c 20 69 2c 20 2d 31 29 3b 0a 20  sor(p, i, -1);. 
15020 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
15030 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
15040 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
15050 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15060 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c  eeFactory(db, 0,
15070 20 31 2c 20 54 45 4d 50 5f 50 41 47 45 53 2c 20   1, TEMP_PAGES, 
15080 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20 69 66  &pCx->pBt);.  if
15090 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
150a0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
150b0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
150c0 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
150d0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
150e0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
150f0 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
15100 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
15110 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
15120 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
15130 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
15140 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
15150 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  the BTREE_ZERODA
15160 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  TA flag before. 
15170 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
15180 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
15190 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
151a0 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
151b0 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
151c0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
151d0 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
151e0 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45 59 20  ge 1 (an INTKEY 
151f0 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
15200 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
15210 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
15220 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
15230 70 4f 70 2d 3e 70 33 74 79 70 65 3d 3d 50 33 5f  pOp->p3type==P3_
15240 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
15250 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15260 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
15270 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
15280 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20  TREE_ZERODATA); 
15290 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
152a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
152b0 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f      assert( pgno
152c0 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
152d0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
152e0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
152f0 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e  or(pCx->pBt, pgn
15300 6f 2c 20 31 2c 20 73 71 6c 69 74 65 33 56 64 62  o, 1, sqlite3Vdb
15310 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 2c 0a  eRecordCompare,.
15320 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d              pOp-
15330 3e 70 33 2c 20 26 70 43 78 2d 3e 70 43 75 72 73  >p3, &pCx->pCurs
15340 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78  or);.        pCx
15350 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 28 4b 65  ->pKeyInfo = (Ke
15360 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 33 3b 0a  yInfo*)pOp->p3;.
15370 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
15380 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
15390 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 20  (p->db);.       
153a0 20 70 43 78 2d 3e 70 49 6e 63 72 4b 65 79 20 3d   pCx->pIncrKey =
153b0 20 26 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d   &pCx->pKeyInfo-
153c0 3e 69 6e 63 72 4b 65 79 3b 0a 20 20 20 20 20 20  >incrKey;.      
153d0 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
153e0 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
153f0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
15400 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
15410 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53  or(pCx->pBt, MAS
15420 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20  TER_ROOT, 1, 0, 
15430 30 2c 20 26 70 43 78 2d 3e 70 43 75 72 73 6f 72  0, &pCx->pCursor
15440 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
15450 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 20  Table = 1;.     
15460 20 70 43 78 2d 3e 70 49 6e 63 72 4b 65 79 20 3d   pCx->pIncrKey =
15470 20 26 70 43 78 2d 3e 62 6f 67 75 73 49 6e 63 72   &pCx->bogusIncr
15480 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  Key;.    }.  }. 
15490 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 70   pCx->nField = p
154a0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
154b0 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69  sIndex = !pCx->i
154c0 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b  sTable;.  break;
154d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
154e0 70 65 6e 50 73 65 75 64 6f 20 50 31 20 2a 20 2a  penPseudo P1 * *
154f0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
15500 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
15510 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
15520 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
15530 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
15540 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 41 6e 79  ow of data.  Any
15550 20 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74   attempt to writ
15560 65 20 61 20 73 65 63 6f 6e 64 20 72 6f 77 20 6f  e a second row o
15570 66 20 64 61 74 61 20 63 61 75 73 65 73 20 74 68  f data causes th
15580 65 0a 2a 2a 20 66 69 72 73 74 20 72 6f 77 20 74  e.** first row t
15590 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 20 20 41  o be deleted.  A
155a0 6c 6c 20 64 61 74 61 20 69 73 20 64 65 6c 65 74  ll data is delet
155b0 65 64 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ed when the curs
155c0 6f 72 20 69 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e  or is.** closed.
155d0 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d  .**.** A pseudo-
155e0 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79  table created by
155f0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
15600 75 73 65 66 75 6c 20 66 6f 72 20 68 6f 6c 64 69  useful for holdi
15610 6e 67 20 74 68 65 0a 2a 2a 20 4e 45 57 20 6f 72  ng the.** NEW or
15620 20 4f 4c 44 20 74 61 62 6c 65 73 20 69 6e 20 61   OLD tables in a
15630 20 74 72 69 67 67 65 72 2e 20 20 41 6c 73 6f 20   trigger.  Also 
15640 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
15650 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
15660 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65   output from the
15670 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20   sorter so that 
15680 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64  the row can be d
15690 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a  ecomposed into.*
156a0 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c  * individual col
156b0 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f  umns using the O
156c0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
156d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
156e0 50 73 65 75 64 6f 3a 20 7b 20 20 20 20 20 20 20  Pseudo: {       
156f0 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
15700 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
15710 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  .  Cursor *pCx;.
15720 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
15730 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
15740 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 2d  teCursor(p, i, -
15750 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
15760 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
15770 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
15780 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
15790 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  oTable = 1;.  pC
157a0 78 2d 3e 70 49 6e 63 72 4b 65 79 20 3d 20 26 70  x->pIncrKey = &p
157b0 43 78 2d 3e 62 6f 67 75 73 49 6e 63 72 4b 65 79  Cx->bogusIncrKey
157c0 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
157d0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
157e0 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61  ndex = 0;.  brea
157f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15800 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 0a 2a 2a   Close P1 * *.**
15810 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
15820 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
15830 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
15840 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
15850 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
15860 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
15870 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
15880 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 20 20 20  e OP_Close: {   
15890 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a      /* no-push *
158a0 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
158b0 3e 70 31 3b 0a 20 20 69 66 28 20 69 3e 3d 30 20  >p1;.  if( i>=0 
158c0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
158d0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
158e0 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
158f0 70 2d 3e 61 70 43 73 72 5b 69 5d 29 3b 0a 20 20  p->apCsr[i]);.  
15900 20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 20 3d 20    p->apCsr[i] = 
15910 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
15920 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
15930 76 65 47 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  veGe P1 P2 *.**.
15940 2a 2a 20 50 6f 70 20 74 68 65 20 74 6f 70 20 6f  ** Pop the top o
15950 66 20 74 68 65 20 73 74 61 63 6b 20 61 6e 64 20  f the stack and 
15960 75 73 65 20 69 74 73 20 76 61 6c 75 65 20 61 73  use its value as
15970 20 61 20 6b 65 79 2e 20 20 52 65 70 6f 73 69 74   a key.  Reposit
15980 69 6f 6e 0a 2a 2a 20 63 75 72 73 6f 72 20 50 31  ion.** cursor P1
15990 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
159a0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
159b0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 69 73  st entry that is
159c0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
159d0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
159e0 20 6b 65 79 20 74 68 61 74 20 77 61 73 20 70 6f   key that was po
159f0 70 70 65 64 20 66 66 72 6f 6d 20 74 68 65 20 73  pped ffrom the s
15a00 74 61 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 65 72  tack..** If ther
15a10 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
15a20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
15a30 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
15a40 79 20 61 6e 64 20 50 32 20 0a 2a 2a 20 69 73 20  y and P2 .** is 
15a50 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
15a60 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
15a70 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
15a80 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
15a90 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20 4d 6f  inct, MoveLt, Mo
15aa0 76 65 47 74 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a  veGt, MoveLe.*/.
15ab0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 47  /* Opcode: MoveG
15ac0 74 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  t P1 P2 *.**.** 
15ad0 50 6f 70 20 74 68 65 20 74 6f 70 20 6f 66 20 74  Pop the top of t
15ae0 68 65 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65  he stack and use
15af0 20 69 74 73 20 76 61 6c 75 65 20 61 73 20 61 20   its value as a 
15b00 6b 65 79 2e 20 20 52 65 70 6f 73 69 74 69 6f 6e  key.  Reposition
15b10 0a 2a 2a 20 63 75 72 73 6f 72 20 50 31 20 73 6f  .** cursor P1 so
15b20 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
15b30 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
15b40 65 6e 74 72 79 20 74 68 61 74 20 69 73 20 67 72  entry that is gr
15b50 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 74 68  eater.** than th
15b60 65 20 6b 65 79 20 66 72 6f 6d 20 74 68 65 20 73  e key from the s
15b70 74 61 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 65 72  tack..** If ther
15b80 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
15b90 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
15ba0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
15bb0 6e 6f 74 20 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  not zero,.** the
15bc0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
15bd0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
15be0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
15bf0 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c  istinct, MoveLt,
15c00 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65 0a   MoveGe, MoveLe.
15c10 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  */./* Opcode: Mo
15c20 76 65 4c 74 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  veLt P1 P2 *.**.
15c30 2a 2a 20 50 6f 70 20 74 68 65 20 74 6f 70 20 6f  ** Pop the top o
15c40 66 20 74 68 65 20 73 74 61 63 6b 20 61 6e 64 20  f the stack and 
15c50 75 73 65 20 69 74 73 20 76 61 6c 75 65 20 61 73  use its value as
15c60 20 61 20 6b 65 79 2e 20 20 52 65 70 6f 73 69 74   a key.  Reposit
15c70 69 6f 6e 0a 2a 2a 20 63 75 72 73 6f 72 20 50 31  ion.** cursor P1
15c80 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
15c90 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
15ca0 74 20 65 6e 74 72 79 20 74 68 61 74 20 69 73 20  t entry that is 
15cb0 6c 65 73 73 0a 2a 2a 20 74 68 61 6e 20 74 68 65  less.** than the
15cc0 20 6b 65 79 20 66 72 6f 6d 20 74 68 65 20 73 74   key from the st
15cd0 61 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  ack..** If there
15ce0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
15cf0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
15d00 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
15d10 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6a 75  zero,.** then ju
15d20 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
15d30 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
15d40 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
15d50 6e 63 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f 76  nct, MoveGt, Mov
15d60 65 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f  eGe, MoveLe.*/./
15d70 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 4c 65  * Opcode: MoveLe
15d80 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 50   P1 P2 *.**.** P
15d90 6f 70 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  op the top of th
15da0 65 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 20  e stack and use 
15db0 69 74 73 20 76 61 6c 75 65 20 61 73 20 61 20 6b  its value as a k
15dc0 65 79 2e 20 20 52 65 70 6f 73 69 74 69 6f 6e 0a  ey.  Reposition.
15dd0 2a 2a 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ** cursor P1 so 
15de0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
15df0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
15e00 74 72 79 20 74 68 61 74 20 69 73 20 6c 65 73 73  try that is less
15e10 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 65 71 75 61   than.** or equa
15e20 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 74 68 61  l to the key tha
15e30 74 20 77 61 73 20 70 6f 70 70 65 64 20 66 72 6f  t was popped fro
15e40 6d 20 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 20  m the stack..** 
15e50 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
15e60 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
15e70 6e 20 6f 72 20 65 71 61 6c 20 74 6f 20 74 68 65  n or eqal to the
15e80 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
15e90 6f 74 20 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  ot zero,.** then
15ea0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
15eb0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
15ec0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
15ed0 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74 2c 20  stinct, MoveGt, 
15ee0 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 74 0a 2a  MoveGe, MoveLt.*
15ef0 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 4c 74  /.case OP_MoveLt
15f00 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d  :         /* no-
15f10 70 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  push */.case OP_
15f20 4d 6f 76 65 4c 65 3a 20 20 20 20 20 20 20 20 20  MoveLe:         
15f30 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 63 61  /* no-push */.ca
15f40 73 65 20 4f 50 5f 4d 6f 76 65 47 65 3a 20 20 20  se OP_MoveGe:   
15f50 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68        /* no-push
15f60 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65   */.case OP_Move
15f70 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6e  Gt: {       /* n
15f80 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20  o-push */.  int 
15f90 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43  i = pOp->p1;.  C
15fa0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
15fb0 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61  sert( pTos>=p->a
15fc0 53 74 61 63 6b 20 29 3b 0a 20 20 61 73 73 65 72  Stack );.  asser
15fd0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
15fe0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
15ff0 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
16000 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
16010 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
16020 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  sor!=0 ){.    in
16030 74 20 72 65 73 2c 20 6f 63 3b 0a 20 20 20 20 6f  t res, oc;.    o
16040 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
16050 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
16060 20 3d 20 30 3b 0a 20 20 20 20 2a 70 43 2d 3e 70   = 0;.    *pC->p
16070 49 6e 63 72 4b 65 79 20 3d 20 6f 63 3d 3d 4f 50  IncrKey = oc==OP
16080 5f 4d 6f 76 65 47 74 20 7c 7c 20 6f 63 3d 3d 4f  _MoveGt || oc==O
16090 50 5f 4d 6f 76 65 4c 65 3b 0a 20 20 20 20 69 66  P_MoveLe;.    if
160a0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
160b0 0a 20 20 20 20 20 20 69 36 34 20 69 4b 65 79 3b  .      i64 iKey;
160c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
160d0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
160e0 70 54 6f 73 29 3b 0a 20 20 20 20 20 20 69 4b 65  pTos);.      iKe
160f0 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70 54 6f  y = intToKey(pTo
16100 73 2d 3e 69 29 3b 0a 20 20 20 20 20 20 69 66 28  s->i);.      if(
16110 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 26 26 20 70   pOp->p2==0 && p
16120 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d  Op->opcode==OP_M
16130 6f 76 65 47 65 20 29 7b 0a 20 20 20 20 20 20 20  oveGe ){.       
16140 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
16150 74 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20  t = iKey;.      
16160 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
16170 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20  veto = 1;.      
16180 20 20 61 73 73 65 72 74 28 20 28 70 54 6f 73 2d    assert( (pTos-
16190 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
161a0 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  )==0 );.        
161b0 70 54 6f 73 2d 2d 3b 0a 20 20 20 20 20 20 20 20  pTos--;.        
161c0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
161d0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
161e0 33 42 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 2d  3BtreeMoveto(pC-
161f0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
16200 34 29 69 4b 65 79 2c 20 26 72 65 73 29 3b 0a 20  4)iKey, &res);. 
16210 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16220 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16230 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
16240 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16250 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61 73   }.      pC->las
16260 74 52 6f 77 69 64 20 3d 20 70 54 6f 73 2d 3e 69  tRowid = pTos->i
16270 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  ;.      pC->rowi
16280 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
16290 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
162a0 20 20 20 20 61 73 73 65 72 74 28 20 70 54 6f 73      assert( pTos
162b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
162c0 6f 62 20 29 3b 0a 20 20 20 20 20 20 2f 2a 20 53  ob );.      /* S
162d0 74 72 69 6e 67 69 66 79 28 70 54 6f 73 2c 20 65  tringify(pTos, e
162e0 6e 63 6f 64 69 6e 67 29 3b 20 2a 2f 0a 20 20 20  ncoding); */.   
162f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16300 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 2d 3e 70  treeMoveto(pC->p
16310 43 75 72 73 6f 72 2c 20 70 54 6f 73 2d 3e 7a 2c  Cursor, pTos->z,
16320 20 70 54 6f 73 2d 3e 6e 2c 20 26 72 65 73 29 3b   pTos->n, &res);
16330 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
16340 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
16350 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
16360 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
16370 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
16380 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
16390 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
163a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
163b0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
163c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
163d0 54 41 4c 45 3b 0a 20 20 20 20 2a 70 43 2d 3e 70  TALE;.    *pC->p
163e0 49 6e 63 72 4b 65 79 20 3d 20 30 3b 0a 23 69 66  IncrKey = 0;.#if
163f0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
16400 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
16410 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
16420 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f  if.    if( oc==O
16430 50 5f 4d 6f 76 65 47 65 20 7c 7c 20 6f 63 3d 3d  P_MoveGe || oc==
16440 4f 50 5f 4d 6f 76 65 47 74 20 29 7b 0a 20 20 20  OP_MoveGt ){.   
16450 20 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a     if( res<0 ){.
16460 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
16470 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
16480 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
16490 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
164a0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
164b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
164c0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
164d0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
164e0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
164f0 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
16500 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
16510 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
16520 72 74 28 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c  rt( oc==OP_MoveL
16530 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65  t || oc==OP_Move
16540 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
16550 72 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  res>=0 ){.      
16560 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16570 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
16580 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
16590 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
165a0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
165b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
165c0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
165d0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
165e0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
165f0 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d          /* res m
16600 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
16610 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
16620 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
16630 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a  eck to.        *
16640 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
16650 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
16660 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65     */.        re
16670 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
16680 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
16690 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
166a0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
166b0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32       if( pOp->p2
166c0 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  >0 ){.        pc
166d0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
166e0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
166f0 20 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77       pC->nullRow
16700 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
16710 20 20 7d 0a 20 20 7d 0a 20 20 52 65 6c 65 61 73    }.  }.  Releas
16720 65 28 70 54 6f 73 29 3b 0a 20 20 70 54 6f 73 2d  e(pTos);.  pTos-
16730 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  -;.  break;.}../
16740 2a 20 4f 70 63 6f 64 65 3a 20 44 69 73 74 69 6e  * Opcode: Distin
16750 63 74 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a  ct P1 P2 *.**.**
16760 20 55 73 65 20 74 68 65 20 74 6f 70 20 6f 66 20   Use the top of 
16770 74 68 65 20 73 74 61 63 6b 20 61 73 20 61 20 72  the stack as a r
16780 65 63 6f 72 64 20 63 72 65 61 74 65 64 20 75 73  ecord created us
16790 69 6e 67 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20  ing MakeRecord. 
167a0 20 50 31 20 69 73 20 61 0a 2a 2a 20 63 75 72 73   P1 is a.** curs
167b0 6f 72 20 6f 6e 20 61 20 74 61 62 6c 65 20 74 68  or on a table th
167c0 61 74 20 64 65 63 6c 61 72 65 64 20 61 73 20 61  at declared as a
167d0 6e 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 61  n index.  If tha
167e0 74 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  t table contains
167f0 20 61 6e 0a 2a 2a 20 65 6e 74 72 79 20 74 68 61   an.** entry tha
16800 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 74 6f  t matches the to
16810 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 66  p of the stack f
16820 61 6c 6c 20 74 68 72 75 2e 20 20 49 66 20 74 68  all thru.  If th
16830 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
16840 63 6b 0a 2a 2a 20 6d 61 74 63 68 65 73 20 6e 6f  ck.** matches no
16850 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
16860 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
16870 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
16880 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
16890 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
168a0 65 6e 74 72 79 20 69 66 20 69 74 20 65 78 69 73  entry if it exis
168b0 74 73 2e 20 20 54 68 65 0a 2a 2a 20 72 65 63 6f  ts.  The.** reco
168c0 72 64 20 6f 6e 20 74 68 65 20 74 6f 70 20 6f 66  rd on the top of
168d0 20 74 68 65 20 73 74 61 63 6b 20 69 73 20 6e 6f   the stack is no
168e0 74 20 70 6f 70 70 65 64 2e 0a 2a 2a 0a 2a 2a 20  t popped..**.** 
168f0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
16900 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4e   is similar to N
16910 6f 74 46 6f 75 6e 64 20 65 78 63 65 70 74 20 74  otFound except t
16920 68 61 74 20 74 68 69 73 20 6f 70 65 72 61 74 69  hat this operati
16930 6f 6e 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 70  on.** does not p
16940 6f 70 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  op the key from 
16950 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a  the stack..**.**
16960 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   The instruction
16970 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
16980 65 6d 65 6e 74 20 74 68 65 20 44 49 53 54 49 4e  ement the DISTIN
16990 43 54 20 6f 70 65 72 61 74 6f 72 20 6f 6e 20 53  CT operator on S
169a0 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d 65  ELECT.** stateme
169b0 6e 74 73 2e 20 20 54 68 65 20 50 31 20 74 61 62  nts.  The P1 tab
169c0 6c 65 20 69 73 20 6e 6f 74 20 61 20 74 72 75 65  le is not a true
169d0 20 69 6e 64 65 78 20 62 75 74 20 72 61 74 68 65   index but rathe
169e0 72 20 61 20 72 65 63 6f 72 64 20 6f 66 0a 2a 2a  r a record of.**
169f0 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 68 61   all results tha
16a00 74 20 68 61 76 65 20 70 72 6f 64 75 63 65 64 20  t have produced 
16a10 73 6f 20 66 61 72 2e 20 20 0a 2a 2a 0a 2a 2a 20  so far.  .**.** 
16a20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
16a30 20 4e 6f 74 46 6f 75 6e 64 2c 20 4d 6f 76 65 54   NotFound, MoveT
16a40 6f 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74  o, IsUnique, Not
16a50 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63  Exists.*/./* Opc
16a60 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
16a70 20 2a 0a 2a 2a 0a 2a 2a 20 54 6f 70 20 6f 66 20   *.**.** Top of 
16a80 74 68 65 20 73 74 61 63 6b 20 68 6f 6c 64 73 20  the stack holds 
16a90 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
16aa0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
16ab0 2e 20 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  .  P1 is an inde
16ac0 78 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72  x..** If an entr
16ad0 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  y that matches t
16ae0 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74  he top of the st
16af0 61 63 6b 20 65 78 69 73 74 73 20 69 6e 20 50 31  ack exists in P1
16b00 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
16b10 20 50 32 2e 20 20 49 66 20 74 68 65 20 74 6f 70   P2.  If the top
16b20 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 64 6f   of the stack do
16b30 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
16b40 20 65 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a 20   entry in P1.** 
16b50 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20  then fall thru. 
16b60 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   The P1 cursor i
16b70 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
16b80 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
16b90 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69 74 20 65  entry.** if it e
16ba0 78 69 73 74 73 2e 20 20 54 68 65 20 62 6c 6f 62  xists.  The blob
16bb0 20 69 73 20 70 6f 70 70 65 64 20 6f 66 66 20 74   is popped off t
16bc0 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74  he top of the st
16bd0 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ack..**.** This 
16be0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 75  instruction is u
16bf0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
16c00 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72   the IN operator
16c10 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65   where the.** le
16c20 66 74 2d 68 61 6e 64 20 73 69 64 65 20 69 73 20  ft-hand side is 
16c30 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16c40 6e 74 2e 20 20 50 31 20 69 73 20 6e 6f 74 20 61  nt.  P1 is not a
16c50 20 74 72 75 65 20 69 6e 64 65 78 20 62 75 74 0a   true index but.
16c60 2a 2a 20 69 73 20 69 6e 73 74 65 61 64 20 61 20  ** is instead a 
16c70 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
16c80 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72  that holds the r
16c90 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45  esults of the SE
16ca0 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LECT.** statemen
16cb0 74 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  t.  This instruc
16cc0 74 69 6f 6e 20 6a 75 73 74 20 63 68 65 63 6b 73  tion just checks
16cd0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 6c   to see if the l
16ce0 65 66 74 2d 68 61 6e 64 20 73 69 64 65 0a 2a 2a  eft-hand side.**
16cf0 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72 61   of the IN opera
16d00 74 6f 72 20 28 73 74 6f 72 65 64 20 6f 6e 20 74  tor (stored on t
16d10 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74  he top of the st
16d20 61 63 6b 29 20 65 78 69 73 74 73 20 69 6e 20 74  ack) exists in t
16d30 68 65 0a 2a 2a 20 72 65 73 75 6c 74 20 6f 66 20  he.** result of 
16d40 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
16d50 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ment..**.** See 
16d60 61 6c 73 6f 3a 20 44 69 73 74 69 6e 63 74 2c 20  also: Distinct, 
16d70 4e 6f 74 46 6f 75 6e 64 2c 20 4d 6f 76 65 54 6f  NotFound, MoveTo
16d80 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45  , IsUnique, NotE
16d90 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  xists.*/./* Opco
16da0 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
16db0 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  P2 *.**.** The t
16dc0 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20  op of the stack 
16dd0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
16de0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
16df0 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73 0a 2a  Record.  P1 is.*
16e00 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  * an index.  If 
16e10 6e 6f 20 65 6e 74 72 79 20 65 78 69 73 74 73 20  no entry exists 
16e20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63 68  in P1 that match
16e30 65 73 20 74 68 65 20 62 6c 6f 62 20 74 68 65 6e  es the blob then
16e40 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
16e50 20 49 66 20 61 6e 20 65 6e 74 72 79 20 64 6f 65   If an entry doe
16e60 73 20 65 78 69 73 74 69 6e 67 2c 20 66 61 6c 6c  s existing, fall
16e70 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63   through.  The c
16e80 75 72 73 6f 72 20 69 73 20 6c 65 66 74 0a 2a 2a  ursor is left.**
16e90 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
16ea0 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
16eb0 68 65 73 2e 20 20 54 68 65 20 62 6c 6f 62 20 69  hes.  The blob i
16ec0 73 20 70 6f 70 70 65 64 20 66 72 6f 6d 20 74 68  s popped from th
16ed0 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54  e stack..**.** T
16ee0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
16ef0 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61  tween this opera
16f00 74 69 6f 6e 20 61 6e 64 20 44 69 73 74 69 6e 63  tion and Distinc
16f10 74 20 69 73 20 74 68 61 74 0a 2a 2a 20 44 69 73  t is that.** Dis
16f20 74 69 6e 63 74 20 64 6f 65 73 20 6e 6f 74 20 70  tinct does not p
16f30 6f 70 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  op the key from 
16f40 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a  the stack..**.**
16f50 20 53 65 65 20 61 6c 73 6f 3a 20 44 69 73 74 69   See also: Disti
16f60 6e 63 74 2c 20 46 6f 75 6e 64 2c 20 4d 6f 76 65  nct, Found, Move
16f70 54 6f 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49  To, NotExists, I
16f80 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20  sUnique.*/.case 
16f90 4f 50 5f 44 69 73 74 69 6e 63 74 3a 20 20 20 20  OP_Distinct:    
16fa0 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
16fb0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
16fc0 64 3a 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70  d:       /* no-p
16fd0 75 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  ush */.case OP_F
16fe0 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
16ff0 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69  * no-push */.  i
17000 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
17010 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
17020 73 74 73 20 3d 20 30 3b 0a 20 20 43 75 72 73 6f  sts = 0;.  Curso
17030 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
17040 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b   pTos>=p->aStack
17050 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e   );.  assert( i>
17060 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
17070 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
17080 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
17090 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d  ;.  if( (pC = p-
170a0 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
170b0 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  sor!=0 ){.    in
170c0 74 20 72 65 73 2c 20 72 78 3b 0a 20 20 20 20 61  t res, rx;.    a
170d0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
170e0 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 53 74 72  le==0 );.    Str
170f0 69 6e 67 69 66 79 28 70 54 6f 73 2c 20 65 6e 63  ingify(pTos, enc
17100 6f 64 69 6e 67 29 3b 0a 20 20 20 20 72 78 20 3d  oding);.    rx =
17110 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
17120 65 74 6f 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  eto(pC->pCursor,
17130 20 70 54 6f 73 2d 3e 7a 2c 20 70 54 6f 73 2d 3e   pTos->z, pTos->
17140 6e 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 61 6c  n, &res);.    al
17150 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 72 78  readyExists = rx
17160 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
17170 65 73 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 64  es==0;.    pC->d
17180 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
17190 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
171a0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
171b0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
171c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
171d0 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28  Found ){.    if(
171e0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
171f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
17200 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
17210 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
17220 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
17230 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28  2 - 1;.  }.  if(
17240 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
17250 5f 44 69 73 74 69 6e 63 74 20 29 7b 0a 20 20 20  _Distinct ){.   
17260 20 52 65 6c 65 61 73 65 28 70 54 6f 73 29 3b 0a   Release(pTos);.
17270 20 20 20 20 70 54 6f 73 2d 2d 3b 0a 20 20 7d 0a      pTos--;.  }.
17280 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17290 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20  pcode: IsUnique 
172a0 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  P1 P2 *.**.** Th
172b0 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
172c0 63 6b 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ck is an integer
172d0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
172e0 20 43 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 72 65   Call this.** re
172f0 63 6f 72 64 20 6e 75 6d 62 65 72 20 52 2e 20 20  cord number R.  
17300 54 68 65 20 6e 65 78 74 20 6f 6e 20 74 68 65 20  The next on the 
17310 73 74 61 63 6b 20 69 73 20 61 6e 20 69 6e 64 65  stack is an inde
17320 78 20 6b 65 79 20 63 72 65 61 74 65 64 0a 2a 2a  x key created.**
17330 20 75 73 69 6e 67 20 4d 61 6b 65 49 64 78 52 65   using MakeIdxRe
17340 63 2e 20 20 43 61 6c 6c 20 69 74 20 4b 2e 20 20  c.  Call it K.  
17350 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
17360 20 70 6f 70 73 20 52 20 66 72 6f 6d 20 74 68 65   pops R from the
17370 0a 2a 2a 20 73 74 61 63 6b 20 62 75 74 20 69 74  .** stack but it
17380 20 6c 65 61 76 65 73 20 4b 20 75 6e 63 68 61 6e   leaves K unchan
17390 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ged..**.** P1 is
173a0 20 61 6e 20 69 6e 64 65 78 2e 20 20 53 6f 20 69   an index.  So i
173b0 74 20 68 61 73 20 6e 6f 20 64 61 74 61 20 61 6e  t has no data an
173c0 64 20 69 74 73 20 6b 65 79 20 63 6f 6e 73 69 73  d its key consis
173d0 74 73 20 6f 66 20 61 0a 2a 2a 20 72 65 63 6f 72  ts of a.** recor
173e0 64 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f  d generated by O
173f0 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65  P_MakeRecord whe
17400 72 65 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  re the last fiel
17410 64 20 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77  d is the .** row
17420 69 64 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  id of the entry 
17430 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 72  that the index r
17440 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 20 0a 2a 2a  efers to..** .**
17450 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
17460 6e 20 61 73 6b 73 20 69 66 20 74 68 65 72 65 20  n asks if there 
17470 69 73 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50  is an entry in P
17480 31 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 66  1 where the.** f
17490 69 65 6c 64 73 20 6d 61 74 63 68 65 73 20 4b 20  ields matches K 
174a0 62 75 74 20 74 68 65 20 72 6f 77 69 64 20 69 73  but the rowid is
174b0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
174c0 52 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  R..** If there i
174d0 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c  s no such entry,
174e0 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 61   then there is a
174f0 6e 20 69 6d 6d 65 64 69 61 74 65 0a 2a 2a 20 6a  n immediate.** j
17500 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ump to P2.  If a
17510 6e 79 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78  ny entry does ex
17520 69 73 74 20 77 68 65 72 65 20 74 68 65 20 69 6e  ist where the in
17530 64 65 78 20 73 74 72 69 6e 67 0a 2a 2a 20 6d 61  dex string.** ma
17540 74 63 68 65 73 20 4b 20 62 75 74 20 74 68 65 20  tches K but the 
17550 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
17560 20 6e 6f 74 20 52 2c 20 74 68 65 6e 20 74 68 65   not R, then the
17570 20 72 65 63 6f 72 64 0a 2a 2a 20 6e 75 6d 62 65   record.** numbe
17580 72 20 66 6f 72 20 74 68 61 74 20 65 6e 74 72 79  r for that entry
17590 20 69 73 20 70 75 73 68 65 64 20 6f 6e 74 6f 20   is pushed onto 
175a0 74 68 65 20 73 74 61 63 6b 20 61 6e 64 20 63 6f  the stack and co
175b0 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
175c0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
175d0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
175e0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
175f0 44 69 73 74 69 6e 63 74 2c 20 4e 6f 74 46 6f 75  Distinct, NotFou
17600 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46  nd, NotExists, F
17610 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ound.*/.case OP_
17620 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20  IsUnique: {     
17630 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
17640 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
17650 70 31 3b 0a 20 20 4d 65 6d 20 2a 70 4e 6f 73 20  p1;.  Mem *pNos 
17660 3d 20 26 70 54 6f 73 5b 2d 31 5d 3b 0a 20 20 43  = &pTos[-1];.  C
17670 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74  ursor *pCx;.  Bt
17680 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
17690 20 69 36 34 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f   i64 R;..  /* Po
176a0 70 20 74 68 65 20 76 61 6c 75 65 20 52 20 6f 66  p the value R of
176b0 66 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  f the top of the
176c0 20 73 74 61 63 6b 0a 20 20 2a 2f 0a 20 20 61 73   stack.  */.  as
176d0 73 65 72 74 28 20 70 4e 6f 73 3e 3d 70 2d 3e 61  sert( pNos>=p->a
176e0 53 74 61 63 6b 20 29 3b 0a 20 20 73 71 6c 69 74  Stack );.  sqlit
176f0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
17700 69 66 79 28 70 54 6f 73 29 3b 0a 20 20 52 20 3d  ify(pTos);.  R =
17710 20 70 54 6f 73 2d 3e 69 3b 0a 20 20 61 73 73 65   pTos->i;.  asse
17720 72 74 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73  rt( (pTos->flags
17730 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
17740 3b 0a 20 20 70 54 6f 73 2d 2d 3b 0a 20 20 61 73  ;.  pTos--;.  as
17750 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
17760 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
17770 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  pCx = p->apCsr[i
17780 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  ];.  assert( pCx
17790 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
177a0 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 20   pCx->pCursor;. 
177b0 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
177c0 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  .    int res;.  
177d0 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20    i64 v;        
177e0 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e   /* The record n
177f0 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 50 31 20  umber on the P1 
17800 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63 68  entry that match
17810 65 73 20 4b 20 2a 2f 0a 20 20 20 20 63 68 61 72  es K */.    char
17820 20 2a 7a 4b 65 79 3b 20 20 20 20 2f 2a 20 54 68   *zKey;    /* Th
17830 65 20 76 61 6c 75 65 20 6f 66 20 4b 20 2a 2f 0a  e value of K */.
17840 20 20 20 20 69 6e 74 20 6e 4b 65 79 3b 20 20 20      int nKey;   
17850 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17860 62 79 74 65 73 20 69 6e 20 4b 20 2a 2f 0a 20 20  bytes in K */.  
17870 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
17880 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
17890 74 65 73 20 69 6e 20 4b 20 77 69 74 68 6f 75 74  tes in K without
178a0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
178b0 65 20 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74  e end */.    int
178c0 20 73 7a 52 6f 77 69 64 3b 20 20 20 2f 2a 20 53   szRowid;   /* S
178d0 69 7a 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  ize of the rowid
178e0 20 63 6f 6c 75 6d 6e 20 61 74 20 74 68 65 20 65   column at the e
178f0 6e 64 20 6f 66 20 7a 4b 65 79 20 2a 2f 0a 0a 20  nd of zKey */.. 
17900 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
17910 4b 20 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e  K is a string an
17920 64 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e  d make zKey poin
17930 74 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20  t to K.    */.  
17940 20 20 53 74 72 69 6e 67 69 66 79 28 70 4e 6f 73    Stringify(pNos
17950 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17960 20 7a 4b 65 79 20 3d 20 70 4e 6f 73 2d 3e 7a 3b   zKey = pNos->z;
17970 0a 20 20 20 20 6e 4b 65 79 20 3d 20 70 4e 6f 73  .    nKey = pNos
17980 2d 3e 6e 3b 0a 0a 20 20 20 20 73 7a 52 6f 77 69  ->n;..    szRowi
17990 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  d = sqlite3VdbeI
179a0 64 78 52 6f 77 69 64 4c 65 6e 28 28 75 38 2a 29  dxRowidLen((u8*)
179b0 7a 4b 65 79 29 3b 0a 20 20 20 20 6c 65 6e 20 3d  zKey);.    len =
179c0 20 6e 4b 65 79 2d 73 7a 52 6f 77 69 64 3b 0a 0a   nKey-szRowid;..
179d0 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20 66 6f      /* Search fo
179e0 72 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31  r an entry in P1
179f0 20 77 68 65 72 65 20 61 6c 6c 20 62 75 74 20 74   where all but t
17a00 68 65 20 6c 61 73 74 20 66 6f 75 72 20 62 79 74  he last four byt
17a10 65 73 20 6d 61 74 63 68 20 4b 2e 0a 20 20 20 20  es match K..    
17a20 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  ** If there is n
17a30 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 6a 75  o such entry, ju
17a40 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
17a50 6f 20 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  o P2..    */.   
17a60 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65   assert( pCx->de
17a70 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
17a80 29 3b 0a 20 20 20 20 70 43 78 2d 3e 63 61 63 68  );.    pCx->cach
17a90 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
17aa0 53 54 41 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20  STALE;.    rc = 
17ab0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
17ac0 74 6f 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  to(pCrsr, zKey, 
17ad0 6c 65 6e 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  len, &res);.    
17ae0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17af0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
17b00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17b10 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
17b20 28 20 72 65 73 3c 30 20 29 7b 0a 20 20 20 20 20  ( res<0 ){.     
17b30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
17b40 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72  eeNext(pCrsr, &r
17b50 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
17b60 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  es ){.        pc
17b70 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
17b80 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
17b90 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
17ba0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
17bb0 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70  eIdxKeyCompare(p
17bc0 43 78 2c 20 6c 65 6e 2c 20 28 75 38 2a 29 7a 4b  Cx, len, (u8*)zK
17bd0 65 79 2c 20 26 72 65 73 29 3b 20 0a 20 20 20 20  ey, &res); .    
17be0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17bf0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17c00 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
17c10 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
17c20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
17c30 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
17c40 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
17c50 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
17c60 70 43 72 73 72 20 69 73 20 70 6f 69 6e 74 69 6e  pCrsr is pointin
17c70 67 20 74 6f 20 61 6e 20 65 6e 74 72 79 20 69 6e  g to an entry in
17c80 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75   P1 where all bu
17c90 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 69 6e  t.    ** the fin
17ca0 61 6c 20 65 6e 74 72 79 20 28 74 68 65 20 72 6f  al entry (the ro
17cb0 77 69 64 29 20 6d 61 74 63 68 65 73 20 4b 2e 20  wid) matches K. 
17cc0 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
17cd0 20 74 68 65 0a 20 20 20 20 2a 2a 20 66 69 6e 61   the.    ** fina
17ce0 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 69  l rowid column i
17cf0 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
17d00 20 52 2e 20 20 49 66 20 69 74 20 65 71 75 61 6c   R.  If it equal
17d10 73 20 52 20 74 68 65 6e 20 6a 75 6d 70 0a 20 20  s R then jump.  
17d20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
17d30 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a 2f 0a 20   to P2..    */. 
17d40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
17d50 64 62 65 49 64 78 52 6f 77 69 64 28 70 43 72 73  dbeIdxRowid(pCrs
17d60 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 66 28 20  r, &v);.    if( 
17d70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
17d80 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
17d90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17da0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 76 3d      }.    if( v=
17db0 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =R ){.      pc =
17dc0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
17dd0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
17de0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 69 6e  ..    /* The fin
17df0 61 6c 20 76 61 72 69 6e 74 20 6f 66 20 74 68 65  al varint of the
17e00 20 6b 65 79 20 69 73 20 64 69 66 66 65 72 65 6e   key is differen
17e10 74 20 66 72 6f 6d 20 52 2e 20 20 50 75 73 68 20  t from R.  Push 
17e20 69 74 20 6f 6e 74 6f 0a 20 20 20 20 2a 2a 20 74  it onto.    ** t
17e30 68 65 20 73 74 61 63 6b 2e 20 20 28 54 68 65 20  he stack.  (The 
17e40 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 6f 66  record number of
17e50 20 61 6e 20 65 6e 74 72 79 20 74 68 61 74 20 76   an entry that v
17e60 69 6f 6c 61 74 65 73 20 61 20 55 4e 49 51 55 45  iolates a UNIQUE
17e70 0a 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69  .    ** constrai
17e80 6e 74 2e 29 0a 20 20 20 20 2a 2f 0a 20 20 20 20  nt.).    */.    
17e90 70 54 6f 73 2b 2b 3b 0a 20 20 20 20 70 54 6f 73  pTos++;.    pTos
17ea0 2d 3e 69 20 3d 20 76 3b 0a 20 20 20 20 70 54 6f  ->i = v;.    pTo
17eb0 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  s->flags = MEM_I
17ec0 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  nt;.  }.  break;
17ed0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
17ee0 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 2a  otExists P1 P2 *
17ef0 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 74  .**.** Use the t
17f00 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20  op of the stack 
17f10 61 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79  as a integer key
17f20 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 77  .  If a record w
17f30 69 74 68 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  ith that key.** 
17f40 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69  does not exist i
17f50 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74  n table of P1, t
17f60 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
17f70 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 0a 2a   If the record.*
17f80 2a 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68  * does exist, th
17f90 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54  en fall thru.  T
17fa0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
17fb0 74 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  t pointing to th
17fc0 65 0a 2a 2a 20 72 65 63 6f 72 64 20 69 66 20 69  e.** record if i
17fd0 74 20 65 78 69 73 74 73 2e 20 20 54 68 65 20 69  t exists.  The i
17fe0 6e 74 65 67 65 72 20 6b 65 79 20 69 73 20 70 6f  nteger key is po
17ff0 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 73 74  pped from the st
18000 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  ack..**.** The d
18010 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
18020 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  n this operation
18030 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73   and NotFound is
18040 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70   that this.** op
18050 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20  eration assumes 
18060 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e  the key is an in
18070 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50  teger and that P
18080 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65  1 is a table whe
18090 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64  reas.** NotFound
180a0 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20   assumes key is 
180b0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
180c0 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f  ed from MakeReco
180d0 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  rd and.** P1 is 
180e0 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  an index..**.** 
180f0 53 65 65 20 61 6c 73 6f 3a 20 44 69 73 74 69 6e  See also: Distin
18100 63 74 2c 20 46 6f 75 6e 64 2c 20 4d 6f 76 65 54  ct, Found, MoveT
18110 6f 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55  o, NotFound, IsU
18120 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
18130 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20  _NotExists: {   
18140 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20       /* no-push 
18150 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
18160 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a  ->p1;.  Cursor *
18170 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
18180 70 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28  pCrsr;.  assert(
18190 20 70 54 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b   pTos>=p->aStack
181a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e   );.  assert( i>
181b0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
181c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
181d0 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
181e0 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d  ;.  if( (pCrsr =
181f0 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b   (pC = p->apCsr[
18200 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30  i])->pCursor)!=0
18210 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b   ){.    int res;
18220 0a 20 20 20 20 75 36 34 20 69 4b 65 79 3b 0a 20  .    u64 iKey;. 
18230 20 20 20 61 73 73 65 72 74 28 20 70 54 6f 73 2d     assert( pTos-
18240 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
18250 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
18260 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54  p->apCsr[i]->isT
18270 61 62 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79  able );.    iKey
18280 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70 54 6f 73   = intToKey(pTos
18290 2d 3e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  ->i);.    rc = s
182a0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
182b0 6f 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  o(pCrsr, 0, iKey
182c0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
182d0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 54 6f  >lastRowid = pTo
182e0 73 2d 3e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  s->i;.    pC->ro
182f0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
18300 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  ==0;.    pC->nul
18310 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
18320 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
18330 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
18340 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
18350 20 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 69   uninitialized i
18360 66 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 2e  f rc!=SQLITE_OK.
18370 20 20 42 75 74 20 69 66 20 72 63 21 3d 53 51 4c    But if rc!=SQL
18380 49 54 45 5f 4f 4b 0a 20 20 20 20 2a 2a 20 70 72  ITE_OK.    ** pr
18390 6f 63 65 73 73 69 6e 67 20 69 73 20 61 62 6f 75  ocessing is abou
183a0 74 20 74 6f 20 61 62 6f 72 74 20 73 6f 20 77 65  t to abort so we
183b0 20 72 65 61 6c 6c 79 20 64 6f 20 6e 6f 74 20 63   really do not c
183c0 61 72 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  are whether or n
183d0 6f 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6f  ot.    ** the fo
183e0 6c 6c 6f 77 69 6e 67 20 6a 75 6d 70 20 69 73 20  llowing jump is 
183f0 74 61 6b 65 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  taken. */.    if
18400 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
18410 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
18420 20 31 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f   1;.      pC->ro
18430 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
18440 20 20 20 20 7d 0a 20 20 7d 0a 20 20 52 65 6c 65      }.  }.  Rele
18450 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 70 54 6f  ase(pTos);.  pTo
18460 73 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s--;.  break;.}.
18470 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
18480 65 6e 63 65 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a  ence P1 * *.**.*
18490 2a 20 50 75 73 68 20 61 6e 20 69 6e 74 65 67 65  * Push an intege
184a0 72 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b  r onto the stack
184b0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6e 65   which is the ne
184c0 78 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  xt available.** 
184d0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
184e0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 20 20  for cursor P1.  
184f0 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
18500 62 65 72 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 75  ber on the.** cu
18510 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
18520 74 65 64 20 61 66 74 65 72 20 74 68 65 20 70 75  ted after the pu
18530 73 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  sh..*/.case OP_S
18540 65 71 75 65 6e 63 65 3a 20 7b 0a 20 20 69 6e 74  equence: {.  int
18550 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
18560 61 73 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d  assert( pTos>=p-
18570 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 61 73 73  >aStack );.  ass
18580 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
18590 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
185a0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
185b0 69 5d 21 3d 30 20 29 3b 0a 20 20 70 54 6f 73 2b  i]!=0 );.  pTos+
185c0 2b 3b 0a 20 20 70 54 6f 73 2d 3e 69 20 3d 20 70  +;.  pTos->i = p
185d0 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73 65 71 43  ->apCsr[i]->seqC
185e0 6f 75 6e 74 2b 2b 3b 0a 20 20 70 54 6f 73 2d 3e  ount++;.  pTos->
185f0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
18600 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
18610 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
18620 64 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  d P1 P2 *.**.** 
18630 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
18640 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
18650 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
18660 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
18670 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
18680 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
18690 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
186a0 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
186b0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
186c0 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
186d0 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
186e0 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
186f0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 70 75  ord number is pu
18700 73 68 65 64 20 0a 2a 2a 20 6f 6e 74 6f 20 74 68  shed .** onto th
18710 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 49  e stack..**.** I
18720 66 20 50 32 3e 30 20 74 68 65 6e 20 50 32 20 69  f P2>0 then P2 i
18730 73 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  s a memory cell 
18740 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c  that holds the l
18750 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
18760 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  y.** generated r
18770 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e  ecord number.  N
18780 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
18790 62 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  bers are allowed
187a0 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74   to be less.** t
187b0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
187c0 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
187d0 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
187e0 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46  imum, a SQLITE_F
187f0 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  ULL.** error is 
18800 67 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20  generated.  The 
18810 50 32 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  P2 memory cell i
18820 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
18830 68 65 20 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20  he generated.** 
18840 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20  record number.  
18850 54 68 69 73 20 50 32 20 6d 65 63 68 61 6e 69 73  This P2 mechanis
18860 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
18870 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
18880 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
18890 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
188a0 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
188b0 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
188c0 70 31 3b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b  p1;.  i64 v = 0;
188d0 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  .  Cursor *pC;. 
188e0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
188f0 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
18900 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
18910 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69  Csr[i]!=0 );.  i
18920 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73  f( (pC = p->apCs
18930 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d  r[i])->pCursor==
18940 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
18950 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
18960 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
18970 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
18980 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
18990 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
189a0 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
189b0 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
189c0 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
189d0 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
189e0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
189f0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
18a00 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
18a10 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
18a20 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
18a30 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
18a40 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
18a50 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
18a60 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
18a70 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
18a80 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
18a90 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
18aa0 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
18ab0 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
18ac0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
18ad0 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
18ae0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
18af0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
18b00 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
18b10 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
18b20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
18b30 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
18b40 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
18b50 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
18b60 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
18b70 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
18b80 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
18b90 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
18ba0 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
18bb0 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
18bc0 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
18bd0 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
18be0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
18bf0 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20  1000 times..    
18c00 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61 20  **.    ** For a 
18c10 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73 20  table with less 
18c20 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65  than 2 billion e
18c30 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f 62  ntries, the prob
18c40 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  ability.    ** o
18c50 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61 20  f not finding a 
18c60 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73 20  unused rowid is 
18c70 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e 20  about 1.0e-300. 
18c80 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20 20   This is a .    
18c90 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62  ** non-zero prob
18ca0 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74 20  ability, but it 
18cb0 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68 69  is still vanishi
18cc0 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73  ngly small and s
18cd0 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76  hould.    ** nev
18ce0 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62 6c  er cause a probl
18cf0 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75 63  em.  You are muc
18d00 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b  h, much more lik
18d10 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20 20  ely to have a.  
18d20 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66 61    ** hardware fa
18d30 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20 74  ilure than for t
18d40 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  his algorithm to
18d50 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20   fail..    **.  
18d60 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73 69    ** The analysi
18d70 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  s in the previou
18d80 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73 75  s paragraph assu
18d90 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61 76  mes that you hav
18da0 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20  e a good.    ** 
18db0 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d  source of random
18dc0 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61 20   numbers.  Is a 
18dd0 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
18de0 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a   like lrand48().
18df0 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75      ** good enou
18e00 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79 62  gh?  Maybe. Mayb
18e10 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72 64  e not. It's hard
18e20 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65 72   to know whether
18e30 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69   there.    ** mi
18e40 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62 75  ght be subtle bu
18e50 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65  gs is some imple
18e60 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72  mentations of lr
18e70 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20 20  and48() that.   
18e80 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65 20   ** could cause 
18e90 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f  problems. To avo
18ea0 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c 20  id uncertainty, 
18eb0 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73 20  SQLite uses its 
18ec0 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64  own .    ** rand
18ed0 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61  om number genera
18ee0 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68 65  tor based on the
18ef0 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a   RC4 algorithm..
18f00 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f      **.    ** To
18f10 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74   promote localit
18f20 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20 66  y of reference f
18f30 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69 6e  or repetitive in
18f40 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20 2a  serts, the.    *
18f50 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74 65  * first few atte
18f60 6d 70 74 73 20 61 74 20 63 68 6f 73 69 6e 67 20  mpts at chosing 
18f70 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 70  a random rowid p
18f80 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73 74 20  ick values just 
18f90 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a 20  a little.    ** 
18fa0 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
18fb0 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64 2e 20  previous rowid. 
18fc0 20 54 68 69 73 20 68 61 73 20 62 65 65 6e 20 73   This has been s
18fd0 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e 74 61  hown experimenta
18fe0 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64 6f  lly.    ** to do
18ff0 75 62 6c 65 20 74 68 65 20 73 70 65 65 64 20 6f  uble the speed o
19000 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65 72 61  f the COPY opera
19010 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  tion..    */.   
19020 20 69 6e 74 20 72 65 73 2c 20 72 78 3d 53 51 4c   int res, rx=SQL
19030 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20 20 20  ITE_OK, cnt;.   
19040 20 69 36 34 20 78 3b 0a 20 20 20 20 63 6e 74 20   i64 x;.    cnt 
19050 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 28 73 71  = 0;.    if( (sq
19060 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28  lite3BtreeFlags(
19070 70 43 2d 3e 70 43 75 72 73 6f 72 29 26 28 42 54  pC->pCursor)&(BT
19080 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54 52 45 45  REE_INTKEY|BTREE
19090 5f 5a 45 52 4f 44 41 54 41 29 29 20 21 3d 0a 20  _ZERODATA)) !=. 
190a0 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 49           BTREE_I
190b0 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20 20 20 72  NTKEY ){.      r
190c0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
190d0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
190e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
190f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
19100 20 20 61 73 73 65 72 74 28 20 28 73 71 6c 69 74    assert( (sqlit
19110 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d  e3BtreeFlags(pC-
19120 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54 52 45  >pCursor) & BTRE
19130 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 29 3b 0a  E_INTKEY)!=0 );.
19140 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71 6c      assert( (sql
19150 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70  ite3BtreeFlags(p
19160 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54  C->pCursor) & BT
19170 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3d 3d 30  REE_ZERODATA)==0
19180 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
19190 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
191a0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
191b0 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
191c0 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
191d0 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
191e0 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
191f0 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
19200 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
19210 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
19220 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
19230 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
19240 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
19250 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
19260 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
19270 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
19280 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
19290 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
192a0 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
192b0 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
192c0 20 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66   ( (((u64)0x7fff
192d0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
192e0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
192f0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
19300 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
19310 69 64 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  id ){.      if( 
19320 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
19330 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  id ){.        v 
19340 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 3b  = pC->nextRowid;
19350 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
19360 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19370 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
19380 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
19390 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
193a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
193b0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
193c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
193d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
193e0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
193f0 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20         v = 1;.  
19400 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
19410 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
19420 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
19430 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
19440 20 20 20 20 20 20 20 76 20 3d 20 6b 65 79 54 6f         v = keyTo
19450 49 6e 74 28 76 29 3b 0a 20 20 20 20 20 20 20 20  Int(v);.        
19460 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57    if( v==MAX_ROW
19470 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
19480 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52    pC->useRandomR
19490 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  owid = 1;.      
194a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
194b0 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20         v++;.    
194c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
194d0 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64  }.      }..#ifnd
194e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
194f0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
19500 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29     if( pOp->p2 )
19510 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 2a 70  {.        Mem *p
19520 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  Mem;.        ass
19530 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
19540 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4d 65  & pOp->p2<p->nMe
19550 6d 20 29 3b 20 20 2f 2a 20 50 32 20 69 73 20 61  m );  /* P2 is a
19560 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
19570 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4d  ll */.        pM
19580 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
19590 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20  p->p2];.        
195a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
195b0 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
195c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
195d0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
195e0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
195f0 2a 20 6d 65 6d 28 50 32 29 20 68 6f 6c 64 73 20  * mem(P2) holds 
19600 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
19610 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
19620 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
19630 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
19640 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
19650 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
19660 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
19670 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19680 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
19690 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
196a0 6d 2d 3e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  m->i+1 ){.      
196b0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 69 20      v = pMem->i 
196c0 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  + 1;.        }. 
196d0 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 69 20 3d         pMem->i =
196e0 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   v;.      }.#end
196f0 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 76 3c  if..      if( v<
19700 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
19710 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77       pC->nextRow
19720 69 64 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20  idValid = 1;.   
19730 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77       pC->nextRow
19740 69 64 20 3d 20 76 2b 31 3b 0a 20 20 20 20 20 20  id = v+1;.      
19750 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
19760 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
19770 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  d = 0;.      }. 
19780 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d     }.    if( pC-
19790 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
197a0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
197b0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 20 20   pOp->p2==0 );  
197c0 2f 2a 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d  /* SQLITE_FULL m
197d0 75 73 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  ust have occurre
197e0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
197f0 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d  */.      v = db-
19800 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a  >priorNewRowid;.
19810 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
19820 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
19830 20 69 66 28 20 76 3d 3d 30 20 7c 7c 20 63 6e 74   if( v==0 || cnt
19840 3e 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  >2 ){.          
19850 73 71 6c 69 74 65 33 52 61 6e 64 6f 6d 6e 65 73  sqlite3Randomnes
19860 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
19870 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
19880 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78 66  cnt<5 ) v &= 0xf
19890 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
198a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
198b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 72 3b  unsigned char r;
198c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
198d0 65 33 52 61 6e 64 6f 6d 6e 65 73 73 28 31 2c 20  e3Randomness(1, 
198e0 26 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 76  &r);.          v
198f0 20 2b 3d 20 72 20 2b 20 31 3b 0a 20 20 20 20 20   += r + 1;.     
19900 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
19910 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65   v==0 ) continue
19920 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 69 6e  ;.        x = in
19930 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20 20 20  tToKey(v);.     
19940 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65 33 42     rx = sqlite3B
19950 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 2d 3e 70  treeMoveto(pC->p
19960 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
19970 78 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  x, &res);.      
19980 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d    cnt++;.      }
19990 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 30 20  while( cnt<1000 
199a0 26 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rx==SQLITE_OK
199b0 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   && res==0 );.  
199c0 20 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77      db->priorNew
199d0 52 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20 20 20  Rowid = v;.     
199e0 20 69 66 28 20 72 78 3d 3d 53 51 4c 49 54 45 5f   if( rx==SQLITE_
199f0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
19a00 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
19a10 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  ITE_FULL;.      
19a20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19a30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
19a40 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
19a50 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
19a60 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
19a70 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
19a80 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
19a90 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
19aa0 3b 0a 20 20 7d 0a 20 20 70 54 6f 73 2b 2b 3b 0a  ;.  }.  pTos++;.
19ab0 20 20 70 54 6f 73 2d 3e 69 20 3d 20 76 3b 0a 20    pTos->i = v;. 
19ac0 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d   pTos->flags = M
19ad0 45 4d 5f 49 6e 74 3b 0a 20 20 62 72 65 61 6b 3b  EM_Int;.  break;
19ae0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
19af0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 0a 2a  nsert P1 P2 P3.*
19b00 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
19b10 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
19b20 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
19b30 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
19b40 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
19b50 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
19b60 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
19b70 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
19b80 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
19b90 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
19ba0 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
19bb0 6c 75 65 20 6f 6e 20 74 68 65 20 74 6f 70 20 6f  lue on the top o
19bc0 66 20 74 68 65 0a 2a 2a 20 73 74 61 63 6b 2e 20  f the.** stack. 
19bd0 20 54 68 65 20 6b 65 79 20 69 73 20 74 68 65 20   The key is the 
19be0 6e 65 78 74 20 76 61 6c 75 65 20 64 6f 77 6e 20  next value down 
19bf0 6f 6e 20 74 68 65 20 73 74 61 63 6b 2e 20 20 54  on the stack.  T
19c00 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
19c10 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 54  e an integer.  T
19c20 68 65 20 73 74 61 63 6b 20 69 73 20 70 6f 70 70  he stack is popp
19c30 65 64 20 74 77 69 63 65 20 62 79 20 74 68 69 73  ed twice by this
19c40 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
19c50 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
19c60 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
19c70 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65  f P2 is set, the
19c80 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
19c90 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
19ca0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
19cb0 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
19cc0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
19cd0 49 44 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  ID flag of P2 is
19ce0 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
19cf0 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
19d00 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
19d10 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
19d20 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
19d30 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
19d40 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
19d50 27 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  's unmodified)..
19d60 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
19d70 50 33 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P3 may point to 
19d80 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
19d90 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
19da0 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
19db0 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
19dc0 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
19dd0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
19de0 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
19df0 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
19e00 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
19e10 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
19e20 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  nsert..**.** Thi
19e30 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
19e40 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
19e50 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
19e60 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
19e70 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
19e80 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
19e90 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
19ea0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
19eb0 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 4d 65 6d  no-push */.  Mem
19ec0 20 2a 70 4e 6f 73 20 3d 20 26 70 54 6f 73 5b 2d   *pNos = &pTos[-
19ed0 31 5d 3b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  1];.  int i = pO
19ee0 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
19ef0 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
19f00 4e 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29  Nos>=p->aStack )
19f10 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
19f20 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
19f30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
19f40 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
19f50 20 20 69 66 28 20 28 28 70 43 20 3d 20 70 2d 3e    if( ((pC = p->
19f60 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
19f70 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65  or!=0 || pC->pse
19f80 75 64 6f 54 61 62 6c 65 29 20 29 7b 0a 20 20 20  udoTable) ){.   
19f90 20 69 36 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20   i64 iKey;   /* 
19fa0 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
19fb0 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
19fc0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
19fd0 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 20 20 61  serted */..    a
19fe0 73 73 65 72 74 28 20 70 4e 6f 73 2d 3e 66 6c 61  ssert( pNos->fla
19ff0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1a000 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1a010 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 69  isTable );.    i
1a020 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70  Key = intToKey(p
1a030 4e 6f 73 2d 3e 69 29 3b 0a 0a 20 20 20 20 69 66  Nos->i);..    if
1a040 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
1a050 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
1a060 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69  nChange++;.    i
1a070 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
1a080 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
1a090 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
1a0a0 70 4e 6f 73 2d 3e 69 3b 0a 20 20 20 20 69 66 28  pNos->i;.    if(
1a0b0 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61   pC->nextRowidVa
1a0c0 6c 69 64 20 26 26 20 70 4e 6f 73 2d 3e 69 3e 3d  lid && pNos->i>=
1a0d0 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 29 7b  pC->nextRowid ){
1a0e0 0a 20 20 20 20 20 20 70 43 2d 3e 6e 65 78 74 52  .      pC->nextR
1a0f0 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20  owidValid = 0;. 
1a100 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 54 6f     }.    if( pTo
1a110 73 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  s->flags & MEM_N
1a120 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 54 6f  ull ){.      pTo
1a130 73 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20  s->z = 0;.      
1a140 70 54 6f 73 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20  pTos->n = 0;.   
1a150 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
1a160 73 65 72 74 28 20 70 54 6f 73 2d 3e 66 6c 61 67  sert( pTos->flag
1a170 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
1a180 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20 20 7d 0a  M_Str) );.    }.
1a190 20 20 20 20 69 66 28 20 70 43 2d 3e 70 73 65 75      if( pC->pseu
1a1a0 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  doTable ){.     
1a1b0 20 73 71 6c 69 74 65 46 72 65 65 28 70 43 2d 3e   sqliteFree(pC->
1a1c0 70 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70 43  pData);.      pC
1a1d0 2d 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20  ->iKey = iKey;. 
1a1e0 20 20 20 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d       pC->nData =
1a1f0 20 70 54 6f 73 2d 3e 6e 3b 0a 20 20 20 20 20 20   pTos->n;.      
1a200 69 66 28 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20  if( pTos->flags 
1a210 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
1a220 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d       pC->pData =
1a230 20 70 54 6f 73 2d 3e 7a 3b 0a 20 20 20 20 20 20   pTos->z;.      
1a240 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20    pTos->flags = 
1a250 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
1a260 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
1a270 43 2d 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74  C->pData = sqlit
1a280 65 4d 61 6c 6c 6f 63 52 61 77 28 20 70 43 2d 3e  eMallocRaw( pC->
1a290 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20 20  nData+2 );.     
1a2a0 20 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74     if( !pC->pDat
1a2b0 61 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  a ) goto no_mem;
1a2c0 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
1a2d0 70 43 2d 3e 70 44 61 74 61 2c 20 70 54 6f 73 2d  pC->pData, pTos-
1a2e0 3e 7a 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a  >z, pC->nData);.
1a2f0 20 20 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74          pC->pDat
1a300 61 5b 70 43 2d 3e 6e 44 61 74 61 5d 20 3d 20 30  a[pC->nData] = 0
1a310 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 44  ;.        pC->pD
1a320 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 2b 31 5d  ata[pC->nData+1]
1a330 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1a340 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1a350 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1a360 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a370 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1a380 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1a390 65 79 2c 20 70 54 6f 73 2d 3e 7a 2c 20 70 54 6f  ey, pTos->z, pTo
1a3a0 73 2d 3e 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 20  s->n);.    }.   
1a3b0 20 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49   .    pC->rowidI
1a3c0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1a3d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1a3e0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1a3f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1a400 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 20 20  CHE_STALE;..    
1a410 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
1a420 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
1a430 75 69 72 65 64 2e 20 2a 2f 0a 20 20 20 20 69 66  uired. */.    if
1a440 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1a450 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1a460 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1a470 33 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  3 ){.      const
1a480 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1a490 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1a4a0 61 6d 65 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ame;.      const
1a4b0 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f   char *zTbl = pO
1a4c0 70 2d 3e 70 33 3b 0a 20 20 20 20 20 20 69 6e 74  p->p3;.      int
1a4d0 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 32 20   op = ((pOp->p2 
1a4e0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
1a4f0 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
1a500 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
1a510 52 54 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  RT);.      asser
1a520 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1a530 3b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64  ;.      db->xUpd
1a540 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1a550 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
1a560 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
1a570 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1a580 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1a590 20 20 7d 0a 20 20 7d 0a 20 20 70 6f 70 53 74 61    }.  }.  popSta
1a5a0 63 6b 28 26 70 54 6f 73 2c 20 32 29 3b 0a 0a 20  ck(&pTos, 2);.. 
1a5b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a5c0 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
1a5d0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
1a5e0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
1a5f0 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
1a600 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
1a610 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
1a620 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * The cursor wil
1a630 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
1a640 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65  ng at either the
1a650 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
1a660 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
1a670 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
1a680 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
1a690 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
1a6a0 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
1a6b0 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
1a6c0 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
1a6d0 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e  be a no-op.  Hen
1a6e0 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64  ce it is OK to d
1a6f0 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72  elete.** a recor
1a700 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
1a710 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a   Next loop..**.*
1a720 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
1a730 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
1a740 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P2 is set, then 
1a750 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
1a760 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
1a770 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
1a780 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  e not)..**.** If
1a790 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
1a7a0 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68 69 73  table, then this
1a7b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1a7c0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1a7d0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 20 20 20   OP_Delete: {   
1a7e0 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20       /* no-push 
1a7f0 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
1a800 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a  ->p1;.  Cursor *
1a810 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  pC;.  assert( i>
1a820 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1a830 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1a840 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
1a850 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1a860 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  f( pC->pCursor!=
1a870 30 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b 65  0 ){.    i64 iKe
1a880 79 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  y;..    /* If th
1a890 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
1a8a0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
1a8b0 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
1a8c0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 20 20  owid of the.    
1a8d0 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c  ** row being del
1a8e0 65 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  eted..    */.   
1a8f0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
1a900 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
1a910 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p3 ){.      ass
1a920 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1a930 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43   );.      if( pC
1a940 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1a950 7b 0a 20 20 20 20 20 20 20 20 69 4b 65 79 20 3d  {.        iKey =
1a960 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
1a970 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a980 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1a990 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
1a9a0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69 4b 65 79  ->pCursor, &iKey
1a9b0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1a9c0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  c ){.          g
1a9d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a9e0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1a9f0 7d 0a 20 20 20 20 20 20 20 20 69 4b 65 79 20 3d  }.        iKey =
1aa00 20 6b 65 79 54 6f 49 6e 74 28 69 4b 65 79 29 3b   keyToInt(iKey);
1aa10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
1aa20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1aa30 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1aa40 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
1aa50 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1aa60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1aa70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1aa80 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
1aa90 73 6f 72 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 65  sor);.    pC->ne
1aaa0 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30  xtRowidValid = 0
1aab0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1aac0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1aad0 41 4c 45 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 76  ALE;..    /* Inv
1aae0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
1aaf0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
1ab00 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d   */.    if( rc==
1ab10 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1ab20 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1ab30 20 26 26 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20   && pOp->p3 ){. 
1ab40 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
1ab50 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1ab60 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1ab70 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
1ab80 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 33 3b  *zTbl = pOp->p3;
1ab90 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61  .      db->xUpda
1aba0 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
1abb0 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
1abc0 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a  E_DELETE, zDb, z
1abd0 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
1abe0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
1abf0 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  b>=0 );.    }.  
1ac00 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  }.  if( pOp->p2 
1ac10 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1ac20 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1ac30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ac40 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
1ac50 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  nt P1 * *.**.** 
1ac60 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 73 65  This opcode rese
1ac70 74 73 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  ts the VMs inter
1ac80 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
1ac90 65 72 20 74 6f 20 30 2e 20 49 66 20 50 31 20 69  er to 0. If P1 i
1aca0 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20  s true,.** then 
1acb0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1acc0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1acd0 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
1ace0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1acf0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
1ad00 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
1ad10 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
1ad20 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
1ad30 67 65 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65  ges()).** before
1ad40 20 69 74 20 69 73 20 72 65 73 65 74 2e 20 54 68   it is reset. Th
1ad50 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
1ad60 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
1ad70 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
1ad80 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
1ad90 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
1ada0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
1adb0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
1adc0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
1add0 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20 20  nChange);.  }.  
1ade0 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
1adf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ae00 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
1ae10 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 75 73 68  1 * *.**.** Push
1ae20 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20   onto the stack 
1ae30 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
1ae40 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
1ae50 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
1ae60 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
1ae70 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
1ae80 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
1ae90 65 64 0a 2a 2a 20 6f 6e 74 6f 20 74 68 65 20 73  ed.** onto the s
1aea0 74 61 63 6b 20 65 78 61 63 74 6c 79 20 61 73 20  tack exactly as 
1aeb0 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
1aec0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1aed0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1aee0 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 70 6f 69  ursor is not poi
1aef0 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
1af00 20 72 6f 77 2c 20 61 20 4e 55 4c 4c 20 69 73 20   row, a NULL is 
1af10 70 75 73 68 65 64 0a 2a 2a 20 6f 6e 74 6f 20 74  pushed.** onto t
1af20 68 65 20 73 74 61 63 6b 2e 0a 2a 2f 0a 2f 2a 20  he stack..*/./* 
1af30 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50  Opcode: RowKey P
1af40 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 75 73 68  1 * *.**.** Push
1af50 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20   onto the stack 
1af60 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
1af70 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20   key for cursor 
1af80 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
1af90 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
1afa0 6e 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 49  n of the key.  I
1afb0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
1afc0 0a 2a 2a 20 6f 6e 74 6f 20 74 68 65 20 73 74 61  .** onto the sta
1afd0 63 6b 20 65 78 61 63 74 6c 79 20 61 73 20 69 74  ck exactly as it
1afe0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1aff0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1b000 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1b010 73 6f 72 20 69 73 20 6e 6f 74 20 70 6f 69 6e 74  sor is not point
1b020 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
1b030 6f 77 2c 20 61 20 4e 55 4c 4c 20 69 73 20 70 75  ow, a NULL is pu
1b040 73 68 65 64 0a 2a 2a 20 6f 6e 74 6f 20 74 68 65  shed.** onto the
1b050 20 73 74 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20   stack..*/.case 
1b060 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20  OP_RowKey:.case 
1b070 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
1b080 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1b090 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  .  Cursor *pC;. 
1b0a0 20 75 33 32 20 6e 3b 0a 0a 20 20 2f 2a 20 4e 6f   u32 n;..  /* No
1b0b0 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
1b0c0 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
1b0d0 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
1b0e0 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
1b0f0 6f 6e 20 2a 2f 0a 20 20 70 54 6f 73 2b 2b 3b 0a  on */.  pTos++;.
1b100 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1b110 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1b120 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1b130 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1b140 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70  pC->isTable || p
1b150 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1b160 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72  owKey );.  asser
1b170 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c  t( pC->isIndex |
1b180 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1b190 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
1b1a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1b1b0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
1b1c0 77 20 29 7b 0a 20 20 20 20 70 54 6f 73 2d 3e 66  w ){.    pTos->f
1b1d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
1b1e0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
1b1f0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
1b200 20 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72     BtCursor *pCr
1b210 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1b220 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1b230 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1b240 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
1b250 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1b260 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b270 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
1b280 77 20 29 7b 0a 20 20 20 20 20 20 70 54 6f 73 2d  w ){.      pTos-
1b290 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
1b2a0 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  l;.      break;.
1b2b0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
1b2c0 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
1b2d0 20 20 20 69 36 34 20 6e 36 34 3b 0a 20 20 20 20     i64 n64;.    
1b2e0 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
1b2f0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20  sTable );.      
1b300 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1b310 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
1b320 3b 0a 20 20 20 20 20 20 6e 20 3d 20 6e 36 34 3b  ;.      n = n64;
1b330 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1b340 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61    sqlite3BtreeDa
1b350 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
1b360 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 54 6f  );.    }.    pTo
1b370 73 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 20 20 69 66  s->n = n;.    if
1b380 28 20 6e 3c 3d 4e 42 46 53 20 29 7b 0a 20 20 20  ( n<=NBFS ){.   
1b390 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d     pTos->flags =
1b3a0 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f   MEM_Blob | MEM_
1b3b0 53 68 6f 72 74 3b 0a 20 20 20 20 20 20 70 54 6f  Short;.      pTo
1b3c0 73 2d 3e 7a 20 3d 20 70 54 6f 73 2d 3e 7a 53 68  s->z = pTos->zSh
1b3d0 6f 72 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ort;.    }else{.
1b3e0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20        char *z = 
1b3f0 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28  sqliteMallocRaw(
1b400 20 6e 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20   n );.      if( 
1b410 7a 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  z==0 ) goto no_m
1b420 65 6d 3b 0a 20 20 20 20 20 20 70 54 6f 73 2d 3e  em;.      pTos->
1b430 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
1b440 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20   | MEM_Dyn;.    
1b450 20 20 70 54 6f 73 2d 3e 78 44 65 6c 20 3d 20 30    pTos->xDel = 0
1b460 3b 0a 20 20 20 20 20 20 70 54 6f 73 2d 3e 7a 20  ;.      pTos->z 
1b470 3d 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = z;.    }.    i
1b480 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
1b490 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1b4a0 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
1b4b0 73 72 2c 20 30 2c 20 6e 2c 20 70 54 6f 73 2d 3e  sr, 0, n, pTos->
1b4c0 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  z);.    }else{. 
1b4d0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b4e0 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
1b4f0 2c 20 30 2c 20 6e 2c 20 70 54 6f 73 2d 3e 7a 29  , 0, n, pTos->z)
1b500 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
1b510 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  if( pC->pseudoTa
1b520 62 6c 65 20 29 7b 0a 20 20 20 20 70 54 6f 73 2d  ble ){.    pTos-
1b530 3e 6e 20 3d 20 70 43 2d 3e 6e 44 61 74 61 3b 0a  >n = pC->nData;.
1b540 20 20 20 20 70 54 6f 73 2d 3e 7a 20 3d 20 70 43      pTos->z = pC
1b550 2d 3e 70 44 61 74 61 3b 0a 20 20 20 20 70 54 6f  ->pData;.    pTo
1b560 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  s->flags = MEM_B
1b570 6c 6f 62 7c 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  lob|MEM_Ephem;. 
1b580 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 6f 73   }else{.    pTos
1b590 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
1b5a0 6c 6c 3b 0a 20 20 7d 0a 20 20 70 54 6f 73 2d 3e  ll;.  }.  pTos->
1b5b0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
1b5c0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
1b5d0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
1b5e0 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
1b5f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b600 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
1b610 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 75 73 68 20 6f  * *.**.** Push o
1b620 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20 61 6e  nto the stack an
1b630 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
1b640 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
1b650 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
1b660 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
1b670 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
1b680 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
1b690 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1b6a0 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a  ->p1;.  Cursor *
1b6b0 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 0a 20 20  pC;.  i64 v;..  
1b6c0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1b6d0 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1b6e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1b6f0 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1b700 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
1b710 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1b720 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
1b730 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1b740 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b750 20 70 54 6f 73 2b 2b 3b 0a 20 20 69 66 28 20 70   pTos++;.  if( p
1b760 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b770 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  ){.    v = pC->l
1b780 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73  astRowid;.  }els
1b790 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f  e if( pC->pseudo
1b7a0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d  Table ){.    v =
1b7b0 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b   keyToInt(pC->iK
1b7c0 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ey);.  }else if(
1b7d0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20   pC->nullRow || 
1b7e0 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 20 29  pC->pCursor==0 )
1b7f0 7b 0a 20 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67  {.    pTos->flag
1b800 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
1b810 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
1b820 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1b830 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1b840 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1b850 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
1b860 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 76 20  sor, &v);.    v 
1b870 3d 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20  = keyToInt(v);. 
1b880 20 7d 0a 20 20 70 54 6f 73 2d 3e 69 20 3d 20 76   }.  pTos->i = v
1b890 3b 0a 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20  ;.  pTos->flags 
1b8a0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 62 72 65  = MEM_Int;.  bre
1b8b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b8c0 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
1b8d0 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
1b8e0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
1b8f0 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
1b900 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
1b910 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
1b920 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
1b930 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
1b940 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
1b950 20 70 75 73 68 20 0a 2a 2a 20 61 20 4e 55 4c 4c   push .** a NULL
1b960 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 2e   onto the stack.
1b970 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
1b980 52 6f 77 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Row: {        /*
1b990 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e   no-push */.  in
1b9a0 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1b9b0 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20   Cursor *pC;..  
1b9c0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1b9d0 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1b9e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1b9f0 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1ba00 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
1ba10 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
1ba20 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1ba30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1ba40 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
1ba50 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20   P2 *.**.** The 
1ba60 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
1ba70 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
1ba80 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
1ba90 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
1baa0 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
1bab0 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
1bac0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1bad0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
1bae0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1baf0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
1bb00 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
1bb10 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1bb20 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
1bb30 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
1bb40 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
1bb50 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
1bb60 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
1bb70 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
1bb80 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1bb90 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
1bba0 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a    /* no-push */.
1bbb0 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1bbc0 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  1;.  Cursor *pC;
1bbd0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1bbe0 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  sr;..  assert( i
1bbf0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1bc00 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1bc10 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1bc20 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1bc30 69 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d  if( (pCrsr = pC-
1bc40 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
1bc50 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
1bc60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1bc70 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
1bc80 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  es);.    pC->nul
1bc90 6c 52 6f 77 20 3d 20 72 65 73 3b 0a 20 20 20 20  lRow = res;.    
1bca0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1bcb0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1bcc0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1bcd0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 69  CHE_STALE;.    i
1bce0 66 28 20 72 65 73 20 26 26 20 70 4f 70 2d 3e 70  f( res && pOp->p
1bcf0 32 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20  2>0 ){.      pc 
1bd00 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1bd10 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1bd20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1bd30 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
1bd40 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
1bd50 6f 72 74 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  ort P1 P2 *.**.*
1bd60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
1bd70 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  es exactly the s
1bd80 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f  ame thing as OP_
1bd90 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68  Rewind except th
1bda0 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65  at.** it increme
1bdb0 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e  nts an undocumen
1bdc0 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ted global varia
1bdd0 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73  ble used for tes
1bde0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74  ting..**.** Sort
1bdf0 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73  ing is accomplis
1be00 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72  hed by writing r
1be10 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f  ecords into a so
1be20 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20  rting index,.** 
1be30 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74  then rewinding t
1be40 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c  hat index and pl
1be50 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72  aying it back fr
1be60 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a  om beginning to.
1be70 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20  ** end.  We use 
1be80 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f  the OP_Sort opco
1be90 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50  de instead of OP
1bea0 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68  _Rewind to do th
1beb0 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73  e.** rewinding s
1bec0 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61  o that the globa
1bed0 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20  l variable will 
1bee0 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  be incremented a
1bef0 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e  nd.** regression
1bf00 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72   tests can deter
1bf10 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
1bf20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  not the optimize
1bf30 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c  r is.** correctl
1bf40 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  y optimizing out
1bf50 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20   sorts..*/.case 
1bf60 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
1bf70 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a    /* no-push */.
1bf80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1bf90 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
1bfa0 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
1bfb0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1bfc0 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  t--;.#endif.  /*
1bfd0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
1bfe0 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
1bff0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
1c000 69 6e 64 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  ind P1 P2 *.**.*
1c010 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
1c020 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
1c030 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
1c040 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
1c050 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
1c060 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
1c070 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
1c080 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
1c090 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
1c0a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
1c0b0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
1c0c0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1c0d0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
1c0e0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
1c0f0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1c100 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
1c110 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
1c120 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
1c130 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
1c140 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
1c150 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f  : {        /* no
1c160 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20 69  -push */.  int i
1c170 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75   = pOp->p1;.  Cu
1c180 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
1c190 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
1c1a0 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
1c1b0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
1c1c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1c1d0 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
1c1e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1c1f0 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d  ;.  if( (pCrsr =
1c200 20 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30   pC->pCursor)!=0
1c210 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1c220 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
1c230 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
1c240 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72   pC->atFirst = r
1c250 65 73 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 64  es==0;.    pC->d
1c260 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1c270 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1c280 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1c290 54 41 4c 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TALE;.  }else{. 
1c2a0 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a     res = 1;.  }.
1c2b0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1c2c0 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 20 26  res;.  if( res &
1c2d0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  & pOp->p2>0 ){. 
1c2e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1c2f0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1c300 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c310 4e 65 78 74 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  Next P1 P2 *.**.
1c320 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
1c330 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1c340 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
1c350 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
1c360 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
1c370 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
1c380 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
1c390 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
1c3a0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
1c3b0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
1c3c0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
1c3d0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
1c3e0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
1c3f0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
1c400 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
1c410 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
1c420 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a  See also: Prev.*
1c430 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
1c440 76 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  v P1 P2 *.**.** 
1c450 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
1c460 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1c470 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
1c480 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
1c490 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
1c4a0 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
1c4b0 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
1c4c0 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
1c4d0 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
1c4e0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
1c4f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
1c500 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
1c510 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
1c520 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
1c530 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
1c540 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2f 0a  ately to P2..*/.
1c550 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
1c560 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73         /* no-pus
1c570 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  h */.case OP_Nex
1c580 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e  t: {        /* n
1c590 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 43 75 72 73  o-push */.  Curs
1c5a0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1c5b0 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 43 48  or *pCrsr;..  CH
1c5c0 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
1c5d0 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  T;.  assert( pOp
1c5e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1c5f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1c600 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1c610 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c620 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1c630 69 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d  if( (pCrsr = pC-
1c640 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
1c650 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
1c660 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
1c670 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1c680 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
1c690 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1c6a0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1c6b0 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
1c6c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c6d0 4e 65 78 74 20 3f 20 73 71 6c 69 74 65 33 42 74  Next ? sqlite3Bt
1c6e0 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26  reeNext(pCrsr, &
1c6f0 72 65 73 29 20 3a 0a 20 20 20 20 20 20 20 20 20  res) :.         
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1c720 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1c730 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
1c740 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1c750 72 65 73 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63  res;.      pC->c
1c760 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1c770 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a  HE_STALE;.    }.
1c780 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
1c790 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1c7a0 2d 3e 70 32 20 2d 20 31 3b 0a 23 69 66 64 65 66  ->p2 - 1;.#ifdef
1c7b0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
1c7c0 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
1c7d0 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
1c7e0 66 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  f.    }.  }else{
1c7f0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1c800 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 1;.  }.  pC->
1c810 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1c820 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c830 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
1c840 72 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  rt P1 * *.**.** 
1c850 54 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73  The top of the s
1c860 74 61 63 6b 20 68 6f 6c 64 73 20 61 20 53 51 4c  tack holds a SQL
1c870 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
1c880 75 73 69 6e 67 20 65 69 74 68 65 72 20 74 68 65  using either the
1c890 0a 2a 2a 20 4d 61 6b 65 49 64 78 52 65 63 20 6f  .** MakeIdxRec o
1c8a0 72 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  r MakeRecord ins
1c8b0 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
1c8c0 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
1c8d0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
1c8e0 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
1c8f0 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
1c900 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
1c910 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1c920 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
1c930 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
1c940 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
1c950 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
1c960 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
1c970 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49  .*/.case OP_IdxI
1c980 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
1c990 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
1c9a0 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1c9b0 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  .  Cursor *pC;. 
1c9c0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1c9d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 54 6f 73  ;.  assert( pTos
1c9e0 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20  >=p->aStack );. 
1c9f0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1ca00 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1ca10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1ca20 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 61  Csr[i]!=0 );.  a
1ca30 73 73 65 72 74 28 20 70 54 6f 73 2d 3e 66 6c 61  ssert( pTos->fla
1ca40 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1ca50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ca60 70 32 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  p2==0 );.  if( (
1ca70 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d  pCrsr = (pC = p-
1ca80 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
1ca90 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  sor)!=0 ){.    i
1caa0 6e 74 20 6e 4b 65 79 20 3d 20 70 54 6f 73 2d 3e  nt nKey = pTos->
1cab0 6e 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  n;.    const cha
1cac0 72 20 2a 7a 4b 65 79 20 3d 20 70 54 6f 73 2d 3e  r *zKey = pTos->
1cad0 7a 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  z;.    assert( p
1cae0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
1caf0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1cb00 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
1cb10 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
1cb20 22 22 2c 20 30 29 3b 0a 20 20 20 20 61 73 73 65  "", 0);.    asse
1cb30 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
1cb40 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
1cb50 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1cb60 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1cb70 20 20 7d 0a 20 20 52 65 6c 65 61 73 65 28 70 54    }.  Release(pT
1cb80 6f 73 29 3b 0a 20 20 70 54 6f 73 2d 2d 3b 0a 20  os);.  pTos--;. 
1cb90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1cba0 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
1cbb0 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P1 * *.**.** The
1cbc0 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63   top of the stac
1cbd0 6b 20 69 73 20 61 6e 20 69 6e 64 65 78 20 6b 65  k is an index ke
1cbe0 79 20 62 75 69 6c 74 20 75 73 69 6e 67 20 74 68  y built using th
1cbf0 65 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a 20  e either the.** 
1cc00 4d 61 6b 65 49 64 78 52 65 63 20 6f 72 20 4d 61  MakeIdxRec or Ma
1cc10 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 73  keRecord opcodes
1cc20 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
1cc30 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
1cc40 74 72 79 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  try from the ind
1cc50 65 78 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ex..*/.case OP_I
1cc60 64 78 44 65 6c 65 74 65 3a 20 7b 20 20 20 20 20  dxDelete: {     
1cc70 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
1cc80 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1cc90 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43  p1;.  Cursor *pC
1cca0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1ccb0 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  rsr;.  assert( p
1ccc0 54 6f 73 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29  Tos>=p->aStack )
1ccd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 54 6f 73  ;.  assert( pTos
1cce0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
1ccf0 6f 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ob );.  assert( 
1cd00 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1cd10 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1cd20 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1cd30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
1cd40 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
1cd50 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
1cd60 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
1cd70 73 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  s;.    rc = sqli
1cd80 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 28 70  te3BtreeMoveto(p
1cd90 43 72 73 72 2c 20 70 54 6f 73 2d 3e 7a 2c 20 70  Crsr, pTos->z, p
1cda0 54 6f 73 2d 3e 6e 2c 20 26 72 65 73 29 3b 0a 20  Tos->n, &res);. 
1cdb0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1cdc0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1cdd0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1cde0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1cdf0 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  pCrsr);.    }.  
1ce00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
1ce10 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
1ce20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  );.    pC->cache
1ce30 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1ce40 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 52 65 6c 65  TALE;.  }.  Rele
1ce50 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 70 54 6f  ase(pTos);.  pTo
1ce60 73 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s--;.  break;.}.
1ce70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
1ce80 6f 77 69 64 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a  owid P1 * *.**.*
1ce90 2a 20 50 75 73 68 20 6f 6e 74 6f 20 74 68 65 20  * Push onto the 
1cea0 73 74 61 63 6b 20 61 6e 20 69 6e 74 65 67 65 72  stack an integer
1ceb0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
1cec0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
1ced0 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
1cee0 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
1cef0 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
1cf00 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
1cf10 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
1cf20 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
1cf30 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
1cf40 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
1cf50 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
1cf60 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
1cf70 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
1cf80 4d 61 6b 65 49 64 78 52 65 63 2e 0a 2a 2f 0a 63  MakeIdxRec..*/.c
1cf90 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
1cfa0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1cfb0 2d 3e 70 31 3b 0a 20 20 42 74 43 75 72 73 6f 72  ->p1;.  BtCursor
1cfc0 20 2a 70 43 72 73 72 3b 0a 20 20 43 75 72 73 6f   *pCrsr;.  Curso
1cfd0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1cfe0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1cff0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1d000 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
1d010 3d 30 20 29 3b 0a 20 20 70 54 6f 73 2b 2b 3b 0a  =0 );.  pTos++;.
1d020 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20    pTos->flags = 
1d030 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
1d040 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70  (pCrsr = (pC = p
1d050 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
1d060 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20  rsor)!=0 ){.    
1d070 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 20 20  i64 rowid;..    
1d080 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
1d090 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1d0a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1d0b0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
1d0c0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
1d0d0 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 54 6f 73  ow ){.      pTos
1d0e0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
1d0f0 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ll;.    }else{. 
1d100 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d110 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70 43  3VdbeIdxRowid(pC
1d120 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
1d130 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1d140 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1d150 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d160 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d170 7d 0a 20 20 20 20 20 20 70 54 6f 73 2d 3e 66 6c  }.      pTos->fl
1d180 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
1d190 20 20 20 20 20 70 54 6f 73 2d 3e 69 20 3d 20 72       pTos->i = r
1d1a0 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  owid;.    }.  }.
1d1b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d1c0 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20  pcode: IdxGT P1 
1d1d0 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  P2 *.**.** The t
1d1e0 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20  op of the stack 
1d1f0 69 73 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72  is an index entr
1d200 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
1d210 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
1d220 0a 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 73  .** the top of s
1d230 74 61 63 6b 20 61 67 61 69 6e 73 74 20 74 68 65  tack against the
1d240 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
1d250 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1d260 74 69 6e 67 20 74 6f 2e 0a 2a 2a 20 49 67 6e 6f  ting to..** Igno
1d270 72 65 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20  re the ROWID on 
1d280 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
1d290 0a 2a 2a 20 54 68 65 20 74 6f 70 20 6f 66 20 74  .** The top of t
1d2a0 68 65 20 73 74 61 63 6b 20 6d 69 67 68 74 20 68  he stack might h
1d2b0 61 76 65 20 66 65 77 65 72 20 63 6f 6c 75 6d 6e  ave fewer column
1d2c0 73 20 74 68 61 74 20 50 31 2e 0a 2a 2a 0a 2a 2a  s that P1..**.**
1d2d0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
1d2e0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
1d2f0 72 20 74 68 61 6e 20 74 68 65 20 74 6f 70 20 6f  r than the top o
1d300 66 20 74 68 65 20 73 74 61 63 6b 0a 2a 2a 20 74  f the stack.** t
1d310 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
1d320 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
1d330 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1d340 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
1d350 0a 2a 2a 20 49 6e 20 65 69 74 68 65 72 20 63 61  .** In either ca
1d360 73 65 2c 20 74 68 65 20 73 74 61 63 6b 20 69 73  se, the stack is
1d370 20 70 6f 70 70 65 64 20 6f 6e 63 65 2e 0a 2a 2f   popped once..*/
1d380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
1d390 45 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  E P1 P2 P3.**.**
1d3a0 20 54 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   The top of the 
1d3b0 73 74 61 63 6b 20 69 73 20 61 6e 20 69 6e 64 65  stack is an inde
1d3c0 78 20 65 6e 74 72 79 20 74 68 61 74 20 6f 6d 69  x entry that omi
1d3d0 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
1d3e0 6f 6d 70 61 72 65 0a 2a 2a 20 74 68 65 20 74 6f  ompare.** the to
1d3f0 70 20 6f 66 20 73 74 61 63 6b 20 61 67 61 69 6e  p of stack again
1d400 73 74 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  st the index tha
1d410 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
1d420 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a  y pointing to..*
1d430 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 52 4f 57  * Ignore the ROW
1d440 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
1d450 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
1d460 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
1d470 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1d480 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1d490 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b  top of the stack
1d4a0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
1d4b0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
1d4c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1d4d0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1d4e0 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 65 69 74 68  tion..** In eith
1d4f0 65 72 20 63 61 73 65 2c 20 74 68 65 20 73 74 61  er case, the sta
1d500 63 6b 20 69 73 20 70 6f 70 70 65 64 20 6f 6e 63  ck is popped onc
1d510 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69  e..**.** If P3 i
1d520 73 20 74 68 65 20 22 2b 22 20 73 74 72 69 6e 67  s the "+" string
1d530 20 28 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e   (or any other n
1d540 6f 6e 2d 4e 55 4c 4c 20 73 74 72 69 6e 67 29 20  on-NULL string) 
1d550 74 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 64 65  then the.** inde
1d560 78 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  x taken from the
1d570 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63   top of the stac
1d580 6b 20 69 73 20 74 65 6d 70 6f 72 61 72 69 6c 79  k is temporarily
1d590 20 69 6e 63 72 65 61 73 65 64 20 62 79 0a 2a 2a   increased by.**
1d5a0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
1d5b0 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  r to the compari
1d5c0 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20  son.  This make 
1d5d0 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 0a  the opcode work.
1d5e0 2a 2a 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78  ** like IdxGT ex
1d5f0 63 65 70 74 20 74 68 61 74 20 69 66 20 74 68 65  cept that if the
1d600 20 6b 65 79 20 66 72 6f 6d 20 74 68 65 20 73 74   key from the st
1d610 61 63 6b 20 69 73 20 61 20 70 72 65 66 69 78 20  ack is a prefix 
1d620 6f 66 0a 2a 2a 20 74 68 65 20 6b 65 79 20 69 6e  of.** the key in
1d630 20 74 68 65 20 63 75 72 73 6f 72 2c 20 74 68 65   the cursor, the
1d640 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
1d650 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75 6c   whereas it woul
1d660 64 20 62 65 0a 2a 2a 20 74 72 75 65 20 77 69 74  d be.** true wit
1d670 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f  h IdxGT..*/./* O
1d680 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
1d690 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20  P2 P3.**.** The 
1d6a0 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b  top of the stack
1d6b0 20 69 73 20 61 6e 20 69 6e 64 65 78 20 65 6e 74   is an index ent
1d6c0 72 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ry that omits th
1d6d0 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
1d6e0 65 0a 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20  e.** the top of 
1d6f0 73 74 61 63 6b 20 61 67 61 69 6e 73 74 20 74 68  stack against th
1d700 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
1d710 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
1d720 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2a 20 49 67 6e  nting to..** Ign
1d730 6f 72 65 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ore the ROWID on
1d740 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
1d750 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
1d760 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
1d770 73 73 20 74 68 61 6e 20 20 74 68 65 20 74 6f 70  ss than  the top
1d780 20 6f 66 20 74 68 65 20 73 74 61 63 6b 0a 2a 2a   of the stack.**
1d790 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1d7a0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
1d7b0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1d7c0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1d7d0 6e 2e 0a 2a 2a 20 49 6e 20 65 69 74 68 65 72 20  n..** In either 
1d7e0 63 61 73 65 2c 20 74 68 65 20 73 74 61 63 6b 20  case, the stack 
1d7f0 69 73 20 70 6f 70 70 65 64 20 6f 6e 63 65 2e 0a  is popped once..
1d800 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 74  **.** If P3 is t
1d810 68 65 20 22 2b 22 20 73 74 72 69 6e 67 20 28 6f  he "+" string (o
1d820 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d  r any other non-
1d830 4e 55 4c 4c 20 73 74 72 69 6e 67 29 20 74 68 65  NULL string) the
1d840 6e 20 74 68 65 0a 2a 2a 20 69 6e 64 65 78 20 74  n the.** index t
1d850 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 74 6f  aken from the to
1d860 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 69  p of the stack i
1d870 73 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 69 6e  s temporarily in
1d880 63 72 65 61 73 65 64 20 62 79 0a 2a 2a 20 61 6e  creased by.** an
1d890 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 74   epsilon prior t
1d8a0 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
1d8b0 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68  .  This makes th
1d8c0 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 0a 2a 2a  e opcode work.**
1d8d0 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a   like IdxLE..*/.
1d8e0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
1d8f0 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75          /* no-pu
1d900 73 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  sh */.case OP_Id
1d910 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xGT:          /*
1d920 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 63 61 73 65   no-push */.case
1d930 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20   OP_IdxGE: {    
1d940 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a      /* no-push *
1d950 2f 0a 20 20 69 6e 74 20 69 3d 20 70 4f 70 2d 3e  /.  int i= pOp->
1d960 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43  p1;.  Cursor *pC
1d970 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
1d980 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1d990 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1d9a0 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1d9b0 0a 20 20 61 73 73 65 72 74 28 20 70 54 6f 73 3e  .  assert( pTos>
1d9c0 3d 70 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20  =p->aStack );.  
1d9d0 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
1d9e0 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21  sr[i])->pCursor!
1d9f0 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
1da00 73 3b 0a 20 0a 20 20 20 20 61 73 73 65 72 74 28  s;. .    assert(
1da10 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 26 20 4d   pTos->flags & M
1da20 45 4d 5f 42 6c 6f 62 20 29 3b 20 20 2f 2a 20 43  EM_Blob );  /* C
1da30 72 65 61 74 65 64 20 75 73 69 6e 67 20 4f 50 5f  reated using OP_
1da40 4d 61 6b 65 2a 4b 65 79 20 2a 2f 0a 20 20 20 20  Make*Key */.    
1da50 53 74 72 69 6e 67 69 66 79 28 70 54 6f 73 2c 20  Stringify(pTos, 
1da60 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61  encoding);.    a
1da70 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
1da80 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
1da90 20 20 20 20 2a 70 43 2d 3e 70 49 6e 63 72 4b 65      *pC->pIncrKe
1daa0 79 20 3d 20 70 4f 70 2d 3e 70 33 21 3d 30 3b 0a  y = pOp->p3!=0;.
1dab0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1dac0 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  >p3==0 || pOp->o
1dad0 70 63 6f 64 65 21 3d 4f 50 5f 49 64 78 47 54 20  pcode!=OP_IdxGT 
1dae0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1daf0 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
1db00 70 61 72 65 28 70 43 2c 20 70 54 6f 73 2d 3e 6e  pare(pC, pTos->n
1db10 2c 20 28 75 38 2a 29 70 54 6f 73 2d 3e 7a 2c 20  , (u8*)pTos->z, 
1db20 26 72 65 73 29 3b 0a 20 20 20 20 2a 70 43 2d 3e  &res);.    *pC->
1db30 70 49 6e 63 72 4b 65 79 20 3d 20 30 3b 0a 20 20  pIncrKey = 0;.  
1db40 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1db50 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1db60 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ak;.    }.    if
1db70 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1db80 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20  P_IdxLT ){.     
1db90 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20   res = -res;.   
1dba0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1dbb0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
1dbc0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b   ){.      res++;
1dbd0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1dbe0 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63  es>0 ){.      pc
1dbf0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
1dc00 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 52 65 6c  .    }.  }.  Rel
1dc10 65 61 73 65 28 70 54 6f 73 29 3b 0a 20 20 70 54  ease(pTos);.  pT
1dc20 6f 73 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  os--;.  break;.}
1dc30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
1dc40 74 72 6f 79 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  troy P1 P2 *.**.
1dc50 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
1dc60 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
1dc70 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1dc80 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
1dc90 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
1dca0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
1dcb0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
1dcc0 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
1dcd0 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
1dce0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1dcf0 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
1dd00 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
1dd10 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
1dd20 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
1dd30 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
1dd40 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
1dd50 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
1dd60 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
1dd70 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
1dd80 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
1dd90 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
1dda0 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
1ddb0 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
1ddc0 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
1ddd0 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
1dde0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
1ddf0 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
1de00 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
1de10 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
1de20 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
1de30 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
1de40 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
1de50 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
1de60 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
1de70 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
1de80 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
1de90 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
1dea0 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
1deb0 2a 20 69 73 20 70 75 73 68 65 64 20 6f 6e 74 6f  * is pushed onto
1dec0 20 74 68 65 20 73 74 61 63 6b 2e 20 20 49 66 20   the stack.  If 
1ded0 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74  no page movement
1dee0 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
1def0 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 74 61  ecause.** the ta
1df00 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65  ble being droppe
1df10 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 74 68  d was already th
1df20 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
1df30 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
1df40 0a 2a 2a 20 61 20 7a 65 72 6f 20 69 73 20 70 75  .** a zero is pu
1df50 73 68 65 64 20 6f 6e 74 6f 20 74 68 65 20 73 74  shed onto the st
1df60 61 63 6b 2e 20 20 49 66 20 41 55 54 4f 56 41 43  ack.  If AUTOVAC
1df70 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 0a  UUM is disabled.
1df80 2a 2a 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  ** then a zero i
1df90 73 20 70 75 73 68 65 64 20 6f 6e 74 6f 20 74 68  s pushed onto th
1dfa0 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 53  e stack..**.** S
1dfb0 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
1dfc0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
1dfd0 79 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 6f 76 65  y: {.  int iMove
1dfe0 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 23  d;.  int iCnt;.#
1dff0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e000 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1e010 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20    Vdbe *pVdbe;. 
1e020 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
1e030 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
1e040 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 3d 70  ; pVdbe; pVdbe=p
1e050 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  Vdbe->pNext){.  
1e060 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67    if( pVdbe->mag
1e070 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
1e080 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56  UN && pVdbe->inV
1e090 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70  tabMethod<2 && p
1e0a0 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20  Vdbe->pc>=0 ){. 
1e0b0 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20       iCnt++;.   
1e0c0 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69   }.  }.#else.  i
1e0d0 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69 76 65  Cnt = db->active
1e0e0 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a  VdbeCnt;.#endif.
1e0f0 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a    if( iCnt>1 ){.
1e100 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1e110 4c 4f 43 4b 45 44 3b 0a 20 20 7d 65 6c 73 65 7b  LOCKED;.  }else{
1e120 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e  .    assert( iCn
1e130 74 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  t==1 );.    rc =
1e140 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
1e150 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  pTable(db->aDb[p
1e160 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
1e170 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
1e180 20 20 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 20 20      pTos++;.    
1e190 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pTos->flags = ME
1e1a0 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 54 6f 73 2d  M_Int;.    pTos-
1e1b0 3e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  >i = iMoved;.#if
1e1c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1e1d0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
1e1e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1e1f0 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
1e200 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
1e210 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62  ootPageMoved(&db
1e220 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2c 20  ->aDb[pOp->p2], 
1e230 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
1e240 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
1e250 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e260 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
1e270 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  P1 P2 *.**.** De
1e280 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
1e290 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
1e2a0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1e2b0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1e2c0 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
1e2d0 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
1e2e0 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
1e2f0 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
1e300 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
1e310 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1e320 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
1e330 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
1e340 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
1e350 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
1e360 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1e370 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
1e380 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
1e390 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
1e3a0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
1e3b0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
1e3c0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
1e3d0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
1e3e0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
1e3f0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
1e400 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
1e410 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
1e420 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
1e430 43 6c 65 61 72 3a 20 7b 20 20 20 20 20 20 20 20  Clear: {        
1e440 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 0a 20  /* no-push */.. 
1e450 20 2f 2a 20 46 6f 72 20 63 6f 6e 73 69 73 74 65   /* For consiste
1e460 6e 63 79 20 77 69 74 68 20 74 68 65 20 77 61 79  ncy with the way
1e470 20 6f 74 68 65 72 20 66 65 61 74 75 72 65 73 20   other features 
1e480 6f 66 20 53 51 4c 69 74 65 20 6f 70 65 72 61 74  of SQLite operat
1e490 65 0a 20 20 2a 2a 20 77 69 74 68 20 61 20 74 72  e.  ** with a tr
1e4a0 75 6e 63 61 74 65 2c 20 77 65 20 77 69 6c 6c 20  uncate, we will 
1e4b0 61 6c 73 6f 20 73 6b 69 70 20 74 68 65 20 75 70  also skip the up
1e4c0 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 20  date callback.. 
1e4d0 20 2a 2f 0a 23 69 66 20 30 0a 20 20 42 74 72 65   */.#if 0.  Btre
1e4e0 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  e *pBt = db->aDb
1e4f0 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 3b 0a 20  [pOp->p2].pBt;. 
1e500 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
1e510 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
1e520 3e 70 33 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  >p3 ){.    const
1e530 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1e540 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 7a 4e  >aDb[pOp->p2].zN
1e550 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
1e560 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
1e570 3e 70 33 3b 0a 20 20 20 20 42 74 43 75 72 73 6f  >p3;.    BtCurso
1e580 72 20 2a 70 43 75 72 20 3d 20 30 3b 0a 20 20 20  r *pCur = 0;.   
1e590 20 69 6e 74 20 66 69 6e 20 3d 20 30 3b 0a 0a 20   int fin = 0;.. 
1e5a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e5b0 74 72 65 65 43 75 72 73 6f 72 28 70 42 74 2c 20  treeCursor(pBt, 
1e5c0 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 2c 20 30  pOp->p1, 0, 0, 0
1e5d0 2c 20 26 70 43 75 72 29 3b 0a 20 20 20 20 69 66  , &pCur);.    if
1e5e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e5f0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1e600 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e610 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
1e620 0a 20 20 20 20 20 20 72 63 3d 73 71 6c 69 74 65  .      rc=sqlite
1e630 33 42 74 72 65 65 46 69 72 73 74 28 70 43 75 72  3BtreeFirst(pCur
1e640 2c 20 26 66 69 6e 29 3b 20 0a 20 20 20 20 20 20  , &fin); .      
1e650 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1e660 20 21 66 69 6e 3b 20 0a 20 20 20 20 20 20 72 63   !fin; .      rc
1e670 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
1e680 74 28 70 43 75 72 2c 20 26 66 69 6e 29 0a 20 20  t(pCur, &fin).  
1e690 20 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 69    ){.      i64 i
1e6a0 4b 65 79 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  Key;.      rc = 
1e6b0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1e6c0 69 7a 65 28 70 43 75 72 2c 20 26 69 4b 65 79 29  ize(pCur, &iKey)
1e6d0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
1e6e0 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  {.        break;
1e6f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
1e700 4b 65 79 20 3d 20 6b 65 79 54 6f 49 6e 74 28 69  Key = keyToInt(i
1e710 4b 65 79 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Key);.      db->
1e720 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
1e730 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
1e740 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
1e750 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
1e760 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e770 65 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73  e3BtreeCloseCurs
1e780 6f 72 28 70 43 75 72 29 3b 0a 20 20 20 20 69 66  or(pCur);.    if
1e790 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e7a0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1e7b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e7c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
1e7d0 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  if.  rc = sqlite
1e7e0 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
1e7f0 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32  (db->aDb[pOp->p2
1e800 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 29 3b  ].pBt, pOp->p1);
1e810 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e820 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
1e830 62 6c 65 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a  ble P1 * *.**.**
1e840 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
1e850 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
1e860 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1e870 69 66 20 50 32 3d 3d 30 20 6f 72 20 69 6e 20 74  if P2==0 or in t
1e880 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
1e890 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
1e8a0 20 50 32 3d 3d 31 2e 20 20 50 75 73 68 20 74 68   P2==1.  Push th
1e8b0 65 20 70 61 67 65 20 6e 75 6d 62 65 72 0a 2a 2a  e page number.**
1e8c0 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 70 61   for the root pa
1e8d0 67 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  ge of the new ta
1e8e0 62 6c 65 20 6f 6e 74 6f 20 74 68 65 20 73 74 61  ble onto the sta
1e8f0 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69  ck..**.** The di
1e900 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1e910 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
1e920 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
1e930 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
1e940 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
1e950 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
1e960 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
1e970 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
1e980 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
1e990 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
1e9a0 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
1e9b0 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
1e9c0 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
1e9d0 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 2a  CreateIndex P1 *
1e9e0 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
1e9f0 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
1ea00 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ea10 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
1ea20 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
1ea30 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1ea40 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 31 2e 20   file if P2==1. 
1ea50 20 50 75 73 68 20 74 68 65 20 70 61 67 65 20 6e   Push the page n
1ea60 75 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  umber of the.** 
1ea70 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 74 68 65  root page of the
1ea80 20 6e 65 77 20 69 6e 64 65 78 20 6f 6e 74 6f 20   new index onto 
1ea90 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a  the stack..**.**
1eaa0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
1eab0 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
1eac0 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
1ead0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1eae0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
1eaf0 74 65 49 6e 64 65 78 3a 0a 63 61 73 65 20 4f 50  teIndex:.case OP
1eb00 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 0a  _CreateTable: {.
1eb10 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
1eb20 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
1eb30 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
1eb40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1eb50 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1eb60 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1eb70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1eb80 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
1eb90 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
1eba0 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54  code==OP_CreateT
1ebb0 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66  able ){.    /* f
1ebc0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
1ebd0 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67  KEY; */.    flag
1ebe0 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41  s = BTREE_LEAFDA
1ebf0 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b  TA|BTREE_INTKEY;
1ec00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
1ec10 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f  ags = BTREE_ZERO
1ec20 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  DATA;.  }.  rc =
1ec30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1ec40 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
1ec50 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29  t, &pgno, flags)
1ec60 3b 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 69 66  ;.  pTos++;.  if
1ec70 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1ec80 29 7b 0a 20 20 20 20 70 54 6f 73 2d 3e 69 20 3d  ){.    pTos->i =
1ec90 20 70 67 6e 6f 3b 0a 20 20 20 20 70 54 6f 73 2d   pgno;.    pTos-
1eca0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
1ecb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1ecc0 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Tos->flags = MEM
1ecd0 5f 4e 75 6c 6c 3b 0a 20 20 7d 0a 20 20 62 72 65  _Null;.  }.  bre
1ece0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1ecf0 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
1ed00 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 52 65 61   P2 P3.**.** Rea
1ed10 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
1ed20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
1ed30 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
1ed40 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
1ed50 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
1ed60 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
1ed70 73 65 20 50 33 2e 20 20 50 32 20 69 73 20 74 68  se P3.  P2 is th
1ed80 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20  e "force" flag. 
1ed90 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74    Always do.** t
1eda0 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50 32  he parsing if P2
1edb0 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50 32   is true.  If P2
1edc0 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20   is false, then 
1edd0 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
1ede0 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68  a.** no-op if th
1edf0 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20  e schema is not 
1ee00 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64  currently loaded
1ee10 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1ee20 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66  s, if P2.** is f
1ee30 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45  alse, the SQLITE
1ee40 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69 73  _MASTER table is
1ee50 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20   only parsed if 
1ee60 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a  the rest of the.
1ee70 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72  ** schema is alr
1ee80 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f  eady loaded into
1ee90 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c   the symbol tabl
1eea0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
1eeb0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
1eec0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
1eed0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
1eee0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
1eef0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
1ef00 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
1ef10 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 65  It is thus a ree
1ef20 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
1ef30 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
1ef40 63 68 65 6d 61 3a 20 7b 20 20 20 20 20 20 20 20  chema: {        
1ef50 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
1ef60 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e  char *zSql;.  in
1ef70 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  t iDb = pOp->p1;
1ef80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1ef90 4d 61 73 74 65 72 3b 0a 20 20 49 6e 69 74 44 61  Master;.  InitDa
1efa0 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
1efb0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1efc0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1efd0 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 32 20  .  if( !pOp->p2 
1efe0 26 26 20 21 44 62 48 61 73 50 72 6f 70 65 72 74  && !DbHasPropert
1eff0 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
1f000 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20  hemaLoaded) ){. 
1f010 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
1f020 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
1f030 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 69  _TABLE(iDb);.  i
1f040 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
1f050 0a 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20  .  initData.iDb 
1f060 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 69  = pOp->p1;.  ini
1f070 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
1f080 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
1f090 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
1f0a0 72 69 6e 74 66 28 0a 20 20 20 20 20 22 53 45 4c  rintf(.     "SEL
1f0b0 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
1f0c0 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
1f0d0 27 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a  '.%s WHERE %s",.
1f0e0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
1f0f0 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
1f100 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66  , pOp->p3);.  if
1f110 28 20 7a 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f  ( zSql==0 ) goto
1f120 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 73 71 6c 69 74   no_mem;.  sqlit
1f130 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
1f140 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69  .  assert( db->i
1f150 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
1f160 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
1f170 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73   1;.  assert( !s
1f180 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c  qlite3MallocFail
1f190 65 64 28 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  ed() );.  rc = s
1f1a0 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
1f1b0 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
1f1c0 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
1f1d0 44 61 74 61 2c 20 30 29 3b 0a 20 20 69 66 28 20  Data, 0);.  if( 
1f1e0 72 63 3d 3d 53 51 4c 49 54 45 5f 41 42 4f 52 54  rc==SQLITE_ABORT
1f1f0 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
1f200 2e 72 63 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  .rc;.  sqliteFre
1f210 65 28 7a 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69  e(zSql);.  db->i
1f220 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
1f230 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
1f240 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
1f250 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
1f260 20 20 20 73 71 6c 69 74 65 33 46 61 69 6c 65 64     sqlite3Failed
1f270 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 67 6f  Malloc();.    go
1f280 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
1f290 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
1f2a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1f2b0 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26  _OMIT_ANALYZE) &
1f2c0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1f2d0 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29 0a 2f  E_OMIT_PARSER)./
1f2e0 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
1f2f0 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 0a 2a 2a  alysis P1 * *.**
1f300 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
1f310 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
1f320 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
1f330 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
1f340 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
1f350 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
1f360 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
1f370 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
1f380 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
1f390 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
1f3a0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
1f3b0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
1f3c0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
1f3d0 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
1f3e0 79 73 69 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ysis: {        /
1f3f0 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69  * no-push */.  i
1f400 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  nt iDb = pOp->p1
1f410 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1f420 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1f430 62 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 41 6e  b );.  sqlite3An
1f440 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 69  alysisLoad(db, i
1f450 44 62 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  Db);.  break;  .
1f460 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
1f470 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1f480 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20 21 64 65  _ANALYZE) && !de
1f490 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1f4a0 54 5f 50 41 52 53 45 52 29 20 20 2a 2f 0a 0a 2f  T_PARSER)  */../
1f4b0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
1f4c0 62 6c 65 20 50 31 20 2a 20 50 33 0a 2a 2a 0a 2a  ble P1 * P3.**.*
1f4d0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
1f4e0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
1f4f0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
1f500 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
1f510 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
1f520 65 64 20 50 33 20 69 6e 20 64 61 74 61 62 61 73  ed P3 in databas
1f530 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
1f540 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
1f550 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
1f560 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
1f570 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
1f580 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1f590 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
1f5a0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
1f5b0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
1f5c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
1f5d0 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
1f5e0 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
1f5f0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
1f600 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
1f610 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1f620 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1f630 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
1f640 64 65 78 20 50 31 20 2a 20 50 33 0a 2a 2a 0a 2a  dex P1 * P3.**.*
1f650 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
1f660 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
1f670 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
1f680 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
1f690 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
1f6a0 65 64 20 50 33 20 69 6e 20 64 61 74 61 62 61 73  ed P3 in databas
1f6b0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
1f6c0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
1f6d0 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
1f6e0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
1f6f0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
1f700 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1f710 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
1f720 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
1f730 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
1f740 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
1f750 70 49 6e 64 65 78 3a 20 7b 20 20 20 20 20 20 20  pIndex: {       
1f760 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20   /* no-push */. 
1f770 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1f780 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
1f790 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1f7a0 33 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  3);.  break;.}..
1f7b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
1f7c0 72 69 67 67 65 72 20 50 31 20 2a 20 50 33 0a 2a  rigger P1 * P3.*
1f7d0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
1f7e0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
1f7f0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
1f800 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
1f810 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
1f820 72 20 6e 61 6d 65 64 20 50 33 20 69 6e 20 64 61  r named P3 in da
1f830 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
1f840 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
1f850 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
1f860 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
1f870 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
1f880 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
1f890 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
1f8a0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
1f8b0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
1f8c0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
1f8d0 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
1f8e0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70  {        /* no-p
1f8f0 75 73 68 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ush */.  sqlite3
1f900 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1f910 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
1f920 70 31 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  p1, pOp->p3);.  
1f930 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
1f940 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
1f950 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
1f960 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
1f970 69 74 79 43 6b 20 50 31 20 50 32 20 2a 0a 2a 2a  ityCk P1 P2 *.**
1f980 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
1f990 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
1f9a0 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
1f9b0 65 2e 20 20 50 75 73 68 20 6f 6e 74 6f 20 74 68  e.  Push onto th
1f9c0 65 0a 2a 2a 20 73 74 61 63 6b 20 74 68 65 20 74  e.** stack the t
1f9d0 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
1f9e0 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
1f9f0 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
1fa00 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
1fa10 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 70 75  ms are found, pu
1fa20 73 68 20 61 20 4e 55 4c 4c 20 6f 6e 74 6f 20 74  sh a NULL onto t
1fa30 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20  he stack..**.** 
1fa40 50 31 20 69 73 20 74 68 65 20 61 64 64 72 65 73  P1 is the addres
1fa50 73 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  s of a memory ce
1fa60 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
1fa70 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 2a 2a 20   the maximum.** 
1fa80 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
1fa90 64 20 65 72 72 6f 72 73 2e 20 20 41 74 20 6d 6f  d errors.  At mo
1faa0 73 74 20 6d 65 6d 5b 50 31 5d 20 65 72 72 6f 72  st mem[P1] error
1fab0 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
1fac0 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
1fad0 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
1fae0 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
1faf0 6e 20 61 73 20 6d 65 6d 5b 50 31 5d 20 65 72 72  n as mem[P1] err
1fb00 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
1fb10 2e 20 20 4d 65 6d 5b 50 31 5d 20 69 73 20 75 70  .  Mem[P1] is up
1fb20 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
1fb30 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1fb40 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
1fb50 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
1fb60 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
1fb70 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
1fb80 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
1fb90 0a 2a 2a 20 76 61 6c 75 65 73 20 6f 6e 20 74 68  .** values on th
1fba0 65 20 73 74 61 63 6b 2e 20 20 54 68 69 73 20 6f  e stack.  This o
1fbb0 70 63 6f 64 65 20 70 75 6c 6c 73 20 61 73 20 6d  pcode pulls as m
1fbc0 61 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20  any integers as 
1fbd0 69 74 0a 2a 2a 20 63 61 6e 20 6f 66 66 20 6f 66  it.** can off of
1fbe0 20 74 68 65 20 73 74 61 63 6b 20 61 6e 64 20 75   the stack and u
1fbf0 73 65 73 20 74 68 6f 73 65 20 6e 75 6d 62 65 72  ses those number
1fc00 73 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  s as the root pa
1fc10 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ges..**.** If P2
1fc20 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1fc30 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
1fc40 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
1fc50 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
1fc60 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
1fc70 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
1fc80 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1fc90 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
1fca0 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
1fcb0 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
1fcc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
1fcd0 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
1fce0 74 20 6e 52 6f 6f 74 3b 0a 20 20 69 6e 74 20 2a  t nRoot;.  int *
1fcf0 61 52 6f 6f 74 3b 0a 20 20 69 6e 74 20 6a 3b 0a  aRoot;.  int j;.
1fd00 20 20 69 6e 74 20 6e 45 72 72 3b 0a 20 20 63 68    int nErr;.  ch
1fd10 61 72 20 2a 7a 3b 0a 20 20 4d 65 6d 20 2a 70 6e  ar *z;.  Mem *pn
1fd20 45 72 72 3b 0a 0a 20 20 66 6f 72 28 6e 52 6f 6f  Err;..  for(nRoo
1fd30 74 3d 30 3b 20 26 70 54 6f 73 5b 2d 6e 52 6f 6f  t=0; &pTos[-nRoo
1fd40 74 5d 3e 3d 70 2d 3e 61 53 74 61 63 6b 3b 20 6e  t]>=p->aStack; n
1fd50 52 6f 6f 74 2b 2b 29 7b 0a 20 20 20 20 69 66 28  Root++){.    if(
1fd60 20 28 70 54 6f 73 5b 2d 6e 52 6f 6f 74 5d 2e 66   (pTos[-nRoot].f
1fd70 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
1fd80 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  =0 ) break;.  }.
1fd90 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
1fda0 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
1fdb0 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28 20  qliteMallocRaw( 
1fdc0 73 69 7a 65 6f 66 28 69 6e 74 2a 29 2a 28 6e 52  sizeof(int*)*(nR
1fdd0 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
1fde0 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
1fdf0 6e 6f 5f 6d 65 6d 3b 0a 20 20 6a 20 3d 20 70 4f  no_mem;.  j = pO
1fe00 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
1fe10 20 6a 3e 3d 30 20 26 26 20 6a 3c 70 2d 3e 6e 4d   j>=0 && j<p->nM
1fe20 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  em );.  pnErr = 
1fe30 26 70 2d 3e 61 4d 65 6d 5b 6a 5d 3b 0a 20 20 61  &p->aMem[j];.  a
1fe40 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
1fe50 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1fe60 3d 30 20 29 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  =0 );.  for(j=0;
1fe70 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
1fe80 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
1fe90 26 70 54 6f 73 5b 2d 6a 5d 3b 0a 20 20 20 20 61  &pTos[-j];.    a
1fea0 52 6f 6f 74 5b 6a 5d 20 3d 20 70 4d 65 6d 2d 3e  Root[j] = pMem->
1feb0 69 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  i;.  }.  aRoot[j
1fec0 5d 20 3d 20 30 3b 0a 20 20 70 6f 70 53 74 61 63  ] = 0;.  popStac
1fed0 6b 28 26 70 54 6f 73 2c 20 6e 52 6f 6f 74 29 3b  k(&pTos, nRoot);
1fee0 0a 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 7a 20 3d  .  pTos++;.  z =
1fef0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
1ff00 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
1ff10 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
1ff20 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 70 6e 45 72 72 2d 3e 69 2c 20 26 6e 45 72 72   pnErr->i, &nErr
1ff60 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 69 20 2d 3d  );.  pnErr->i -=
1ff70 20 6e 45 72 72 3b 0a 20 20 69 66 28 20 6e 45 72   nErr;.  if( nEr
1ff80 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
1ff90 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 20 20  rt( z==0 );.    
1ffa0 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pTos->flags = ME
1ffb0 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b  M_Null;.  }else{
1ffc0 0a 20 20 20 20 70 54 6f 73 2d 3e 7a 20 3d 20 7a  .    pTos->z = z
1ffd0 3b 0a 20 20 20 20 70 54 6f 73 2d 3e 6e 20 3d 20  ;.    pTos->n = 
1ffe0 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 70  strlen(z);.    p
1fff0 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Tos->flags = MEM
20000 5f 53 74 72 20 7c 20 4d 45 4d 5f 44 79 6e 20 7c  _Str | MEM_Dyn |
20010 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
20020 54 6f 73 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20  Tos->xDel = 0;. 
20030 20 7d 0a 20 20 70 54 6f 73 2d 3e 65 6e 63 20 3d   }.  pTos->enc =
20040 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20   SQLITE_UTF8;.  
20050 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
20060 65 45 6e 63 6f 64 69 6e 67 28 70 54 6f 73 2c 20  eEncoding(pTos, 
20070 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c  encoding);.  sql
20080 69 74 65 46 72 65 65 28 61 52 6f 6f 74 29 3b 0a  iteFree(aRoot);.
20090 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
200a0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
200b0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
200c0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
200d0 46 69 66 6f 57 72 69 74 65 20 2a 20 2a 20 2a 0a  FifoWrite * * *.
200e0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
200f0 69 6e 74 65 67 65 72 20 6f 6e 20 74 68 65 20 74  integer on the t
20100 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 0a  op of the stack.
20110 2a 2a 20 69 6e 74 6f 20 74 68 65 20 46 69 66 6f  ** into the Fifo
20120 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 69 66  ..*/.case OP_Fif
20130 6f 57 72 69 74 65 3a 20 7b 20 20 20 20 20 20 20  oWrite: {       
20140 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20   /* no-push */. 
20150 20 61 73 73 65 72 74 28 20 70 54 6f 73 3e 3d 70   assert( pTos>=p
20160 2d 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 73 71  ->aStack );.  sq
20170 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
20180 67 65 72 69 66 79 28 70 54 6f 73 29 3b 0a 20 20  gerify(pTos);.  
20190 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f 50  sqlite3VdbeFifoP
201a0 75 73 68 28 26 70 2d 3e 73 46 69 66 6f 2c 20 70  ush(&p->sFifo, p
201b0 54 6f 73 2d 3e 69 29 3b 0a 20 20 61 73 73 65 72  Tos->i);.  asser
201c0 74 28 20 28 70 54 6f 73 2d 3e 66 6c 61 67 73 20  t( (pTos->flags 
201d0 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b  & MEM_Dyn)==0 );
201e0 0a 20 20 70 54 6f 73 2d 2d 3b 0a 20 20 62 72 65  .  pTos--;.  bre
201f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20200 3a 20 46 69 66 6f 52 65 61 64 20 2a 20 50 32 20  : FifoRead * P2 
20210 2a 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  *.**.** Attempt 
20220 74 6f 20 72 65 61 64 20 61 20 73 69 6e 67 6c 65  to read a single
20230 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 74 68   integer from th
20240 65 20 46 69 66 6f 0a 2a 2a 20 61 6e 64 20 70 75  e Fifo.** and pu
20250 73 68 20 69 74 20 6f 6e 74 6f 20 74 68 65 20 73  sh it onto the s
20260 74 61 63 6b 2e 20 20 49 66 20 74 68 65 20 46 69  tack.  If the Fi
20270 66 6f 20 69 73 20 65 6d 70 74 79 0a 2a 2a 20 70  fo is empty.** p
20280 75 73 68 20 6e 6f 74 68 69 6e 67 20 62 75 74 20  ush nothing but 
20290 69 6e 73 74 65 61 64 20 6a 75 6d 70 20 74 6f 20  instead jump to 
202a0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  P2..*/.case OP_F
202b0 69 66 6f 52 65 61 64 3a 20 7b 0a 20 20 69 36 34  ifoRead: {.  i64
202c0 20 76 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   v;.  CHECK_FOR_
202d0 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 69 66 28  INTERRUPT;.  if(
202e0 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
202f0 50 6f 70 28 26 70 2d 3e 73 46 69 66 6f 2c 20 26  Pop(&p->sFifo, &
20300 76 29 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  v)==SQLITE_DONE 
20310 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
20320 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
20330 7b 0a 20 20 20 20 70 54 6f 73 2b 2b 3b 0a 20 20  {.    pTos++;.  
20340 20 20 70 54 6f 73 2d 3e 69 20 3d 20 76 3b 0a 20    pTos->i = v;. 
20350 20 20 20 70 54 6f 73 2d 3e 66 6c 61 67 73 20 3d     pTos->flags =
20360 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
20370 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
20380 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
20390 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a  IGGER./* Opcode:
203a0 20 43 6f 6e 74 65 78 74 50 75 73 68 20 2a 20 2a   ContextPush * *
203b0 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74   * .**.** Save t
203c0 68 65 20 63 75 72 72 65 6e 74 20 56 64 62 65 20  he current Vdbe 
203d0 63 6f 6e 74 65 78 74 20 73 75 63 68 20 74 68 61  context such tha
203e0 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
203f0 6f 72 65 64 20 62 79 20 61 20 43 6f 6e 74 65 78  ored by a Contex
20400 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20  tPop.** opcode. 
20410 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72  The context stor
20420 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  es the last inse
20430 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c  rt row id, the l
20440 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68  ast statement ch
20450 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61  ange.** count, a
20460 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  nd the current s
20470 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20  tatement change 
20480 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  count..*/.case O
20490 50 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b  P_ContextPush: {
204a0 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75          /* no-pu
204b0 73 68 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  sh */.  int i = 
204c0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54  p->contextStackT
204d0 6f 70 2b 2b 3b 0a 20 20 43 6f 6e 74 65 78 74 20  op++;.  Context 
204e0 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 61 73  *pContext;..  as
204f0 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20  sert( i>=0 );.  
20500 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68 69 73 20  /* FIX ME: This 
20510 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c 6f 63 61  should be alloca
20520 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ted as part of t
20530 68 65 20 76 64 62 65 20 61 74 20 63 6f 6d 70 69  he vdbe at compi
20540 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20 69 66 28  le-time */.  if(
20550 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78 74 53 74   i>=p->contextSt
20560 61 63 6b 44 65 70 74 68 20 29 7b 0a 20 20 20 20  ackDepth ){.    
20570 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44  p->contextStackD
20580 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20 20 20 20  epth = i+1;.    
20590 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63 4f 72 46  sqliteReallocOrF
205a0 72 65 65 28 28 76 6f 69 64 2a 2a 29 26 70 2d 3e  ree((void**)&p->
205b0 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c 20 73 69  contextStack, si
205c0 7a 65 6f 66 28 43 6f 6e 74 65 78 74 29 2a 28 69  zeof(Context)*(i
205d0 2b 31 29 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  +1));.    if( p-
205e0 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 3d 3d 30  >contextStack==0
205f0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
20600 20 20 7d 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d    }.  pContext =
20610 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63   &p->contextStac
20620 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e 74 65 78 74  k[i];.  pContext
20630 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  ->lastRowid = db
20640 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
20650 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65  Context->nChange
20660 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
20670 20 70 43 6f 6e 74 65 78 74 2d 3e 73 46 69 66 6f   pContext->sFifo
20680 20 3d 20 70 2d 3e 73 46 69 66 6f 3b 0a 20 20 73   = p->sFifo;.  s
20690 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f 49 6e  qlite3VdbeFifoIn
206a0 69 74 28 26 70 2d 3e 73 46 69 66 6f 29 3b 0a 20  it(&p->sFifo);. 
206b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
206c0 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70  code: ContextPop
206d0 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65   * * * .**.** Re
206e0 73 74 6f 72 65 20 74 68 65 20 56 64 62 65 20 63  store the Vdbe c
206f0 6f 6e 74 65 78 74 20 74 6f 20 74 68 65 20 73 74  ontext to the st
20700 61 74 65 20 69 74 20 77 61 73 20 69 6e 20 77 68  ate it was in wh
20710 65 6e 20 63 6f 6e 74 65 78 74 50 75 73 68 20 77  en contextPush w
20720 61 73 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75  as last.** execu
20730 74 65 64 2e 20 54 68 65 20 63 6f 6e 74 65 78 74  ted. The context
20740 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74   stores the last
20750 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20   insert row id, 
20760 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65  the last stateme
20770 6e 74 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  nt.** change cou
20780 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72  nt, and the curr
20790 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68  ent statement ch
207a0 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63  ange count..*/.c
207b0 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f  ase OP_ContextPo
207c0 70 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e  p: {        /* n
207d0 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 43 6f 6e 74  o-push */.  Cont
207e0 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 20 3d 20  ext *pContext = 
207f0 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b  &p->contextStack
20800 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  [--p->contextSta
20810 63 6b 54 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74  ckTop];.  assert
20820 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  ( p->contextStac
20830 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d  kTop>=0 );.  db-
20840 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 43 6f  >lastRowid = pCo
20850 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64  ntext->lastRowid
20860 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
20870 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e   pContext->nChan
20880 67 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ge;.  sqlite3Vdb
20890 65 46 69 66 6f 43 6c 65 61 72 28 26 70 2d 3e 73  eFifoClear(&p->s
208a0 46 69 66 6f 29 3b 0a 20 20 70 2d 3e 73 46 69 66  Fifo);.  p->sFif
208b0 6f 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 73 46  o = pContext->sF
208c0 69 66 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ifo;.  break;.}.
208d0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
208e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
208f0 49 47 47 45 52 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  IGGER */../* Opc
20900 6f 64 65 3a 20 4d 65 6d 53 74 6f 72 65 20 50 31  ode: MemStore P1
20910 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74   P2 *.**.** Writ
20920 65 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  e the top of the
20930 20 73 74 61 63 6b 20 69 6e 74 6f 20 6d 65 6d 6f   stack into memo
20940 72 79 20 6c 6f 63 61 74 69 6f 6e 20 50 31 2e 0a  ry location P1..
20950 2a 2a 20 50 31 20 73 68 6f 75 6c 64 20 62 65 20  ** P1 should be 
20960 61 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 20  a small integer 
20970 73 69 6e 63 65 20 73 70 61 63 65 20 69 73 20 61  since space is a
20980 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 66 6f 72 20  llocated.** for 
20990 61 6c 6c 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  all memory locat
209a0 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 30 20 61  ions between 0 a
209b0 6e 64 20 50 31 20 69 6e 63 6c 75 73 69 76 65 2e  nd P1 inclusive.
209c0 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 65  .**.** After the
209d0 20 64 61 74 61 20 69 73 20 73 74 6f 72 65 64 20   data is stored 
209e0 69 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  in the memory lo
209f0 63 61 74 69 6f 6e 2c 20 74 68 65 0a 2a 2a 20 73  cation, the.** s
20a00 74 61 63 6b 20 69 73 20 70 6f 70 70 65 64 20 6f  tack is popped o
20a10 6e 63 65 20 69 66 20 50 32 20 69 73 20 31 2e 20  nce if P2 is 1. 
20a20 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
20a30 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6f 72 69 67  then.** the orig
20a40 69 6e 61 6c 20 64 61 74 61 20 72 65 6d 61 69 6e  inal data remain
20a50 73 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2e 0a  s on the stack..
20a60 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 53 74  */.case OP_MemSt
20a70 6f 72 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ore: {        /*
20a80 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 61 73   no-push */.  as
20a90 73 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61  sert( pTos>=p->a
20aa0 53 74 61 63 6b 20 29 3b 0a 20 20 61 73 73 65 72  Stack );.  asser
20ab0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20ac0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4d 65 6d   pOp->p1<p->nMem
20ad0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
20ae0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 70  e3VdbeMemMove(&p
20af0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  ->aMem[pOp->p1],
20b00 20 70 54 6f 73 29 3b 0a 20 20 70 54 6f 73 2d 2d   pTos);.  pTos--
20b10 3b 0a 0a 20 20 2f 2a 20 49 66 20 50 32 20 69 73  ;..  /* If P2 is
20b20 20 30 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72   0 then fall thr
20b30 75 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 70  u to the next op
20b40 63 6f 64 65 2c 20 4f 50 5f 4d 65 6d 4c 6f 61 64  code, OP_MemLoad
20b50 2c 20 74 68 61 74 20 77 69 6c 6c 0a 20 20 2a 2a  , that will.  **
20b60 20 72 65 73 74 6f 72 65 20 74 68 65 20 74 6f 70   restore the top
20b70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20 74 6f   of the stack to
20b80 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 76 61   its original va
20b90 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  lue..  */.  if( 
20ba0 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 62  pOp->p2 ){.    b
20bb0 72 65 61 6b 3b 0a 20 20 7d 0a 7d 0a 2f 2a 20 4f  reak;.  }.}./* O
20bc0 70 63 6f 64 65 3a 20 4d 65 6d 4c 6f 61 64 20 50  pcode: MemLoad P
20bd0 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 75 73 68  1 * *.**.** Push
20be0 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76   a copy of the v
20bf0 61 6c 75 65 20 69 6e 20 6d 65 6d 6f 72 79 20 6c  alue in memory l
20c00 6f 63 61 74 69 6f 6e 20 50 31 20 6f 6e 74 6f 20  ocation P1 onto 
20c10 74 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a  the stack..**.**
20c20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
20c30 20 61 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20   a string, then 
20c40 74 68 65 20 76 61 6c 75 65 20 70 75 73 68 65 64  the value pushed
20c50 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
20c60 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67 20 74  .** the string t
20c70 68 61 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  hat is stored in
20c80 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
20c90 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 6d 65  tion.  If the me
20ca0 6d 6f 72 79 0a 2a 2a 20 6c 6f 63 61 74 69 6f 6e  mory.** location
20cb0 20 69 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79   is subsequently
20cc0 20 63 68 61 6e 67 65 64 20 28 75 73 69 6e 67 20   changed (using 
20cd0 4f 50 5f 4d 65 6d 53 74 6f 72 65 29 20 74 68 65  OP_MemStore) the
20ce0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 70  n the.** value p
20cf0 75 73 68 65 64 20 6f 6e 74 6f 20 74 68 65 20 73  ushed onto the s
20d00 74 61 63 6b 20 77 69 6c 6c 20 63 68 61 6e 67 65  tack will change
20d10 20 74 6f 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   too..*/.case OP
20d20 5f 4d 65 6d 4c 6f 61 64 3a 20 7b 0a 20 20 69 6e  _MemLoad: {.  in
20d30 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
20d40 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
20d50 20 69 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20   i<p->nMem );.  
20d60 70 54 6f 73 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  pTos++;.  sqlite
20d70 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
20d80 6f 70 79 28 70 54 6f 73 2c 20 26 70 2d 3e 61 4d  opy(pTos, &p->aM
20d90 65 6d 5b 69 5d 2c 20 4d 45 4d 5f 45 70 68 65 6d  em[i], MEM_Ephem
20da0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
20db0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20dc0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
20dd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
20de0 61 78 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  ax P1 * *.**.** 
20df0 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Set the value of
20e00 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 20   memory cell P1 
20e10 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
20e20 66 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  f its current va
20e30 6c 75 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  lue.** and the v
20e40 61 6c 75 65 20 6f 6e 20 74 68 65 20 74 6f 70 20  alue on the top 
20e50 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 20 20 54  of the stack.  T
20e60 68 65 20 73 74 61 63 6b 20 69 73 20 75 6e 63 68  he stack is unch
20e70 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  anged..**.** Thi
20e80 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
20e90 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
20ea0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
20eb0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
20ec0 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
20ed0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
20ee0 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
20ef0 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74  no-push */.  int
20f00 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
20f10 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
20f20 65 72 74 28 20 70 54 6f 73 3e 3d 70 2d 3e 61 53  ert( pTos>=p->aS
20f30 74 61 63 6b 20 29 3b 0a 20 20 61 73 73 65 72 74  tack );.  assert
20f40 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
20f50 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
20f60 26 70 2d 3e 61 4d 65 6d 5b 69 5d 3b 0a 20 20 73  &p->aMem[i];.  s
20f70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
20f80 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
20f90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
20fa0 6e 74 65 67 65 72 69 66 79 28 70 54 6f 73 29 3b  ntegerify(pTos);
20fb0 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 69 3c 70  .  if( pMem->i<p
20fc0 54 6f 73 2d 3e 69 29 7b 0a 20 20 20 20 70 4d 65  Tos->i){.    pMe
20fd0 6d 2d 3e 69 20 3d 20 70 54 6f 73 2d 3e 69 3b 0a  m->i = pTos->i;.
20fe0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
20ff0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
21000 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
21010 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
21020 3a 20 4d 65 6d 49 6e 63 72 20 50 31 20 50 32 20  : MemIncr P1 P2 
21030 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e  *.**.** Incremen
21040 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
21050 6c 75 65 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  lued memory cell
21060 20 50 32 20 62 79 20 74 68 65 20 76 61 6c 75 65   P2 by the value
21070 20 69 6e 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 49 74   in P1..**.** It
21080 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
21090 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
210a0 69 6f 6e 20 6f 6e 20 61 20 6d 65 6d 6f 72 79 20  ion on a memory 
210b0 63 65 6c 6c 20 74 68 61 74 20 64 6f 65 73 0a 2a  cell that does.*
210c0 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
210d0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
210e0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
210f0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
21100 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
21110 5f 4d 65 6d 49 6e 63 72 3a 20 7b 20 20 20 20 20  _MemIncr: {     
21120 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
21130 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
21140 70 32 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  p2;.  Mem *pMem;
21150 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
21160 26 26 20 69 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  && i<p->nMem );.
21170 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65    pMem = &p->aMe
21180 6d 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  m[i];.  assert( 
21190 70 4d 65 6d 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pMem->flags==MEM
211a0 5f 49 6e 74 20 29 3b 0a 20 20 70 4d 65 6d 2d 3e  _Int );.  pMem->
211b0 69 20 2b 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  i += pOp->p1;.  
211c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
211d0 6f 64 65 3a 20 49 66 4d 65 6d 50 6f 73 20 50 31  ode: IfMemPos P1
211e0 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74   P2 *.**.** If t
211f0 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 6d 6f  he value of memo
21200 72 79 20 63 65 6c 6c 20 50 31 20 69 73 20 31 20  ry cell P1 is 1 
21210 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
21220 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
21230 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
21240 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
21250 69 6f 6e 20 6f 6e 20 61 20 6d 65 6d 6f 72 79 20  ion on a memory 
21260 63 65 6c 6c 20 74 68 61 74 20 64 6f 65 73 0a 2a  cell that does.*
21270 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
21280 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
21290 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
212a0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
212b0 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
212c0 5f 49 66 4d 65 6d 50 6f 73 3a 20 7b 20 20 20 20  _IfMemPos: {    
212d0 20 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a      /* no-push *
212e0 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
212f0 3e 70 31 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  >p1;.  Mem *pMem
21300 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
21310 20 26 26 20 69 3c 70 2d 3e 6e 4d 65 6d 20 29 3b   && i<p->nMem );
21320 0a 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  .  pMem = &p->aM
21330 65 6d 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  em[i];.  assert(
21340 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pMem->flags==ME
21350 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
21360 4d 65 6d 2d 3e 69 3e 30 20 29 7b 0a 20 20 20 20  Mem->i>0 ){.    
21370 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
21380 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
21390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
213a0 4d 65 6d 4e 65 67 20 50 31 20 50 32 20 2a 0a 2a  MemNeg P1 P2 *.*
213b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
213c0 65 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  e of memory cell
213d0 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
213e0 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50   zero, jump to P
213f0 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  2. .**.** It is 
21400 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
21410 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
21420 6f 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  on a memory cell
21430 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
21440 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
21450 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
21460 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
21470 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
21480 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4d  ..*/.case OP_IfM
21490 65 6d 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  emNeg: {        
214a0 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
214b0 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
214c0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
214d0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
214e0 69 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  i<p->nMem );.  p
214f0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 69  Mem = &p->aMem[i
21500 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 65  ];.  assert( pMe
21510 6d 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  m->flags==MEM_In
21520 74 20 29 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d  t );.  if( pMem-
21530 3e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20  >i<0 ){.     pc 
21540 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
21550 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21560 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4d 65 6d 5a  * Opcode: IfMemZ
21570 65 72 6f 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  ero P1 P2 *.**.*
21580 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
21590 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  f memory cell P1
215a0 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a   is exactly 0, j
215b0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
215c0 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
215d0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
215e0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 6d 65 6d  ruction on a mem
215f0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 64 6f  ory cell that do
21600 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
21610 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
21620 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
21630 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
21640 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
21650 65 20 4f 50 5f 49 66 4d 65 6d 5a 65 72 6f 3a 20  e OP_IfMemZero: 
21660 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70  {        /* no-p
21670 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  ush */.  int i =
21680 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 4d 65 6d 20   pOp->p1;.  Mem 
21690 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
216a0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 4d   i>=0 && i<p->nM
216b0 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  em );.  pMem = &
216c0 70 2d 3e 61 4d 65 6d 5b 69 5d 3b 0a 20 20 61 73  p->aMem[i];.  as
216d0 73 65 72 74 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  sert( pMem->flag
216e0 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
216f0 69 66 28 20 70 4d 65 6d 2d 3e 69 3d 3d 30 20 29  if( pMem->i==0 )
21700 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
21710 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
21720 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21730 64 65 3a 20 4d 65 6d 4e 75 6c 6c 20 50 31 20 2a  de: MemNull P1 *
21740 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 61   *.**.** Store a
21750 20 4e 55 4c 4c 20 69 6e 20 6d 65 6d 6f 72 79 20   NULL in memory 
21760 63 65 6c 6c 20 50 31 0a 2a 2f 0a 63 61 73 65 20  cell P1.*/.case 
21770 4f 50 5f 4d 65 6d 4e 75 6c 6c 3a 20 7b 0a 20 20  OP_MemNull: {.  
21780 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21790 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
217a0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 73 71 6c 69 74  >nMem );.  sqlit
217b0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
217c0 28 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (&p->aMem[pOp->p
217d0 31 5d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  1]);.  break;.}.
217e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 49  ./* Opcode: MemI
217f0 6e 74 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a  nt P1 P2 *.**.**
21800 20 53 74 6f 72 65 20 74 68 65 20 69 6e 74 65 67   Store the integ
21810 65 72 20 76 61 6c 75 65 20 50 31 20 69 6e 20 6d  er value P1 in m
21820 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
21830 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 49 6e 74  /.case OP_MemInt
21840 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
21850 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p2>=0 && pOp-
21860 3e 70 32 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  >p2<p->nMem );. 
21870 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
21880 65 74 49 6e 74 36 34 28 26 70 2d 3e 61 4d 65 6d  etInt64(&p->aMem
21890 5b 70 4f 70 2d 3e 70 32 5d 2c 20 70 4f 70 2d 3e  [pOp->p2], pOp->
218a0 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  p1);.  break;.}.
218b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
218c0 6f 76 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  ove P1 P2 *.**.*
218d0 2a 20 4d 6f 76 65 20 74 68 65 20 63 6f 6e 74 65  * Move the conte
218e0 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  nt of memory cel
218f0 6c 20 50 32 20 6f 76 65 72 20 74 6f 20 6d 65 6d  l P2 over to mem
21900 6f 72 79 20 63 65 6c 6c 20 50 31 2e 0a 2a 2a 20  ory cell P1..** 
21910 41 6e 79 20 70 72 69 6f 72 20 63 6f 6e 74 65 6e  Any prior conten
21920 74 20 6f 66 20 50 31 20 69 73 20 65 72 61 73 65  t of P1 is erase
21930 64 2e 20 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  d.  Memory cell 
21940 50 32 20 69 73 20 6c 65 66 74 0a 2a 2a 20 63 6f  P2 is left.** co
21950 6e 74 61 69 6e 69 6e 67 20 61 20 4e 55 4c 4c 2e  ntaining a NULL.
21960 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
21970 6f 76 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ove: {.  assert(
21980 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21990 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4d 65 6d 20 29  Op->p1<p->nMem )
219a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
219b0 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
219c0 32 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 72  2<p->nMem );.  r
219d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
219e0 65 6d 4d 6f 76 65 28 26 70 2d 3e 61 4d 65 6d 5b  emMove(&p->aMem[
219f0 70 4f 70 2d 3e 70 31 5d 2c 20 26 70 2d 3e 61 4d  pOp->p1], &p->aM
21a00 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
21a10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21a20 6f 64 65 3a 20 41 67 67 53 74 65 70 20 50 31 20  ode: AggStep P1 
21a30 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P2 P3.**.** Exec
21a40 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
21a50 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
21a60 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
21a70 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 32 20  function has P2 
21a80 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 33 20 69  arguments.  P3 i
21a90 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
21aa0 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
21ab0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
21ac0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
21ad0 69 6f 6e 2e 20 20 55 73 65 20 6d 65 6d 6f 72 79  ion.  Use memory
21ae0 20 6c 6f 63 61 74 69 6f 6e 0a 2a 2a 20 50 31 20   location.** P1 
21af0 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
21b00 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 32  or..**.** The P2
21b10 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 70   arguments are p
21b20 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 73  opped from the s
21b30 74 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tack..*/.case OP
21b40 5f 41 67 67 53 74 65 70 3a 20 7b 20 20 20 20 20  _AggStep: {     
21b50 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
21b60 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
21b70 70 32 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  p2;.  int i;.  M
21b80 65 6d 20 2a 70 4d 65 6d 2c 20 2a 70 52 65 63 3b  em *pMem, *pRec;
21b90 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
21ba0 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
21bb0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
21bc0 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30  ..  assert( n>=0
21bd0 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 70 54   );.  pRec = &pT
21be0 6f 73 5b 31 2d 6e 5d 3b 0a 20 20 61 73 73 65 72  os[1-n];.  asser
21bf0 74 28 20 70 52 65 63 3e 3d 70 2d 3e 61 53 74 61  t( pRec>=p->aSta
21c00 63 6b 20 29 3b 0a 20 20 61 70 56 61 6c 20 3d 20  ck );.  apVal = 
21c10 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
21c20 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
21c30 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
21c40 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
21c50 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  ){.    apVal[i] 
21c60 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 74 6f 72  = pRec;.    stor
21c70 65 54 79 70 65 49 6e 66 6f 28 70 52 65 63 2c 20  eTypeInfo(pRec, 
21c80 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20  encoding);.  }. 
21c90 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 28 46 75   ctx.pFunc = (Fu
21ca0 6e 63 44 65 66 2a 29 70 4f 70 2d 3e 70 33 3b 0a  ncDef*)pOp->p3;.
21cb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21cc0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21cd0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78  p->nMem );.  ctx
21ce0 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
21cf0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
21d00 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20  ;.  pMem->n++;. 
21d10 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
21d20 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
21d30 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  .z = 0;.  ctx.s.
21d40 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
21d50 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
21d60 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20  tx.pColl = 0;.  
21d70 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 6e  if( ctx.pFunc->n
21d80 65 65 64 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20  eedCollSeq ){.  
21d90 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d    assert( pOp>p-
21da0 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
21db0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 33 74 79  rt( pOp[-1].p3ty
21dc0 70 65 3d 3d 50 33 5f 43 4f 4c 4c 53 45 51 20 29  pe==P3_COLLSEQ )
21dd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
21de0 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
21df0 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
21e00 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c  ctx.pColl = (Col
21e10 6c 53 65 71 20 2a 29 70 4f 70 5b 2d 31 5d 2e 70  lSeq *)pOp[-1].p
21e20 33 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46  3;.  }.  (ctx.pF
21e30 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78  unc->xStep)(&ctx
21e40 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 70  , n, apVal);.  p
21e50 6f 70 53 74 61 63 6b 28 26 70 54 6f 73 2c 20 6e  opStack(&pTos, n
21e60 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  );.  if( ctx.isE
21e70 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
21e80 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
21e90 3e 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65  >zErrMsg, sqlite
21ea0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
21eb0 78 2e 73 29 2c 20 28 63 68 61 72 2a 29 30 29 3b  x.s), (char*)0);
21ec0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
21ed0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71  _ERROR;.  }.  sq
21ee0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
21ef0 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62  ase(&ctx.s);.  b
21f00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21f10 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
21f20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P2 P3.**.** Exec
21f30 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
21f40 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
21f50 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
21f60 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
21f70 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
21f80 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
21f90 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
21fa0 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
21fb0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
21fc0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
21fd0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
21fe0 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 33   takes and.** P3
21ff0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
22000 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
22010 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
22020 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
22030 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
22040 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
22050 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
22060 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
22070 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
22080 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
22090 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
220a0 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
220b0 2a 2a 20 50 33 20 61 72 67 75 6d 65 6e 74 20 69  ** P3 argument i
220c0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
220d0 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
220e0 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
220f0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
22100 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
22110 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
22120 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
22130 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d   {        /* no-
22140 70 75 73 68 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  push */.  Mem *p
22150 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
22160 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22170 2d 3e 70 31 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  ->p1<p->nMem );.
22180 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65    pMem = &p->aMe
22190 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
221a0 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
221b0 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c  gs & ~(MEM_Null|
221c0 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a  MEM_Agg))==0 );.
221d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
221e0 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d  beMemFinalize(pM
221f0 65 6d 2c 20 28 46 75 6e 63 44 65 66 2a 29 70 4f  em, (FuncDef*)pO
22200 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63  p->p3);.  if( rc
22210 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
22220 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
22230 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
22240 73 67 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  sg, sqlite3_valu
22250 65 5f 74 65 78 74 28 70 4d 65 6d 29 2c 20 28 63  e_text(pMem), (c
22260 68 61 72 2a 29 30 29 3b 0a 20 20 7d 0a 20 20 62  har*)0);.  }.  b
22270 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
22280 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  f SQLITE_OMIT_VA
22290 43 55 55 4d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CUUM./* Opcode: 
222a0 56 61 63 75 75 6d 20 2a 20 2a 20 2a 0a 2a 2a 0a  Vacuum * * *.**.
222b0 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
222c0 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
222d0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
222e0 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
222f0 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
22300 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
22310 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
22320 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
22330 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
22340 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
22350 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
22360 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d 70 75          /* no-pu
22370 73 68 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  sh */.  if( sqli
22380 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
22390 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
223a0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20  e_to_misuse; .  
223b0 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
223c0 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
223d0 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71  g, db);.  if( sq
223e0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
223f0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22400 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
22410 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
22420 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69  ./* Opcode: Expi
22430 72 65 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  re P1 * *.**.** 
22440 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
22450 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
22460 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
22470 41 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65  An expired state
22480 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69  ment.** fails wi
22490 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  th an error code
224a0 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   of SQLITE_SCHEM
224b0 41 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20  A if it is ever 
224c0 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69  executed .** (vi
224d0 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  a sqlite3_step()
224e0 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20  )..** .** If P1 
224f0 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53  is 0, then all S
22500 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65  QL statements be
22510 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66  come expired. If
22520 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
22530 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  .** then only th
22540 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  e currently exec
22550 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uting statement 
22560 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f  is affected. .*/
22570 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
22580 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 2d   {        /* no-
22590 70 75 73 68 20 2a 2f 0a 20 20 69 66 28 20 21 70  push */.  if( !p
225a0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
225b0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
225c0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
225d0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
225e0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
225f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22600 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22610 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
22620 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
22630 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 0a 2a  eLock P1 P2 P3.*
22640 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
22650 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
22660 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
22670 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
22680 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
22690 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
226a0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
226b0 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  led. .**.** If P
226c0 31 20 69 73 20 6e 6f 74 20 6e 65 67 61 74 69 76  1 is not negativ
226d0 65 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  e, then it is th
226e0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
226f0 61 74 61 62 61 73 65 0a 2a 2a 20 69 6e 20 73 71  atabase.** in sq
22700 6c 69 74 65 33 2e 61 44 62 5b 5d 20 61 6e 64 20  lite3.aDb[] and 
22710 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 72  a read-lock is r
22720 65 71 75 69 72 65 64 2e 20 49 66 20 50 31 20 69  equired. If P1 i
22730 73 20 6e 65 67 61 74 69 76 65 2c 20 61 20 0a 2a  s negative, a .*
22740 2a 20 77 72 69 74 65 2d 6c 6f 63 6b 20 69 73 20  * write-lock is 
22750 72 65 71 75 69 72 65 64 2e 20 49 6e 20 74 68 69  required. In thi
22760 73 20 63 61 73 65 20 74 68 65 20 69 6e 64 65 78  s case the index
22770 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
22780 20 69 73 20 74 68 65 20 0a 2a 2a 20 61 62 73 6f   is the .** abso
22790 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 50 31  lute value of P1
227a0 20 6d 69 6e 75 73 20 6f 6e 65 20 28 69 44 62 20   minus one (iDb 
227b0 3d 20 61 62 73 28 50 31 29 20 2d 20 31 3b 29 20  = abs(P1) - 1;) 
227c0 61 6e 64 20 61 20 77 72 69 74 65 2d 6c 6f 63 6b  and a write-lock
227d0 20 69 73 0a 2a 2a 20 72 65 71 75 69 72 65 64 2e   is.** required.
227e0 20 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61   .**.** P2 conta
227f0 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
22800 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
22810 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 33  o lock..**.** P3
22820 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
22830 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
22840 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
22850 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
22860 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
22870 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
22880 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
22890 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
228a0 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
228b0 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
228c0 6b 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6e  k: {        /* n
228d0 6f 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20  o-push */.  int 
228e0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
228f0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
22900 3d 20 28 70 31 3c 30 29 3b 0a 20 20 69 66 28 20  = (p1<0);.  if( 
22910 69 73 57 72 69 74 65 4c 6f 63 6b 20 29 7b 0a 20  isWriteLock ){. 
22920 20 20 20 70 31 20 3d 20 28 2d 31 2a 70 31 29 2d     p1 = (-1*p1)-
22930 31 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  1;.  }.  rc = sq
22940 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
22950 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
22960 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
22970 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69 66  WriteLock);.  if
22980 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  ( rc==SQLITE_LOC
22990 4b 45 44 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  KED ){.    const
229a0 20 63 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73   char *z = (cons
229b0 74 20 63 68 61 72 20 2a 29 70 4f 70 2d 3e 70 33  t char *)pOp->p3
229c0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
229d0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
229e0 73 67 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  sg, "database ta
229f0 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 22  ble is locked: "
22a00 2c 20 7a 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  , z, (char*)0);.
22a10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
22a20 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
22a30 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
22a40 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
22a50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22a60 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
22a70 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 50 33 0a  : VBegin * * P3.
22a80 2a 2a 0a 2a 2a 20 50 33 20 61 20 70 6f 69 6e 74  **.** P3 a point
22a90 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
22aa0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
22ab0 20 43 61 6c 6c 20 74 68 65 20 78 42 65 67 69 6e   Call the xBegin
22ac0 20 6d 65 74 68 6f 64 20 0a 2a 2a 20 66 6f 72 20   method .** for 
22ad0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
22ae0 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
22af0 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f     /* no-push */
22b00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22b10 74 61 62 42 65 67 69 6e 28 64 62 2c 20 28 73 71  tabBegin(db, (sq
22b20 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 70 4f 70  lite3_vtab *)pOp
22b30 2d 3e 70 33 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ->p3);.  break;.
22b40 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
22b50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22b60 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
22b70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
22b80 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
22b90 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
22ba0 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  * P3.**.** P3 is
22bb0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
22bc0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
22bd0 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c  database P1. Cal
22be0 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65  l the xCreate me
22bf0 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74  thod.** for that
22c00 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
22c10 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 20 20 20  OP_VCreate: {   
22c20 2f 2a 20 6e 6f 2d 70 75 73 68 20 2a 2f 0a 20 20  /* no-push */.  
22c30 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
22c40 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
22c50 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
22c60 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
22c70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
22c80 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
22c90 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
22ca0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22cb0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
22cc0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
22cd0 73 74 72 6f 79 20 50 31 20 2a 20 50 33 0a 2a 2a  stroy P1 * P3.**
22ce0 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 61  .** P3 is the na
22cf0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
22d00 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
22d10 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
22d20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
22d30 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
22d40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
22d50 73 74 72 6f 79 3a 20 7b 20 20 20 2f 2a 20 6e 6f  stroy: {   /* no
22d60 2d 70 75 73 68 20 2a 2f 0a 20 20 70 2d 3e 69 6e  -push */.  p->in
22d70 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
22d80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
22d90 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
22da0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
22db0 70 33 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  p3);.  p->inVtab
22dc0 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
22dd0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
22de0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
22df0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
22e00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22e10 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
22e20 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
22e30 50 31 20 2a 20 50 33 0a 2a 2a 0a 2a 2a 20 50 33  P1 * P3.**.** P3
22e40 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
22e50 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
22e60 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
22e70 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
22e80 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
22e90 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
22ea0 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
22eb0 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
22ec0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
22ed0 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
22ee0 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
22ef0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
22f00 3a 20 7b 20 20 20 2f 2a 20 6e 6f 2d 70 75 73 68  : {   /* no-push
22f10 20 2a 2f 0a 20 20 43 75 72 73 6f 72 20 2a 70 43   */.  Cursor *pC
22f20 75 72 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  ur = 0;.  sqlite
22f30 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
22f40 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
22f50 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
22f60 2a 70 56 74 61 62 20 3d 20 28 73 71 6c 69 74 65  *pVtab = (sqlite
22f70 33 5f 76 74 61 62 20 2a 29 28 70 4f 70 2d 3e 70  3_vtab *)(pOp->p
22f80 33 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f  3);.  sqlite3_mo
22f90 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20  dule *pModule = 
22fa0 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
22fb0 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
22fc0 3b 0a 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  ;..  assert(pVta
22fd0 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
22fe0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
22ff0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
23000 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
23010 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  suse;.  rc = pMo
23020 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
23030 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29  b, &pVtabCursor)
23040 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
23050 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
23060 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23070 6d 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51  misuse;.  if( SQ
23080 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
23090 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65     /* Initialise
230a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
230b0 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
230c0 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73  */.    pVtabCurs
230d0 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  or->pVtab = pVta
230e0 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  b;..    /* Initi
230f0 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73 6f  alise vdbe curso
23100 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20  r object */.    
23110 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
23120 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
23130 2c 20 2d 31 29 3b 0a 20 20 20 20 69 66 28 20 70  , -1);.    if( p
23140 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
23150 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
23160 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
23170 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
23180 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
23190 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
231a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
231b0 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
231c0 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
231d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
231e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
231f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
23200 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
23210 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23220 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
23230 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
23240 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 50  P1 P2 P3.**.** P
23250 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
23260 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
23270 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
23280 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
23290 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
232a0 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
232b0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  empty..**.** P3 
232c0 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
232d0 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
232e0 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
232f0 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
23300 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
23310 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
23320 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
23330 74 68 65 20 50 33 20 73 74 72 69 6e 67 20 69 73  the P3 string is
23340 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
23350 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
23360 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
23370 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
23380 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
23390 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
233a0 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
233b0 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
233c0 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
233d0 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
233e0 6f 20 78 46 69 6c 74 65 72 20 69 73 20 74 68 65  o xFilter is the
233f0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 73   top of the.** s
23400 74 61 63 6b 2e 20 20 4e 65 78 74 20 64 6f 77 6e  tack.  Next down
23410 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 69 73   on the stack is
23420 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
23430 74 65 72 2e 20 20 42 65 6e 65 61 74 68 20 74 68  ter.  Beneath th
23440 65 0a 2a 2a 20 6e 65 78 74 20 6f 66 20 73 74 61  e.** next of sta
23450 63 6b 20 61 72 65 20 61 72 67 63 20 61 64 64 69  ck are argc addi
23460 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
23470 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
23480 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
23490 20 61 73 20 61 72 67 76 2e 20 54 68 65 20 74 6f   as argv. The to
234a0 70 6d 6f 73 74 20 70 61 72 61 6d 65 74 65 72 20  pmost parameter 
234b0 28 69 2e 65 2e 20 33 72 64 20 65 6c 65 6d 65 6e  (i.e. 3rd elemen
234c0 74 20 70 6f 70 70 65 64 20 66 72 6f 6d 0a 2a 2a  t popped from.**
234d0 20 74 68 65 20 73 74 61 63 6b 29 20 62 65 63 6f   the stack) beco
234e0 6d 65 73 20 61 72 67 76 5b 61 72 67 63 2d 31 5d  mes argv[argc-1]
234f0 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
23500 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  xFilter..**.** T
23510 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
23520 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 2c   plan parameter,
23530 20 61 72 67 63 2c 20 61 6e 64 20 61 6c 6c 20 61   argc, and all a
23540 72 67 76 20 73 74 61 63 6b 20 76 61 6c 75 65 73  rgv stack values
23550 20 0a 2a 2a 20 61 72 65 20 70 6f 70 70 65 64 20   .** are popped 
23560 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 20 62  from the stack b
23570 65 66 6f 72 65 20 74 68 69 73 20 69 6e 73 74 72  efore this instr
23580 75 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65 73  uction completes
23590 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
235a0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
235b0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
235c0 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
235d0 6f 75 6c 64 20 62 65 20 0a 2a 2a 20 65 6d 70 74  ould be .** empt
235e0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
235f0 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6e 6f  ilter: {   /* no
23600 2d 70 75 73 68 20 2a 2f 0a 20 20 69 6e 74 20 6e  -push */.  int n
23610 41 72 67 3b 0a 0a 20 20 63 6f 6e 73 74 20 73 71  Arg;..  const sq
23620 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
23630 6f 64 75 6c 65 3b 0a 0a 20 20 43 75 72 73 6f 72  odule;..  Cursor
23640 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
23650 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23660 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
23670 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 4d 6f  bCursor );.  pMo
23680 64 75 6c 65 20 3d 20 70 43 75 72 2d 3e 70 56 74  dule = pCur->pVt
23690 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d  abCursor->pVtab-
236a0 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
236b0 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
236c0 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
236d0 61 72 61 6d 65 74 65 72 73 20 6f 66 66 20 74 68  arameters off th
236e0 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
236f0 63 6b 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ck. */.  assert(
23700 20 28 26 70 54 6f 73 5b 2d 31 5d 29 3e 3d 70 2d   (&pTos[-1])>=p-
23710 3e 61 53 74 61 63 6b 20 29 3b 0a 20 20 61 73 73  >aStack );.  ass
23720 65 72 74 28 20 28 70 54 6f 73 5b 30 5d 2e 66 6c  ert( (pTos[0].fl
23730 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
23740 26 26 20 70 54 6f 73 5b 2d 31 5d 2e 66 6c 61 67  && pTos[-1].flag
23750 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
23760 6e 41 72 67 20 3d 20 70 54 6f 73 5b 2d 31 5d 2e  nArg = pTos[-1].
23770 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
23780 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
23790 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e  od */.  {.    in
237a0 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69  t res = 0;.    i
237b0 6e 74 20 69 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a  nt i;.    Mem **
237c0 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
237d0 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b  ;.    for(i = 0;
237e0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
237f0 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
23800 26 70 54 6f 73 5b 69 2b 31 2d 32 2d 6e 41 72 67  &pTos[i+1-2-nArg
23810 5d 3b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79  ];.      storeTy
23820 70 65 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d 2c  peInfo(apArg[i],
23830 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   0);.    }..    
23840 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
23850 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
23860 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
23870 75 73 65 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74  use;.    p->inVt
23880 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20  abMethod = 1;.  
23890 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
238a0 78 46 69 6c 74 65 72 28 70 43 75 72 2d 3e 70 56  xFilter(pCur->pV
238b0 74 61 62 43 75 72 73 6f 72 2c 20 70 54 6f 73 2d  tabCursor, pTos-
238c0 3e 69 2c 20 70 4f 70 2d 3e 70 33 2c 20 6e 41 72  >i, pOp->p3, nAr
238d0 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70  g, apArg);.    p
238e0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
238f0 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d   0;.    if( rc==
23900 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
23910 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
23920 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
23930 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
23940 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
23950 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
23960 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23970 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66  _misuse;..    if
23980 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
23990 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
239a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
239b0 20 50 6f 70 20 74 68 65 20 69 6e 64 65 78 20 6e   Pop the index n
239c0 75 6d 62 65 72 2c 20 61 72 67 63 20 76 61 6c 75  umber, argc valu
239d0 65 20 61 6e 64 20 70 61 72 61 6d 65 74 65 72 73  e and parameters
239e0 20 6f 66 66 20 74 68 65 20 73 74 61 63 6b 20 2a   off the stack *
239f0 2f 0a 20 20 70 6f 70 53 74 61 63 6b 28 26 70 54  /.  popStack(&pT
23a00 6f 73 2c 20 32 2b 6e 41 72 67 29 3b 0a 20 20 62  os, 2+nArg);.  b
23a10 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
23a20 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
23a30 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
23a40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23a50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
23a60 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 6f 77 69  /* Opcode: VRowi
23a70 64 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  d P1 * *.**.** P
23a80 75 73 68 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ush an integer o
23a90 6e 74 6f 20 74 68 65 20 73 74 61 63 6b 20 77 68  nto the stack wh
23aa0 69 63 68 20 69 73 20 74 68 65 20 72 6f 77 69 64  ich is the rowid
23ab0 20 6f 66 0a 2a 2a 20 74 68 65 20 76 69 72 74 75   of.** the virtu
23ac0 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
23ad0 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  e P1 cursor is p
23ae0 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2f 0a 63  ointing to..*/.c
23af0 61 73 65 20 4f 50 5f 56 52 6f 77 69 64 3a 20 7b  ase OP_VRowid: {
23b00 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
23b10 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
23b20 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 75  ;..  Cursor *pCu
23b30 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
23b40 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23b50 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
23b60 6f 72 20 29 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  or );.  pModule 
23b70 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
23b80 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64  sor->pVtab->pMod
23b90 75 6c 65 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75  ule;.  if( pModu
23ba0 6c 65 2d 3e 78 52 6f 77 69 64 3d 3d 30 20 29 7b  le->xRowid==0 ){
23bb0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
23bc0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
23bd0 67 2c 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20  g, "Unsupported 
23be0 6d 6f 64 75 6c 65 20 6f 70 65 72 61 74 69 6f 6e  module operation
23bf0 3a 20 78 52 6f 77 69 64 22 2c 20 30 29 3b 0a 20  : xRowid", 0);. 
23c00 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
23c10 52 52 4f 52 3b 0a 20 20 7d 20 65 6c 73 65 20 7b  RROR;.  } else {
23c20 0a 20 20 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  .    sqlite_int6
23c30 34 20 69 52 6f 77 3b 0a 0a 20 20 20 20 69 66 28  4 iRow;..    if(
23c40 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
23c50 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
23c60 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
23c70 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
23c80 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 75 72 2d  le->xRowid(pCur-
23c90 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 69  >pVtabCursor, &i
23ca0 52 6f 77 29 3b 0a 20 20 20 20 69 66 28 20 73 71  Row);.    if( sq
23cb0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
23cc0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
23cd0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
23ce0 20 20 20 70 54 6f 73 2b 2b 3b 0a 20 20 20 20 70     pTos++;.    p
23cf0 54 6f 73 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Tos->flags = MEM
23d00 5f 49 6e 74 3b 0a 20 20 20 20 70 54 6f 73 2d 3e  _Int;.    pTos->
23d10 69 20 3d 20 69 52 6f 77 3b 0a 20 20 7d 0a 0a 20  i = iRow;.  }.. 
23d20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
23d30 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
23d40 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
23d50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23d60 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23d70 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
23d80 6c 75 6d 6e 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  lumn P1 P2 *.**.
23d90 2a 2a 20 50 75 73 68 20 6f 6e 74 6f 20 74 68 65  ** Push onto the
23da0 20 73 74 61 63 6b 20 74 68 65 20 76 61 6c 75 65   stack the value
23db0 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
23dc0 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
23dd0 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
23de0 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
23df0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
23e00 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2f 0a 63 61  inting to..*/.ca
23e10 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
23e20 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
23e30 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
23e40 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 75  ;..  Cursor *pCu
23e50 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
23e60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23e70 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
23e80 6f 72 20 29 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  or );.  pModule 
23e90 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
23ea0 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64  sor->pVtab->pMod
23eb0 75 6c 65 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75  ule;.  if( pModu
23ec0 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 3d 3d 30 20 29  le->xColumn==0 )
23ed0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
23ee0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
23ef0 73 67 2c 20 22 55 6e 73 75 70 70 6f 72 74 65 64  sg, "Unsupported
23f00 20 6d 6f 64 75 6c 65 20 6f 70 65 72 61 74 69 6f   module operatio
23f10 6e 3a 20 78 43 6f 6c 75 6d 6e 22 2c 20 30 29 3b  n: xColumn", 0);
23f20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
23f30 5f 45 52 52 4f 52 3b 0a 20 20 7d 20 65 6c 73 65  _ERROR;.  } else
23f40 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63   {.    sqlite3_c
23f50 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
23f60 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43 6f  .    memset(&sCo
23f70 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66  ntext, 0, sizeof
23f80 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 20  (sContext));.   
23f90 20 73 43 6f 6e 74 65 78 74 2e 73 2e 66 6c 61 67   sContext.s.flag
23fa0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
23fb0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
23fc0 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
23fd0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
23fe0 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20  isuse;.    rc = 
23ff0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
24000 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
24010 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
24020 4f 70 2d 3e 70 32 29 3b 0a 0a 20 20 20 20 2f 2a  Op->p2);..    /*
24030 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
24040 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
24050 20 74 6f 20 74 68 65 20 74 6f 70 20 6f 66 20 74   to the top of t
24060 68 65 20 73 74 61 63 6b 2e 20 57 65 0a 20 20 20  he stack. We.   
24070 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61   ** do this rega
24080 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
24090 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f  r or not an erro
240a0 72 20 6f 63 63 75 72 65 64 20 74 6f 20 65 6e 73  r occured to ens
240b0 75 72 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 64  ure any.    ** d
240c0 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f  ynamic allocatio
240d0 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20  n in sContext.s 
240e0 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69  (a Mem struct) i
240f0 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 20  s  released..   
24100 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
24110 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
24120 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
24130 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 54  ncoding);.    pT
24140 6f 73 2b 2b 3b 0a 20 20 20 20 70 54 6f 73 2d 3e  os++;.    pTos->
24150 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 73  flags = 0;.    s
24160 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
24170 65 28 70 54 6f 73 2c 20 26 73 43 6f 6e 74 65 78  e(pTos, &sContex
24180 74 2e 73 29 3b 0a 0a 20 20 20 20 69 66 28 20 73  t.s);..    if( s
24190 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
241a0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
241b0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
241c0 20 7d 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d   }.  .  break;.}
241d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
241e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
241f0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
24200 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
24210 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
24220 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
24230 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
24240 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
24250 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
24260 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
24270 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
24280 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
24290 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
242a0 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
242b0 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
242c0 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
242d0 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
242e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
242f0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
24300 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
24310 74 3a 20 7b 20 20 20 2f 2a 20 6e 6f 2d 70 75 73  t: {   /* no-pus
24320 68 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 71 6c  h */.  const sql
24330 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
24340 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 20  dule;.  int res 
24350 3d 20 30 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a  = 0;..  Cursor *
24360 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
24370 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24380 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
24390 75 72 73 6f 72 20 29 3b 0a 20 20 70 4d 6f 64 75  ursor );.  pModu
243a0 6c 65 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  le = pCur->pVtab
243b0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
243c0 4d 6f 64 75 6c 65 3b 0a 20 20 69 66 28 20 70 4d  Module;.  if( pM
243d0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 3d 3d 30 20  odule->xNext==0 
243e0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
243f0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
24400 4d 73 67 2c 20 22 55 6e 73 75 70 70 6f 72 74 65  Msg, "Unsupporte
24410 64 20 6d 6f 64 75 6c 65 20 6f 70 65 72 61 74 69  d module operati
24420 6f 6e 3a 20 78 4e 65 78 74 22 2c 20 30 29 3b 0a  on: xNext", 0);.
24430 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
24440 45 52 52 4f 52 3b 0a 20 20 7d 20 65 6c 73 65 20  ERROR;.  } else 
24450 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  {.    /* Invoke 
24460 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
24470 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
24480 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
24490 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a  y for the.    **
244a0 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
244b0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
244c0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
244d0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
244e0 6e 67 0a 20 20 20 20 2a 2a 20 78 4e 65 78 74 28  ng.    ** xNext(
244f0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
24500 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
24510 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
24520 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
24530 74 20 0a 20 20 20 20 2a 2a 20 64 61 74 61 20 69  t .    ** data i
24540 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
24550 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
24560 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
24570 6f 6c 75 6d 6e 20 6f 72 0a 20 20 20 20 2a 2a 20  olumn or.    ** 
24580 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
24590 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
245a0 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
245b0 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
245c0 6f 72 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  or..    */.    i
245d0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
245e0 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
245f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
24600 73 65 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  se;.    p->inVta
24610 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20  bMethod = 1;.   
24620 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
24630 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62  Next(pCur->pVtab
24640 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 70 2d 3e  Cursor);.    p->
24650 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
24660 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
24670 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
24680 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
24690 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62  xEof(pCur->pVtab
246a0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
246b0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
246c0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
246d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
246e0 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20  isuse;..    if( 
246f0 21 72 65 73 20 29 7b 0a 20 20 20 20 20 20 2f 2a  !res ){.      /*
24700 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
24710 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
24720 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
24730 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
24740 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23   }..  break;.}.#
24750 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
24760 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24770 45 20 2a 2f 0a 0a 0a 23 69 66 6e 64 65 66 20 53  E */...#ifndef S
24780 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24790 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
247a0 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
247b0 20 50 33 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20   P3.**.** P3 is 
247c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
247d0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
247e0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
247f0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
24800 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
24810 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
24820 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
24830 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
24840 65 73 0a 2a 2a 20 61 72 65 20 74 61 6b 65 6e 20  es.** are taken 
24850 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 20 74  from the stack t
24860 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
24870 70 64 61 74 65 20 69 6e 76 6f 63 61 74 69 6f 6e  pdate invocation
24880 2e 20 54 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  . The.** value o
24890 6e 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  n the top of the
248a0 20 73 74 61 63 6b 20 63 6f 72 72 65 73 70 6f 6e   stack correspon
248b0 64 73 20 74 6f 20 74 68 65 20 70 32 74 68 20 65  ds to the p2th e
248c0 6c 65 6d 65 6e 74 20 0a 2a 2a 20 6f 66 20 74 68  lement .** of th
248d0 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
248e0 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
248f0 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
24900 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
24910 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
24920 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
24930 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
24940 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
24950 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
24960 20 50 32 2d 74 68 20 65 6c 65 6d 65 6e 74 20 64   P2-th element d
24970 6f 77 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 74  own.** on the st
24980 61 63 6b 29 20 69 73 20 74 68 65 20 72 6f 77 69  ack) is the rowi
24990 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
249a0 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
249b0 5d 20 69 73 0a 2a 2a 20 4e 55 4c 4c 20 74 68 65  ] is.** NULL the
249c0 6e 20 6e 6f 20 64 65 6c 65 74 69 6f 6e 20 6f 63  n no deletion oc
249d0 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b  curs.  The argv[
249e0 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68  1] element is th
249f0 65 20 72 6f 77 69 64 0a 2a 2a 20 6f 66 20 74 68  e rowid.** of th
24a00 65 20 6e 65 77 20 72 6f 77 2e 20 20 54 68 69 73  e new row.  This
24a10 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
24a20 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
24a30 20 74 61 62 6c 65 0a 2a 2a 20 73 65 6c 65 63 74   table.** select
24a40 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 66   the new rowid f
24a50 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
24a60 68 69 67 68 65 72 20 65 6c 65 6d 65 6e 74 73 20  higher elements 
24a70 69 6e 20 74 68 65 0a 2a 2a 20 73 74 61 63 6b 20  in the.** stack 
24a80 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 6f  are the values o
24a90 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
24aa0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
24ab0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
24ac0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
24ad0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
24ae0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
24af0 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
24b00 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
24b10 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
24b20 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
24b30 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
24b40 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
24b50 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
24b60 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
24b70 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
24b80 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
24b90 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
24ba0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
24bb0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
24bc0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
24bd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
24be0 64 61 74 65 3a 20 7b 20 20 20 2f 2a 20 6e 6f 2d  date: {   /* no-
24bf0 70 75 73 68 20 2a 2f 0a 20 20 73 71 6c 69 74 65  push */.  sqlite
24c00 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
24c10 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
24c20 28 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 73 71 6c  (pOp->p3);.  sql
24c30 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
24c40 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
24c50 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
24c60 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
24c70 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
24c80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
24c90 74 79 70 65 3d 3d 50 33 5f 56 54 41 42 20 29 3b  type==P3_VTAB );
24ca0 0a 20 20 69 66 28 20 70 4d 6f 64 75 6c 65 2d 3e  .  if( pModule->
24cb0 78 55 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20  xUpdate==0 ){.  
24cc0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
24cd0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
24ce0 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61 62 6c 65  "read-only table
24cf0 22 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  ", 0);.    rc = 
24d00 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
24d10 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69  }else{.    int i
24d20 3b 0a 20 20 20 20 73 71 6c 69 74 65 5f 69 6e 74  ;.    sqlite_int
24d30 36 34 20 72 6f 77 69 64 3b 0a 20 20 20 20 4d 65  64 rowid;.    Me
24d40 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61  m **apArg = p->a
24d50 70 41 72 67 3b 0a 20 20 20 20 4d 65 6d 20 2a 70  pArg;.    Mem *p
24d60 58 20 3d 20 26 70 54 6f 73 5b 31 2d 6e 41 72 67  X = &pTos[1-nArg
24d70 5d 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30  ];.    for(i = 0
24d80 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 2c 20 70  ; i<nArg; i++, p
24d90 58 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f 72  X++){.      stor
24da0 65 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30 29  eTypeInfo(pX, 0)
24db0 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
24dc0 20 3d 20 70 58 3b 0a 20 20 20 20 7d 0a 20 20 20   = pX;.    }.   
24dd0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
24de0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
24df0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
24e00 73 75 73 65 3b 0a 20 20 20 20 73 71 6c 69 74 65  suse;.    sqlite
24e10 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29  3VtabLock(pVtab)
24e20 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
24e30 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61  le->xUpdate(pVta
24e40 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20  b, nArg, apArg, 
24e50 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 73 71 6c  &rowid);.    sql
24e60 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 70  ite3VtabUnlock(p
24e70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 73  Vtab);.    if( s
24e80 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
24e90 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
24ea0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
24eb0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 26     if( pOp->p1 &
24ec0 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rc==SQLITE_OK 
24ed0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
24ee0 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
24ef0 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
24f00 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
24f10 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
24f20 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
24f30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 6f  ;.    }.  }.  po
24f40 70 53 74 61 63 6b 28 26 70 54 6f 73 2c 20 6e 41  pStack(&pTos, nA
24f50 72 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  rg);.  break;.}.
24f60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
24f70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24f80 4c 45 20 2a 2f 0a 0a 2f 2a 20 41 6e 20 6f 74 68  LE */../* An oth
24f90 65 72 20 6f 70 63 6f 64 65 20 69 73 20 69 6c 6c  er opcode is ill
24fa0 65 67 61 6c 2e 2e 2e 0a 2a 2f 0a 64 65 66 61 75  egal....*/.defau
24fb0 6c 74 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  lt: {.  assert( 
24fc0 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
24fd0 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
24fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
24ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
25000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
25010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
25020 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
25030 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
25040 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
25050 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
25060 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
25070 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
25080 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
25090 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
250a0 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
250b0 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
250c0 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
250d0 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
250e0 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
250f0 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
25100 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
25110 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
25120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
25130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
25140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
25150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
25160 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 4d 61      }..    /* Ma
25170 6b 65 20 73 75 72 65 20 74 68 65 20 73 74 61 63  ke sure the stac
25180 6b 20 6c 69 6d 69 74 20 77 61 73 20 6e 6f 74 20  k limit was not 
25190 65 78 63 65 65 64 65 64 20 2a 2f 0a 20 20 20 20  exceeded */.    
251a0 61 73 73 65 72 74 28 20 70 54 6f 73 3c 3d 70 53  assert( pTos<=pS
251b0 74 61 63 6b 4c 69 6d 69 74 20 29 3b 0a 0a 23 69  tackLimit );..#i
251c0 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
251d0 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 6c 6f  E.    {.      lo
251e0 6e 67 20 6c 6f 6e 67 20 65 6c 61 70 73 65 20 3d  ng long elapse =
251f0 20 68 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72   hwtime() - star
25200 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79  t;.      pOp->cy
25210 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 3b 0a  cles += elapse;.
25220 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
25230 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20  ;.#if 0.        
25240 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20  fprintf(stdout, 
25250 22 25 31 30 6c 6c 64 20 22 2c 20 65 6c 61 70 73  "%10lld ", elaps
25260 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  e);.        sqli
25270 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
25280 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
25290 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b  p->aOp[origPc]);
252a0 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65  .#endif.    }.#e
252b0 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65  ndif..    /* The
252c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
252d0 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  adds nothing to 
252e0 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74  the actual funct
252f0 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20  ionality.    ** 
25300 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
25310 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65   It is only here
25320 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
25330 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20   debugging..    
25340 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20  ** On the other 
25350 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75  hand, it does bu
25360 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76  rn CPU cycles ev
25370 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
25380 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c  .    ** the eval
25390 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20  uator loop.  So 
253a0 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20  we can leave it 
253b0 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20  out when NDEBUG 
253c0 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
253d0 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
253e0 47 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  G.    /* Sanity 
253f0 63 68 65 63 6b 69 6e 67 20 6f 6e 20 74 68 65 20  checking on the 
25400 74 6f 70 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  top element of t
25410 68 65 20 73 74 61 63 6b 2e 20 49 66 20 74 68 65  he stack. If the
25420 20 70 72 65 76 69 6f 75 73 0a 20 20 20 20 2a 2a   previous.    **
25430 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 61 73   instruction was
25440 20 56 4e 6f 43 68 61 6e 67 65 2c 20 74 68 65 6e   VNoChange, then
25450 20 74 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64   the flags field
25460 20 6f 66 20 74 68 65 20 74 6f 70 0a 20 20 20 20   of the top.    
25470 2a 2a 20 6f 66 20 74 68 65 20 73 74 61 63 6b 20  ** of the stack 
25480 69 73 20 73 65 74 20 74 6f 20 30 2e 20 54 68 69  is set to 0. Thi
25490 73 20 69 73 20 74 65 63 68 6e 69 63 61 6c 6c 79  s is technically
254a0 20 69 6e 76 61 6c 69 64 20 66 6f 72 20 61 20 6d   invalid for a m
254b0 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
254c0 6c 2c 20 73 6f 20 61 76 6f 69 64 20 63 61 6c 6c  l, so avoid call
254d0 69 6e 67 20 4d 65 6d 53 61 6e 69 74 79 28 29 20  ing MemSanity() 
254e0 69 6e 20 74 68 69 73 20 63 61 73 65 2e 0a 20 20  in this case..  
254f0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 54 6f    */.    if( pTo
25500 73 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 26 26 20  s>=p->aStack && 
25510 70 54 6f 73 2d 3e 66 6c 61 67 73 20 29 7b 0a 20  pTos->flags ){. 
25520 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
25530 4d 65 6d 53 61 6e 69 74 79 28 70 54 6f 73 29 3b  MemSanity(pTos);
25540 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
25550 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
25560 70 2d 3e 6e 4f 70 20 29 3b 0a 23 69 66 64 65 66  p->nOp );.#ifdef
25570 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25580 20 20 2f 2a 20 43 6f 64 65 20 66 6f 72 20 74 72    /* Code for tr
25590 61 63 69 6e 67 20 74 68 65 20 76 64 62 65 20 73  acing the vdbe s
255a0 74 61 63 6b 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tack. */.    if(
255b0 20 70 2d 3e 74 72 61 63 65 20 26 26 20 70 54 6f   p->trace && pTo
255c0 73 3e 3d 70 2d 3e 61 53 74 61 63 6b 20 29 7b 0a  s>=p->aStack ){.
255d0 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
255e0 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72     fprintf(p->tr
255f0 61 63 65 2c 20 22 53 74 61 63 6b 3a 22 29 3b 0a  ace, "Stack:");.
25600 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
25610 3e 2d 35 20 26 26 20 26 70 54 6f 73 5b 69 5d 3e  >-5 && &pTos[i]>
25620 3d 70 2d 3e 61 53 74 61 63 6b 3b 20 69 2d 2d 29  =p->aStack; i--)
25630 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54  {.        if( pT
25640 6f 73 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  os[i].flags & ME
25650 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
25660 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 74      fprintf(p->t
25670 72 61 63 65 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a  race, " NULL");.
25680 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
25690 28 20 28 70 54 6f 73 5b 69 5d 2e 66 6c 61 67 73  ( (pTos[i].flags
256a0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
256b0 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
256c0 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
256d0 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d        fprintf(p-
256e0 3e 74 72 61 63 65 2c 20 22 20 73 69 3a 25 6c 6c  >trace, " si:%ll
256f0 64 22 2c 20 70 54 6f 73 5b 69 5d 2e 69 29 3b 0a  d", pTos[i].i);.
25700 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
25710 28 20 70 54 6f 73 5b 69 5d 2e 66 6c 61 67 73 20  ( pTos[i].flags 
25720 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
25730 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70         fprintf(p
25740 2d 3e 74 72 61 63 65 2c 20 22 20 69 3a 25 6c 6c  ->trace, " i:%ll
25750 64 22 2c 20 70 54 6f 73 5b 69 5d 2e 69 29 3b 0a  d", pTos[i].i);.
25760 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
25770 28 20 70 54 6f 73 5b 69 5d 2e 66 6c 61 67 73 20  ( pTos[i].flags 
25780 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
25790 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
257a0 70 2d 3e 74 72 61 63 65 2c 20 22 20 72 3a 25 67  p->trace, " r:%g
257b0 22 2c 20 70 54 6f 73 5b 69 5d 2e 72 29 3b 0a 20  ", pTos[i].r);. 
257c0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
257d0 20 20 20 20 20 20 20 20 63 68 61 72 20 7a 42 75          char zBu
257e0 66 5b 31 30 30 5d 3b 0a 20 20 20 20 20 20 20 20  f[100];.        
257f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
25800 50 72 65 74 74 79 50 72 69 6e 74 28 26 70 54 6f  PrettyPrint(&pTo
25810 73 5b 69 5d 2c 20 7a 42 75 66 29 3b 0a 20 20 20  s[i], zBuf);.   
25820 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70         fprintf(p
25830 2d 3e 74 72 61 63 65 2c 20 22 20 22 29 3b 0a 20  ->trace, " ");. 
25840 20 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66           fprintf
25850 28 70 2d 3e 74 72 61 63 65 2c 20 22 25 73 22 2c  (p->trace, "%s",
25860 20 7a 42 75 66 29 3b 0a 20 20 20 20 20 20 20 20   zBuf);.        
25870 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
25880 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69  if( rc!=0 ) fpri
25890 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 20 72  ntf(p->trace," r
258a0 63 3d 25 64 22 2c 72 63 29 3b 0a 20 20 20 20 20  c=%d",rc);.     
258b0 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63   fprintf(p->trac
258c0 65 2c 22 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 23  e,"\n");.    }.#
258d0 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45  endif  /* SQLITE
258e0 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
258f0 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20    /* NDEBUG */. 
25900 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f   }  /* The end o
25910 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f  f the for(;;) lo
25920 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72  op the loops thr
25930 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  ough opcodes */.
25940 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63  .  /* If we reac
25950 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74  h this point, it
25960 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63   means that exec
25970 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65  ution is finishe
25980 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 68 61 6c  d..  */.vdbe_hal
25990 74 3a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  t:.  if( rc ){. 
259a0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20     p->rc = rc;. 
259b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
259c0 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  RROR;.  }else{. 
259d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
259e0 4f 4e 45 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ONE;.  }.  sqlit
259f0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
25a00 20 70 2d 3e 70 54 6f 73 20 3d 20 70 54 6f 73 3b   p->pTos = pTos;
25a10 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
25a20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
25a30 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
25a40 61 69 6c 73 2e 20 20 49 74 27 73 20 68 61 72 64  ails.  It's hard
25a50 20 74 6f 20 67 65 74 20 61 20 6d 61 6c 6c 6f 63   to get a malloc
25a60 28 29 0a 20 20 2a 2a 20 74 6f 20 66 61 69 6c 20  ().  ** to fail 
25a70 6f 6e 20 61 20 6d 6f 64 65 72 6e 20 56 4d 20 63  on a modern VM c
25a80 6f 6d 70 75 74 65 72 2c 20 73 6f 20 74 68 69 73  omputer, so this
25a90 20 63 6f 64 65 20 69 73 20 75 6e 74 65 73 74 65   code is unteste
25aa0 64 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  d..  */.no_mem:.
25ab0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
25ac0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
25ad0 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c  "out of memory",
25ae0 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 72 63   (char*)0);.  rc
25af0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
25b00 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 68 61 6c  .  goto vdbe_hal
25b10 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
25b20 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c   here for an SQL
25b30 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
25b40 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
25b50 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63  _to_misuse:.  rc
25b60 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
25b70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75  ;.  /* Fall thru
25b80 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   into abort_due_
25b90 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f  to_error */..  /
25ba0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
25bb0 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
25bc0 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
25bd0 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
25be0 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
25bf0 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
25c00 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
25c10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
25c20 0a 20 20 69 66 28 20 70 2d 3e 7a 45 72 72 4d 73  .  if( p->zErrMs
25c30 67 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  g==0 ){.    if( 
25c40 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
25c50 6c 65 64 28 29 20 29 20 72 63 20 3d 20 53 51 4c  led() ) rc = SQL
25c60 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73  ITE_NOMEM;.    s
25c70 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
25c80 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 73 71 6c  &p->zErrMsg, sql
25c90 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20  ite3ErrStr(rc), 
25ca0 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 7d 0a 20  (char*)0);.  }. 
25cb0 20 67 6f 74 6f 20 76 64 62 65 5f 68 61 6c 74 3b   goto vdbe_halt;
25cc0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
25cd0 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
25ce0 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
25cf0 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
25d00 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
25d10 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
25d20 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
25d30 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
25d40 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
25d50 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 21    if( db->magic!
25d60 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
25d70 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
25d80 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
25d90 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
25da0 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
25db0 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20  ;.  }.  p->rc = 
25dc0 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
25dd0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
25de0 73 67 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  sg, sqlite3ErrSt
25df0 72 28 72 63 29 2c 20 28 63 68 61 72 2a 29 30 29  r(rc), (char*)0)
25e00 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 68 61  ;.  goto vdbe_ha
25e10 6c 74 3b 0a 7d 0a                                lt;.}.