/ Hex Artifact Content
Login

Artifact b00293fa34fe0e065610f355fd95988fa357068a:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 37 34 20 32 30 30 39  e.c,v 1.874 2009
0850: 2f 30 37 2f 32 34 20 31 37 3a 35 38 3a 35 33 20  /07/24 17:58:53 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08b0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08c0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08d0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08e0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08f0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0900: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
0910: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0920: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0930: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0940: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0950: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0960: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0970: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0980: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0990: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09a0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09b0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09c0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09d0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09e0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a00: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a10: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a30: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a40: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a50: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a60: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a70: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a80: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a90: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0aa0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ab0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ac0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0ad0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0ae0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0af0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b00: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b10: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b20: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b30: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b40: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b50: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b60: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b80: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0ba0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0bc0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0be0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bf0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c00: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c10: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c20: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c30: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c40: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c50: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c60: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c70: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c80: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c90: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0ca0: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0cb0: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0cc0: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0cd0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ce0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0d00: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0d10: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0d30: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d40: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d50: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d60: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d70: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d80: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d90: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0da0: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0db0: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0dc0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0dd0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0de0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0df0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0e00: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0e10: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0e20: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0e30: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e40: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e50: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e60: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e70: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e80: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0ea0: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0eb0: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0ec0: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0ed0: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ee0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0ef0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0f00: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0f10: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0f20: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0f30: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f50: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0f60: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0f70: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0f80: 79 70 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64  ype the OP_Found
0f90: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0fa0: 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73 20  ecuted. This is 
0fb0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65  used to test whe
0fc0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
0fd0: 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f  foreign key.** o
0fe0: 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  peration impleme
0ff0: 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b  nted using OP_Fk
1000: 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e  IsZero is workin
1010: 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  g. This variable
1020: 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  .** has no funct
1030: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
1040: 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  o help verify th
1050: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
1060: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  ion of the.** li
1070: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
1080: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
1090: 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
10a0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
10b0: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72  ../*.** Test a r
10c0: 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20 69  egister to see i
10d0: 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68 65  f it exceeds the
10e0: 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d   current maximum
10f0: 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49   blob size..** I
1100: 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72  f it does, recor
1110: 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75  d the new maximu
1120: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a  m blob size..*/.
1130: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1140: 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65 66  TE_TEST) && !def
1150: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1160: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23  _BUILTIN_TEST).#
1170: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1180: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20  AX_BLOBSIZE(P)  
1190: 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a  updateMaxBlobsiz
11a0: 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  e(P).#else.# def
11b0: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
11c0: 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69  LOBSIZE(P).#endi
11d0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
11e0: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
11f0: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1200: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
1210: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
1220: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
1230: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
1240: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
1250: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
1260: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1270: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1280: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1290: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
12a0: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
12b0: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
12c0: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  em; }../*.** An 
12d0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12e0: 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65   value (signifie
12f0: 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68  d by the MEM_Eph
1300: 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e  em flag) contain
1310: 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  s.** a pointer t
1320: 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20  o a dynamically 
1330: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67  allocated string
1340: 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65   where some othe
1350: 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72  r entity.** is r
1360: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
1370: 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74  eallocating that
1380: 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73   string.  Becaus
1390: 65 20 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a  e the register.*
13a0: 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72  * does not contr
13b0: 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69  ol the string, i
13c0: 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74  t might be delet
13d0: 65 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 72  ed without the r
13e0: 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69  egister.** knowi
13f0: 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ng it..**.** Thi
1400: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
1410: 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ts an ephemeral 
1420: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79  string into a dy
1430: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
1440: 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ted.** string th
1450: 61 74 20 74 68 65 20 72 65 67 69 73 74 65 72 20  at the register 
1460: 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e  itself controls.
1470: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1480: 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73  , it.** converts
1490: 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74   an MEM_Ephem st
14a0: 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d  ring into an MEM
14b0: 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  _Dyn string..*/.
14c0: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
14d0: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
14e0: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
14f0: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1500: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1510: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1520: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
1530: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  no_mem;}../*.** 
1540: 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64 62 65  Call sqlite3Vdbe
1550: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 29 20  MemExpandBlob() 
1560: 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  on the supplied 
1570: 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65 6d 2a  value (type Mem*
1580: 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75 69 72  ).** P if requir
1590: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ed..*/.#define E
15a0: 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28 28 28  xpandBlob(P) (((
15b0: 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  P)->flags&MEM_Ze
15c0: 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62 65 4d  ro)?sqlite3VdbeM
15d0: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a  emExpandBlob(P):
15e0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65  0)../*.** Argume
15f0: 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61  nt pMem points a
1600: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  t a register tha
1610: 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64  t will be passed
1620: 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65   to a.** user-de
1630: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f  fined function o
1640: 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  r returned to th
1650: 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72 65  e user as the re
1660: 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79 2e  sult of a query.
1670: 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61  .** The second a
1680: 72 67 75 6d 65 6e 74 2c 20 27 64 62 5f 65 6e 63  rgument, 'db_enc
1690: 27 20 69 73 20 74 68 65 20 74 65 78 74 20 65 6e  ' is the text en
16a0: 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74  coding used by t
16b0: 68 65 20 76 64 62 65 20 66 6f 72 0a 2a 2a 20 72  he vdbe for.** r
16c0: 65 67 69 73 74 65 72 20 76 61 72 69 61 62 6c 65  egister variable
16d0: 73 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65  s.  This routine
16e0: 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e   sets the pMem->
16f0: 65 6e 63 20 61 6e 64 20 70 4d 65 6d 2d 3e 74 79  enc and pMem->ty
1700: 70 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 73 20  pe.** variables 
1710: 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1720: 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20 72 6f  te3_value_*() ro
1730: 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  utines..*/.#defi
1740: 6e 65 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f  ne storeTypeInfo
1750: 28 41 2c 42 29 20 5f 73 74 6f 72 65 54 79 70 65  (A,B) _storeType
1760: 49 6e 66 6f 28 41 29 0a 73 74 61 74 69 63 20 76  Info(A).static v
1770: 6f 69 64 20 5f 73 74 6f 72 65 54 79 70 65 49 6e  oid _storeTypeIn
1780: 66 6f 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  fo(Mem *pMem){. 
1790: 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 70 4d 65   int flags = pMe
17a0: 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  m->flags;.  if( 
17b0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
17c0: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
17d0: 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  pe = SQLITE_NULL
17e0: 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
17f0: 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74   flags & MEM_Int
1800: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1810: 70 65 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  pe = SQLITE_INTE
1820: 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  GER;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d  Real ){.    pMem
1850: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
1860: 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73  FLOAT;.  }.  els
1870: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
1880: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 70 4d 65  M_Str ){.    pMe
1890: 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  m->type = SQLITE
18a0: 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _TEXT;.  }else{.
18b0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
18c0: 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20   SQLITE_BLOB;.  
18d0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 70 65  }.}../*.** Prope
18e0: 72 74 69 65 73 20 6f 66 20 6f 70 63 6f 64 65 73  rties of opcodes
18f0: 2e 20 20 54 68 65 20 4f 50 46 4c 47 5f 49 4e 49  .  The OPFLG_INI
1900: 54 49 41 4c 49 5a 45 52 20 6d 61 63 72 6f 20 69  TIALIZER macro i
1910: 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 62 79 20  s.** created by 
1920: 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 64 75  mkopcodeh.awk du
1930: 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ring compilation
1940: 2e 20 20 44 61 74 61 20 69 73 20 6f 62 74 61 69  .  Data is obtai
1950: 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  ned.** from the 
1960: 63 6f 6d 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69  comments followi
1970: 6e 67 20 74 68 65 20 22 63 61 73 65 20 4f 50 5f  ng the "case OP_
1980: 78 78 78 78 3a 22 20 73 74 61 74 65 6d 65 6e 74  xxxx:" statement
1990: 73 20 69 6e 0a 2a 2a 20 74 68 69 73 20 66 69 6c  s in.** this fil
19a0: 65 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63 20 63  e.  .*/.static c
19b0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
19c0: 61 72 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  ar opcodePropert
19d0: 79 5b 5d 20 3d 20 4f 50 46 4c 47 5f 49 4e 49 54  y[] = OPFLG_INIT
19e0: 49 41 4c 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a 2a 20  IALIZER;../*.** 
19f0: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 61  Return true if a
1a00: 6e 20 6f 70 63 6f 64 65 20 68 61 73 20 61 6e 79  n opcode has any
1a10: 20 6f 66 20 74 68 65 20 4f 50 46 4c 47 5f 78 78   of the OPFLG_xx
1a20: 78 20 70 72 6f 70 65 72 74 69 65 73 0a 2a 2a 20  x properties.** 
1a30: 73 70 65 63 69 66 69 65 64 20 62 79 20 6d 61 73  specified by mas
1a40: 6b 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  k..*/.int sqlite
1a50: 33 56 64 62 65 4f 70 63 6f 64 65 48 61 73 50 72  3VdbeOpcodeHasPr
1a60: 6f 70 65 72 74 79 28 69 6e 74 20 6f 70 63 6f 64  operty(int opcod
1a70: 65 2c 20 69 6e 74 20 6d 61 73 6b 29 7b 0a 20 20  e, int mask){.  
1a80: 61 73 73 65 72 74 28 20 6f 70 63 6f 64 65 3e 30  assert( opcode>0
1a90: 20 26 26 20 6f 70 63 6f 64 65 3c 28 69 6e 74 29   && opcode<(int)
1aa0: 73 69 7a 65 6f 66 28 6f 70 63 6f 64 65 50 72 6f  sizeof(opcodePro
1ab0: 70 65 72 74 79 29 20 29 3b 0a 20 20 72 65 74 75  perty) );.  retu
1ac0: 72 6e 20 28 6f 70 63 6f 64 65 50 72 6f 70 65 72  rn (opcodeProper
1ad0: 74 79 5b 6f 70 63 6f 64 65 5d 26 6d 61 73 6b 29  ty[opcode]&mask)
1ae0: 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  !=0;.}../*.** Al
1af0: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1b00: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1b10: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1b20: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1b30: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1b40: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1b50: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1b60: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1b70: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1b80: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1b90: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1ba0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1bb0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1bc0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1bd0: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1be0: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c00: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1c10: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1c20: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1c30: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1c40: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1c50: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1c60: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1c70: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1c80: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1c90: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ca0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1cb0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1cc0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1cd0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1ce0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1cf0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1d00: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1d10: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1d20: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1d30: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1d40: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1d50: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1d60: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1d70: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1d80: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1d90: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1da0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1db0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1dc0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1dd0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1de0: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1df0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1e00: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1e10: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1e20: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1e30: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1e40: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1e50: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1e60: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1e70: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1e80: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1e90: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1ea0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1eb0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1ec0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1ed0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1ee0: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1ef0: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1f00: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1f10: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1f20: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1f30: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1f40: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1f50: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1f60: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1f70: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1f80: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1f90: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1fa0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1fb0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1fc0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1fd0: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1fe0: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1ff0: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
2000: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
2010: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
2020: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
2030: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
2040: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
2050: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
2060: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
2070: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
2080: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
2090: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
20a0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
20b0: 20 20 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75     sizeof(VdbeCu
20c0: 72 73 6f 72 29 20 2b 20 0a 20 20 20 20 20 20 28  rsor) + .      (
20d0: 69 73 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71  isBtreeCursor?sq
20e0: 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
20f0: 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20  Size():0) + .   
2100: 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65     2*nField*size
2110: 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65  of(u32);..  asse
2120: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
2130: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
2140: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
2150: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
2160: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
2170: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
2180: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
2190: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
21a0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
21b0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65  3VdbeMemGrow(pMe
21c0: 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  m, nByte, 0) ){.
21d0: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
21e0: 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65  r] = pCx = (Vdbe
21f0: 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b  Cursor*)pMem->z;
2200: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d  .    memset(pMem
2210: 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a  ->z, 0, nByte);.
2220: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2230: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2240: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2250: 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a    if( nField ){.
2260: 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65        pCx->aType
2270: 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d   = (u32 *)&pMem-
2280: 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43 75  >z[sizeof(VdbeCu
2290: 72 73 6f 72 29 5d 3b 0a 20 20 20 20 7d 0a 20 20  rsor)];.    }.  
22a0: 20 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72    if( isBtreeCur
22b0: 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78  sor ){.      pCx
22c0: 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43  ->pCursor = (BtC
22d0: 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20  ursor*).        
22e0: 20 20 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65 6f    &pMem->z[sizeo
22f0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 2b 32 2a  f(VdbeCursor)+2*
2300: 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33  nField*sizeof(u3
2310: 32 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  2)];.    }.  }. 
2320: 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a   return pCx;.}..
2330: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2340: 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74  vert a value int
2350: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2360: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65  esentation if we
2370: 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69   can.** do so wi
2380: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e  thout loss of in
2390: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f  formation.  In o
23a0: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
23b0: 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f  he string.** loo
23c0: 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ks like a number
23d0: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74  , convert it int
23e0: 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20  o a number.  If 
23f0: 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c  it does not.** l
2400: 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  ook like a numbe
2410: 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e  r, leave it alon
2420: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
2430: 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66  d applyNumericAf
2440: 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63  finity(Mem *pRec
2450: 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e  ){.  if( (pRec->
2460: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61  flags & (MEM_Rea
2470: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29  l|MEM_Int))==0 )
2480: 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c 6e 75  {.    int realnu
2490: 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  m;.    sqlite3Vd
24a0: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
24b0: 65 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  e(pRec);.    if(
24c0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45   (pRec->flags&ME
24d0: 4d 5f 53 74 72 29 0a 20 20 20 20 20 20 20 20 20  M_Str).         
24e0: 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62  && sqlite3IsNumb
24f0: 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61  er(pRec->z, &rea
2500: 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63 29  lnum, pRec->enc)
2510: 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 76 61   ){.      i64 va
2520: 6c 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  lue;.      sqlit
2530: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2540: 64 69 6e 67 28 70 52 65 63 2c 20 53 51 4c 49 54  ding(pRec, SQLIT
2550: 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69  E_UTF8);.      i
2560: 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26 20 73  f( !realnum && s
2570: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65  qlite3Atoi64(pRe
2580: 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29 7b  c->z, &value) ){
2590: 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75  .        pRec->u
25a0: 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20  .i = value;.    
25b0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
25c0: 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74  ag(pRec, MEM_Int
25d0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
25e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
25f0: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 52  dbeMemRealify(pR
2600: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
2610: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2620: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2630: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2640: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2650: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
2660: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
2670: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
2680: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2690: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
26a0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
26b0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
26c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
26d0: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
26e0: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
26f0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2700: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2710: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2720: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2730: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2740: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2750: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
2760: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
2770: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
2780: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
2790: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
27a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
27b0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
27c0: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
27d0: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
27e0: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
27f0: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2800: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2810: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2820: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a  QLITE_AFF_NONE:.
2830: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2840: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2850: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2860: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
2870: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
2880: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
2890: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
28a0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
28b0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
28c0: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
28d0: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
28e0: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
28f0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
2900: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
2910: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
2920: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2930: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a  F_TEXT ){.    /*
2940: 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68   Only attempt th
2950: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20  e conversion to 
2960: 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73  TEXT if there is
2970: 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72   an integer or r
2980: 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  eal.    ** repre
2990: 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20  sentation (blob 
29a0: 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20  and NULL do not 
29b0: 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62  get converted) b
29c0: 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20  ut no string.   
29d0: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
29e0: 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  on..    */.    i
29f0: 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61  f( 0==(pRec->fla
2a00: 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28  gs&MEM_Str) && (
2a10: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
2a20: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20  _Real|MEM_Int)) 
2a30: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2a40: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
2a50: 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20  (pRec, enc);.   
2a60: 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61   }.    pRec->fla
2a70: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c  gs &= ~(MEM_Real
2a80: 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c  |MEM_Int);.  }el
2a90: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21  se if( affinity!
2aa0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
2ab0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2ac0: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2ad0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20  _AFF_INTEGER || 
2ae0: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2af0: 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20  _AFF_REAL.      
2b00: 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69         || affini
2b10: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty==SQLITE_AFF_N
2b20: 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70  UMERIC );.    ap
2b30: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2b40: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66  ty(pRec);.    if
2b50: 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
2b60: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
2b70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2b80: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2b90: 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  c);.    }.  }.}.
2ba0: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2bb0: 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f  nvert the type o
2bc0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  f a function arg
2bd0: 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c  ument or a resul
2be0: 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f  t column.** into
2bf0: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2c00: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20  sentation.  Use 
2c10: 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f  either INTEGER o
2c20: 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72  r REAL whichever
2c30: 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61  .** is appropria
2c40: 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f  te.  But only do
2c50: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c60: 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  if it is possibl
2c70: 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73  e without.** los
2c80: 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
2c90: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20   and return the 
2ca0: 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20  revised type of 
2cb0: 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a  the argument..**
2cc0: 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45  .** This is an E
2cd0: 58 50 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20  XPERIMENTAL api 
2ce0: 61 6e 64 20 69 73 20 73 75 62 6a 65 63 74 20 74  and is subject t
2cf0: 6f 20 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f  o change or remo
2d00: 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  val..*/.int sqli
2d10: 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69  te3_value_numeri
2d20: 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76  c_type(sqlite3_v
2d30: 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d  alue *pVal){.  M
2d40: 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a  em *pMem = (Mem*
2d50: 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75  )pVal;.  applyNu
2d60: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2d70: 65 6d 29 3b 0a 20 20 73 74 6f 72 65 54 79 70 65  em);.  storeType
2d80: 49 6e 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  Info(pMem, 0);. 
2d90: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79   return pMem->ty
2da0: 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70  pe;.}../*.** Exp
2db0: 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  orted version of
2dc0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
2dd0: 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73  . This one works
2de0: 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   on sqlite3_valu
2df0: 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20  e*, .** not the 
2e00: 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79  internal Mem* ty
2e10: 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  pe..*/.void sqli
2e20: 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2e30: 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33  inity(.  sqlite3
2e40: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20  _value *pVal, . 
2e50: 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20   u8 affinity, . 
2e60: 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70   u8 enc.){.  app
2e70: 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20  lyAffinity((Mem 
2e80: 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79  *)pVal, affinity
2e90: 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65  , enc);.}..#ifde
2ea0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
2eb0: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63  *.** Write a nic
2ec0: 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  e string represe
2ed0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  ntation of the c
2ee0: 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20  ontents of cell 
2ef0: 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66  pMem.** into buf
2f00: 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68  fer zBuf, length
2f10: 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73   nBuf..*/.void s
2f20: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
2f30: 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d  ttyPrint(Mem *pM
2f40: 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b  em, char *zBuf){
2f50: 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20  .  char *zCsr = 
2f60: 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20  zBuf;.  int f = 
2f70: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20  pMem->flags;..  
2f80: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
2f90: 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65  r *const encname
2fa0: 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28  s[] = {"(X)", "(
2fb0: 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22  8)", "(16LE)", "
2fc0: 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28  (16BE)"};..  if(
2fd0: 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20   f&MEM_Blob ){. 
2fe0: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68     int i;.    ch
2ff0: 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20  ar c;.    if( f 
3000: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
3010: 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20     c = 'z';.    
3020: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3030: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3040: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3050: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3060: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
3070: 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20     c = 't';.    
3080: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3090: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
30a0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
30b0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
30c0: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63  Ephem ){.      c
30d0: 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73   = 'e';.      as
30e0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
30f0: 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29  Static|MEM_Dyn))
3100: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3110: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b  {.      c = 's';
3120: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69  .    }..    sqli
3130: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3140: 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29  , zCsr, "%c", c)
3150: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3160: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3170: 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  sr);.    sqlite3
3180: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3190: 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d  Csr, "%d[", pMem
31a0: 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  ->n);.    zCsr +
31b0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31c0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72  0(zCsr);.    for
31d0: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
31e0: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
31f0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
3200: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3210: 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70   "%02X", ((int)p
3220: 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46  Mem->z[i] & 0xFF
3230: 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  ));.      zCsr +
3240: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3250: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
3260: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
3270: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
3280: 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  ++){.      char 
3290: 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a  z = pMem->z[i];.
32a0: 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c        if( z<32 |
32b0: 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b  | z>126 ) *zCsr+
32c0: 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65  + = '.';.      e
32d0: 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b  lse *zCsr++ = z;
32e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69  .    }..    sqli
32f0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3300: 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65  , zCsr, "]%s", e
3310: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
3320: 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d  c]);.    zCsr +=
3330: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3340: 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20  (zCsr);.    if( 
3350: 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  f & MEM_Zero ){.
3360: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3370: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3380: 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e  ,"+%dz",pMem->u.
3390: 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43  nZero);.      zC
33a0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
33b0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
33c0: 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27   }.    *zCsr = '
33d0: 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  \0';.  }else if(
33e0: 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a   f & MEM_Str ){.
33f0: 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20      int j, k;.  
3400: 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b    zBuf[0] = ' ';
3410: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3420: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42  _Dyn ){.      zB
3430: 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20  uf[1] = 'z';.   
3440: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3450: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3460: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3470: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3480: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3490: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74      zBuf[1] = 't
34a0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
34b0: 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d   (f & (MEM_Dyn|M
34c0: 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b  EM_Ephem))==0 );
34d0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66  .    }else if( f
34e0: 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a   & MEM_Ephem ){.
34f0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3500: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3510: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3520: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3530: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3540: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3550: 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20  s';.    }.    k 
3560: 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
3570: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26  _snprintf(100, &
3580: 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70  zBuf[k], "%d", p
3590: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b  Mem->n);.    k +
35a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
35b0: 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20  0(&zBuf[k]);.   
35c0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27   zBuf[k++] = '['
35d0: 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  ;.    for(j=0; j
35e0: 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e  <15 && j<pMem->n
35f0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38  ; j++){.      u8
3600: 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b   c = pMem->z[j];
3610: 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78  .      if( c>=0x
3620: 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a  20 && c<0x7f ){.
3630: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3640: 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c  ] = c;.      }el
3650: 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66  se{.        zBuf
3660: 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20  [k++] = '.';.   
3670: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a     }.    }.    z
3680: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a  Buf[k++] = ']';.
3690: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
36a0: 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b  intf(100,&zBuf[k
36b0: 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d  ], encnames[pMem
36c0: 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b  ->enc]);.    k +
36d0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
36e0: 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20  0(&zBuf[k]);.   
36f0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a   zBuf[k++] = 0;.
3700: 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69    }.}.#endif..#i
3710: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3720: 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68  G./*.** Print th
3730: 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67  e value of a reg
3740: 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e  ister for tracin
3750: 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73  g purposes:.*/.s
3760: 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72  tatic void memTr
3770: 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f  acePrint(FILE *o
3780: 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  ut, Mem *p){.  i
3790: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
37a0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70  M_Null ){.    fp
37b0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c  rintf(out, " NUL
37c0: 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  L");.  }else if(
37d0: 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45   (p->flags & (ME
37e0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d  M_Int|MEM_Str))=
37f0: 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74  =(MEM_Int|MEM_St
3800: 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  r) ){.    fprint
3810: 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64  f(out, " si:%lld
3820: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3830: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3840: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3850: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3860: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3870: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3880: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3890: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
38a0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
38b0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72  _Real ){.    fpr
38c0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67  intf(out, " r:%g
38d0: 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66  ", p->r);.#endif
38e0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
38f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
3900: 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  et ){.    fprint
3910: 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74  f(out, " (rowset
3920: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3930: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3940: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3950: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3960: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70  p, zBuf);.    fp
3970: 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b  rintf(out, " ");
3980: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3990: 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  , "%s", zBuf);. 
39a0: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
39b0: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46   registerTrace(F
39c0: 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52  ILE *out, int iR
39d0: 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66  eg, Mem *p){.  f
39e0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47  printf(out, "REG
39f0: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
3a00: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
3a10: 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69  (out, p);.  fpri
3a20: 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a  ntf(out, "\n");.
3a30: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3a40: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3a50: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3a60: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70  _TRACE(R,M) if(p
3a70: 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72  ->trace)register
3a80: 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52  Trace(p->trace,R
3a90: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
3aa0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
3ab0: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
3ac0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
3ad0: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
3ae0: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
3af0: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
3b00: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
3b10: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
3b20: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
3b30: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
3b40: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
3b50: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  h"..#endif../*.*
3b60: 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f  * The CHECK_FOR_
3b70: 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20  INTERRUPT macro 
3b80: 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f  defined here loo
3b90: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
3ba0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  .** sqlite3_inte
3bb0: 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20  rrupt() routine 
3bc0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e  has been called.
3bd0: 20 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e    If it has been
3be0: 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73  , then.** proces
3bf0: 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45  sing of the VDBE
3c00: 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65   program is inte
3c10: 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  rrupted..**.** T
3c20: 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20  his macro added 
3c30: 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63  to every instruc
3c40: 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61  tion that does a
3c50: 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74   jump in order t
3c60: 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61  o.** implement a
3c70: 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73   loop.  This tes
3c80: 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20  t used to be on 
3c90: 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73  every single ins
3ca0: 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74  truction,.** but
3cb0: 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d   that meant we m
3cc0: 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74  ore testing that
3cd0: 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20   we needed.  By 
3ce0: 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65  only testing the
3cf0: 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70  .** flag on jump
3d00: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77   instructions, w
3d10: 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20  e get a (small) 
3d20: 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e  speed improvemen
3d30: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48  t..*/.#define CH
3d40: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
3d50: 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75  T \.   if( db->u
3d60: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
3d70: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
3d80: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a  _to_interrupt;..
3d90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3da0: 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66  BUG.static int f
3db0: 69 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65  ileExists(sqlite
3dc0: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
3dd0: 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74  r *zFile){.  int
3de0: 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20   res = 0;.  int 
3df0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
3e00: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
3e10: 53 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72  ST.  /* If we ar
3e20: 65 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74  e currently test
3e30: 69 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74  ing IO errors, t
3e40: 68 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20  hen do not call 
3e50: 4f 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20  OsAccess() to.  
3e60: 2a 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20  ** test for the 
3e70: 70 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c  presence of zFil
3e80: 65 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  e. This is becau
3e90: 73 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20  se any IO error 
3ea0: 74 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73  that.  ** occurs
3eb0: 20 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62   here will not b
3ec0: 65 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73  e reported, caus
3ed0: 69 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20  ing the test to 
3ee0: 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74  fail..  */.  ext
3ef0: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
3f00: 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67  io_error_pending
3f10: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
3f20: 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67  io_error_pending
3f30: 3c 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20  <=0 ).#endif.   
3f40: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
3f50: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
3f60: 7a 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43  zFile, SQLITE_AC
3f70: 43 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65  CESS_EXISTS, &re
3f80: 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65  s);.  return (re
3f90: 73 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f  s && rc==SQLITE_
3fa0: 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  OK);.}.#endif..#
3fb0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
3fc0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
3fd0: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
3fe0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
3ff0: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
4000: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
4010: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
4020: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
4030: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
4040: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
4050: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
4060: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
4070: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
4080: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
4090: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
40a0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
40b0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
40c0: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
40d0: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
40e0: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
40f0: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
4100: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
4110: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
4120: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
4130: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
4140: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
4150: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
4160: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
4170: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
4180: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
4190: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
41a0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
41b0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
41c0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
41d0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
41e0: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
41f0: 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e  can then return.
4200: 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64  .**.** sqlite3Vd
4210: 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75  beMakeReady() mu
4220: 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66  st be called bef
4230: 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ore this routine
4240: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
4250: 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61  close the progra
4260: 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f  m with a final O
4270: 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65  P_Halt and to se
4280: 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63  t up the callbac
4290: 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72  ks.** and the er
42a0: 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e  ror message poin
42b0: 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65  ter..**.** Whene
42c0: 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73  ver a row or res
42d0: 75 6c 74 20 64 61 74 61 20 69 73 20 61 76 61 69  ult data is avai
42e0: 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74  lable, this rout
42f0: 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a  ine will either.
4300: 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65  ** invoke the re
4310: 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69  sult callback (i
4320: 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20  f there is one) 
4330: 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a  or return with.*
4340: 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a  * SQLITE_ROW..**
4350: 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70  .** If an attemp
4360: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65  t is made to ope
4370: 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62  n a locked datab
4380: 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ase, then this r
4390: 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65  outine.** will e
43a0: 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  ither invoke the
43b0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28   busy callback (
43c0: 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29  if there is one)
43d0: 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72   or it will.** r
43e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
43f0: 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65  Y..**.** If an e
4400: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20  rror occurs, an 
4410: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
4420: 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f   written to memo
4430: 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66  ry obtained.** f
4440: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
4450: 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72  oc() and p->zErr
4460: 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70  Msg is made to p
4470: 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d  oint to that mem
4480: 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f  ory..** The erro
4490: 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64  r code is stored
44a0: 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68   in p->rc and th
44b0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
44c0: 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  ns SQLITE_ERROR.
44d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61  .**.** If the ca
44e0: 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65 74 75  llback ever retu
44f0: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68  rns non-zero, th
4500: 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65  en the program e
4510: 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  xits.** immediat
4520: 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c  ely.  There will
4530: 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73   be no error mes
4540: 73 61 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e  sage but the p->
4550: 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73  rc field is.** s
4560: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f  et to SQLITE_ABO
4570: 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  RT and this rout
4580: 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ine will return 
4590: 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a  SQLITE_ERROR..**
45a0: 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c  .** A memory all
45b0: 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61  ocation error ca
45c0: 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65  uses p->rc to be
45d0: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e   set to SQLITE_N
45e0: 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a  OMEM and this.**
45f0: 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75   routine to retu
4600: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
4610: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74  .**.** Other fat
4620: 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e  al errors return
4630: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4640: 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20  *.** After this 
4650: 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69  routine has fini
4660: 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62  shed, sqlite3Vdb
4670: 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75  eFinalize() shou
4680: 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ld be.** used to
4690: 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65   clean up the me
46a0: 73 73 20 74 68 61 74 20 77 61 73 20 6c 65 66 74  ss that was left
46b0: 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20   behind..*/.int 
46c0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
46d0: 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20  .  Vdbe *p      
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
46f0: 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a   The VDBE */.){.
4700: 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20    int pc;       
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4720: 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  The program coun
4730: 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  ter */.  Op *pOp
4740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4750: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
4760: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
4770: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4780: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4790: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
47a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
47b0: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
47c0: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
47d0: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
47e0: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
47f0: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
4800: 64 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ding */.  Mem *p
4810: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4820: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4830: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4840: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4860: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4870: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
4880: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4890: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
48a0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
48b0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
48c0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
48d0: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70  erand */.  u8 op
48e0: 50 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20  Property;.  int 
48f0: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
4900: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
4910: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
4920: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
4930: 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65  .  int *aPermute
4940: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
4950: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20   Permutation of 
4960: 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43  columns for OP_C
4970: 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66  ompare */.#ifdef
4980: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4990: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
49a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
49b0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
49c0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
49d0: 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63   */.  int origPc
49e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
49f0: 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e   /* Program coun
4a00: 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66 20  ter at start of 
4a10: 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
4a20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4a30: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4a40: 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72  LLBACK.  int nPr
4a50: 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20  ogressOps = 0;  
4a60: 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65      /* Opcodes e
4a70: 78 65 63 75 74 65 64 20 73 69 6e 63 65 20 70 72  xecuted since pr
4a80: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e  ogress callback.
4a90: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
4aa0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
4ab0: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
4ac0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4ad0: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4ae0: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4af0: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4b00: 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73 73 65  s this */.  asse
4b10: 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  rt( db->magic==S
4b20: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
4b30: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
4b40: 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72  eMutexArrayEnter
4b50: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
4b60: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4b70: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4b80: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4b90: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4ba0: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4bb0: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4bc0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4bd0: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4be0: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4bf0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4c00: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4c10: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72  QLITE_OK || p->r
4c20: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
4c30: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
4c40: 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28  TE_OK;.  assert(
4c50: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
4c60: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
4c70: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
4c80: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
4c90: 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   0;.  CHECK_FOR_
4ca0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c  INTERRUPT;.  sql
4cb0: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
4cc0: 71 6c 28 70 29 3b 0a 23 69 66 64 65 66 20 53 51  ql(p);.#ifdef SQ
4cd0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4ce0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4cf0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4d00: 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28  ->pc==0 .   && (
4d10: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4d20: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4d30: 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74  ng) || fileExist
4d40: 73 28 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c  s(db, "vdbe_expl
4d50: 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20  ain")).  ){.    
4d60: 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74  int i;.    print
4d70: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4d80: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4d90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4da0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f  ntSql(p);.    fo
4db0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4dc0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
4dd0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4de0: 73 74 64 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61  stdout, i, &p->a
4df0: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  Op[i]);.    }.  
4e00: 7d 0a 20 20 69 66 28 20 66 69 6c 65 45 78 69 73  }.  if( fileExis
4e10: 74 73 28 64 62 2c 20 22 76 64 62 65 5f 74 72 61  ts(db, "vdbe_tra
4e20: 63 65 22 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74  ce") ){.    p->t
4e30: 72 61 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20  race = stdout;. 
4e40: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
4e50: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4e60: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4e70: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4e80: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4e90: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4ea0: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4eb0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4ec0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4ed0: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4ee0: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72  E_PROFILE.    or
4ef0: 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73  igPc = pc;.    s
4f00: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77  tart = sqlite3Hw
4f10: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
4f20: 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70     pOp = &p->aOp
4f30: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4f40: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4f50: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4f60: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4f70: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4f80: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4f90: 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
4fa0: 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20    if( pc==0 ){. 
4fb0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56         printf("V
4fc0: 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72  DBE Execution Tr
4fd0: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ace:\n");.      
4fe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4ff0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20  ntSql(p);.      
5000: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
5010: 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72  dbePrintOp(p->tr
5020: 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  ace, pc, pOp);. 
5030: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
5040: 74 72 61 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d  trace==0 && pc==
5050: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
5060: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
5070: 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20 69 66 28  loc();.      if(
5080: 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20   fileExists(db, 
5090: 22 76 64 62 65 5f 73 71 6c 74 72 61 63 65 22 29  "vdbe_sqltrace")
50a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
50b0: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
50c0: 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p);.      }.    
50d0: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
50e0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20  gnMalloc();.    
50f0: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
5100: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
5110: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
5120: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
5130: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
5140: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
5150: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
5160: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
5170: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
5180: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
5190: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
51a0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
51b0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
51c0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
51d0: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
51e0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
51f0: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5200: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5210: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
5220: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
5230: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
5240: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
5250: 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43  ALLBACK.    /* C
5260: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5270: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5280: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5290: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
52a0: 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20  umber.    ** of 
52b0: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
52c0: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
52d0: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
52e0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20  nvocation of.   
52f0: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
5300: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
5310: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
5320: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
5330: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20  as called)..    
5340: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
5350: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
5360: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
5370: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
5380: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20  achine with.    
5390: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
53a0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
53b0: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
53c0: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
53d0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72       if( db->nPr
53e0: 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67  ogressOps==nProg
53f0: 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20  ressOps ){.     
5400: 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20     int prc;.    
5410: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
5420: 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
5430: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
5440: 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20 20 20  _misuse;.       
5450: 20 70 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72   prc =db->xProgr
5460: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
5470: 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69  sArg);.        i
5480: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
5490: 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
54a0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
54b0: 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  e;.        if( p
54c0: 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  rc!=0 ){.       
54d0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
54e0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
54f0: 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72      goto vdbe_er
5500: 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20  ror_halt;.      
5510: 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f    }.        nPro
5520: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
5530: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f      }.      nPro
5540: 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20  gressOps++;.    
5550: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
5560: 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70   Do common setup
5570: 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
5580: 61 6e 79 20 6f 70 63 6f 64 65 20 74 68 61 74 20  any opcode that 
5590: 69 73 20 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a  is marked.    **
55a0: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
55b0: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2e  prerelease" tag.
55c0: 20 20 53 75 63 68 20 6f 70 63 6f 64 65 73 20 68    Such opcodes h
55d0: 61 76 65 20 61 20 73 69 6e 67 6c 65 0a 20 20 20  ave a single.   
55e0: 20 2a 2a 20 6f 75 74 70 75 74 20 77 68 69 63 68   ** output which
55f0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
5600: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
5610: 72 2e 20 20 54 68 65 20 50 32 20 72 65 67 69 73  r.  The P2 regis
5620: 74 65 72 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e  ter.    ** is in
5630: 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e  itialized to a N
5640: 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
5650: 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 6f 70 63  opProperty = opc
5660: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
5670: 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66  >opcode];.    if
5680: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5690: 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
56a0: 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a 20 20 20  LEASE)!=0 ){.   
56b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
56c0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
56d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
56e0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
56f0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
5700: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
5710: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
5720: 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f  leaseExternal(pO
5730: 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  ut);.      pOut-
5740: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
5750: 6c 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 6e  l;.      pOut->n
5760: 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 0a   = 0;.    }else.
5770: 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d   .    /* Do comm
5780: 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70 63  on setup for opc
5790: 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74 68  odes marked with
57a0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
57b0: 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d  owing.    ** com
57c0: 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f  binations of pro
57d0: 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a  perties..    **.
57e0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
57f0: 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20 20   in1.    **     
5800: 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20 20        in1 in2.  
5810: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
5820: 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20 20  n1 in2 out3.    
5830: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5840: 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20   in3.    **.    
5850: 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49 6e  ** Variables pIn
5860: 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e  1, pIn2, and pIn
5870: 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70 6f  3 are made to po
5880: 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69 61  int to appropria
5890: 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  te.    ** regist
58a0: 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e 20  ers for inputs. 
58b0: 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20 70   Variable pOut p
58c0: 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74  oints to the out
58d0: 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20 20  put register..  
58e0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f 70    */.    if( (op
58f0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5900: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5910: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5920: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5930: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5940: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
5950: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
5960: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52  Op->p1];.      R
5970: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5980: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
5990: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
59a0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
59b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
59c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
59d0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
59e0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
59f0: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
5a00: 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
5a10: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
5a20: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5a30: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5a40: 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 20 63  .        /* As c
5a50: 75 72 72 65 6e 74 6c 79 20 69 6d 70 6c 65 6d 65  urrently impleme
5a60: 6e 74 65 64 2c 20 69 6e 32 20 69 6d 70 6c 69 65  nted, in2 implie
5a70: 73 20 6f 75 74 33 2e 20 20 54 68 65 72 65 20 69  s out3.  There i
5a80: 73 20 6e 6f 20 72 65 61 73 6f 6e 0a 20 20 20 20  s no reason.    
5a90: 20 20 20 20 2a 2a 20 77 68 79 20 74 68 69 73 20      ** why this 
5aa0: 68 61 73 20 74 6f 20 62 65 2c 20 69 74 20 6a 75  has to be, it ju
5ab0: 73 74 20 77 6f 72 6b 65 64 20 6f 75 74 20 74 68  st worked out th
5ac0: 61 74 20 77 61 79 2e 20 2a 2f 0a 20 20 20 20 20  at way. */.     
5ad0: 20 20 20 61 73 73 65 72 74 28 20 28 6f 70 50 72     assert( (opPr
5ae0: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
5af0: 55 54 33 29 21 3d 30 20 29 3b 0a 20 20 20 20 20  UT3)!=0 );.     
5b00: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5b10: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p3>0 );.        
5b20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5b30: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5b40: 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
5b50: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
5b60: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f      }else if( (o
5b70: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5b80: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5b90: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5ba0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5bb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5bc0: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
5bd0: 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26 70 2d        pIn3 = &p-
5be0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
5bf0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
5c00: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
5c10: 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pIn3);.      }. 
5c20: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70     }else if( (op
5c30: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5c40: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
5c50: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5c60: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
5c70: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
5c80: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
5c90: 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In2 = &p->aMem[p
5ca0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 52  Op->p2];.      R
5cb0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5cc0: 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20  p->p2, pIn2);.  
5cd0: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50    }else if( (opP
5ce0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5cf0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
5d00: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5d10: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5d20: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
5d30: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49  nMem );.      pI
5d40: 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n3 = &p->aMem[pO
5d50: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 52 45  p->p3];.      RE
5d60: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5d70: 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20  ->p3, pIn3);.   
5d80: 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68 28 20   }..    switch( 
5d90: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
5da0: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5db0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
5df0: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
5e00: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
5e10: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
5e20: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
5e30: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
5e40: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
5e50: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
5e60: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
5e70: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
5e80: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
5e90: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
5ea0: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5eb0: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5ec0: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
5ed0: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
5ee0: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
5ef0: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
5f00: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
5f10: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
5f20: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
5f30: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
5f40: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
5f50: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
5f60: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
5f70: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
5f80: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
5f90: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
5fa0: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5fb0: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5fc0: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
5fd0: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
5fe0: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
5ff0: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
6000: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
6010: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
6020: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
6030: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
6040: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
6050: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
6060: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
6070: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
6080: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
6090: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
60a0: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
60b0: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
60c0: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
60d0: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
60e0: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
60f0: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
6100: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
6110: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
6120: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
6130: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
6140: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
6150: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
6160: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
6170: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
6180: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
6190: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
61a0: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
61b0: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
61c0: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
61d0: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
61e0: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
61f0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
6200: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
6210: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
6220: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
6230: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
6240: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
6250: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
6260: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
6270: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
6280: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
6290: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
62a0: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
62b0: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
62c0: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
62d0: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
62e0: 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75  2_prerelease, ou
62f0: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
6300: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
6310: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
6320: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
6330: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
6340: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
6350: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
6360: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
6370: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
6380: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
6390: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
63a0: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
63b0: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
63c0: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
63d0: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
63e0: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
63f0: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
6400: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
6410: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
6420: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
6430: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
6440: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
6450: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
6460: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
6470: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
6480: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
6490: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
64a0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
64b0: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
64c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
64d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
64e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
64f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6500: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
6510: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
6520: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
6530: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
6540: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
6550: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6560: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
6570: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
6580: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
6590: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
65a0: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
65b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f  .*/.case OP_Goto
65c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
65d0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45  /* jump */.  CHE
65e0: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
65f0: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
6600: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
6610: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6620: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
6630: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6640: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6650: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6660: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6670: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6680: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6690: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
66a0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
66b0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
66c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
66d0: 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
66e0: 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
66f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6700: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
6710: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30  gs & MEM_Dyn)==0
6720: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
6730: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
6740: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
6750: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6760: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6770: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
6780: 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
6790: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
67a0: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
67b0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
67c0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
67d0: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
67e0: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
67f0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  1..*/.case OP_Re
6800: 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20  turn: {         
6810: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73    /* in1 */.  as
6820: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
6830: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
6840: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6850: 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  >u.i;.  break;.}
6860: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
6870: 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eld P1 * * * *.*
6880: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
6890: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
68a0: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
68b0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a  register P1..*/.
68c0: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
68e0: 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65  n1 */.  int pcDe
68f0: 73 74 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  st;.  assert( (p
6900: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
6910: 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49  _Dyn)==0 );.  pI
6920: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6930: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
6940: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6950: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6960: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6970: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6980: 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74  );.  pc = pcDest
6990: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
69a0: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
69b0: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
69c0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  4 *.**.** Check 
69d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
69e0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 73  ister P3.  If is
69f0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
6a00: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
6a10: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
6a20: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
6a30: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
6a40: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
6a50: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
6a60: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
6a70: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
6a80: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
6a90: 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  op..*/.case OP_H
6aa0: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
6ab0: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 69 66    /* in3 */.  if
6ac0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
6ad0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
6ae0: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
6af0: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
6b00: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
6b10: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
6b20: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
6b30: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
6b40: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
6b50: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
6b60: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
6b70: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
6b80: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
6b90: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
6ba0: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
6bb0: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
6bc0: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
6bd0: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
6be0: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
6bf0: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
6c00: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
6c10: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
6c20: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
6c30: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
6c40: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
6c50: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
6c60: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
6c70: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
6c80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
6c90: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
6ca0: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
6cb0: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
6cc0: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
6cd0: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
6ce0: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
6cf0: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
6d00: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
6d10: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
6d20: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
6d30: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
6d40: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
6d50: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
6d60: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
6d70: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
6d80: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
6d90: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
6da0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61  **.** There is a
6db0: 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20  n implied "Halt 
6dc0: 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69  0 0 0" instructi
6dd0: 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  on inserted at t
6de0: 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a  he very end of.*
6df0: 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e  * every program.
6e00: 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74    So a jump past
6e10: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75   the last instru
6e20: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  ction of the pro
6e30: 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73  gram.** is the s
6e40: 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67  ame as executing
6e50: 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Halt..*/.case O
6e60: 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20  P_Halt: {.  if( 
6e70: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
6e80: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
6e90: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
6ea0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
6eb0: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
6ec0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
6ed0: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
6ee0: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
6ef0: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
6f00: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
6f10: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
6f20: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
6f30: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
6f40: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
6f50: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
6f60: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
6f70: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
6f80: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
6f90: 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
6fa0: 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74       /* Instruct
6fb0: 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50  ion pc is the OP
6fc0: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
6fd0: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
6fe0: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
6ff0: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
7000: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
7010: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
7020: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
7030: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
7040: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
7050: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
7060: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
7070: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
7080: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
7090: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
70a0: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
70b0: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
70c0: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
70d0: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
70e0: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
70f0: 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70   */.      pc = p
7100: 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a  ->aOp[pc].p2-1;.
7110: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7120: 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20  .  }..  p->rc = 
7130: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72  pOp->p1;.  p->er
7140: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29  rorAction = (u8)
7150: 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63  pOp->p2;.  p->pc
7160: 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70   = pc;.  if( pOp
7170: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71  ->p4.z ){.    sq
7180: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
7190: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
71a0: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
71b0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
71c0: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
71d0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
71e0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
71f0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7200: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7210: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7220: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7230: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7240: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7250: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
7260: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7270: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f  p->rc==SQLITE_CO
7280: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
7290: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
72a0: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
72b0: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a  ferredCons>0 );.
72c0: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
72d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
72e0: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
72f0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
7300: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
7310: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
7320: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
7330: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
7340: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
7350: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
7360: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7370: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
7380: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7390: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
73a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
73b0: 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  t;.  pOut->u.i =
73c0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
73d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
73e0: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
73f0: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
7400: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7410: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
7420: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7430: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7440: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7450: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
7460: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7470: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7480: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7490: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
74a0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
74b0: 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  nt;.  pOut->u.i 
74c0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
74d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
74e0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
74f0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
7500: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7510: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
7520: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
7530: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
7540: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
7550: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7560: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
7570: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7580: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
7590: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
75a0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
75b0: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
75c0: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
75d0: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
75e0: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
75f0: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
7600: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7610: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
7620: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
7630: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
7640: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
7650: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
7660: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
7670: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
7680: 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f  n OP_String befo
7690: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
76a0: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
76b0: 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  time..*/.case OP
76c0: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
76d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
76e0: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
76f0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7700: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7710: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
7720: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
7730: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
7740: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
7750: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
7760: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7770: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
7780: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
7790: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
77a0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
77b0: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
77c0: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
77d0: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
77e0: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
77f0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7800: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7810: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
7820: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
7830: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
7840: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
7850: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
7860: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
7870: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
7880: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
7890: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
78a0: 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  n );.    pOut->z
78b0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
78c0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
78d0: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70  EM_Static;.    p
78e0: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Out->flags &= ~M
78f0: 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20  EM_Dyn;.    if( 
7900: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
7910: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
7920: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
7930: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
7940: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
7950: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
7960: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
7970: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
7980: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
7990: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
79a0: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
79b0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
79c0: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
79d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
79e0: 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
79f0: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
7a00: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
7a10: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
7a20: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
7a30: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
7a40: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
7a50: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
7a60: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
7a70: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
7a80: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  2..*/.case OP_St
7a90: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
7aa0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7ab0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7ac0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7ad0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7ae0: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
7af0: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
7b00: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
7b10: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
7b20: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
7b30: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
7b40: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
7b50: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7b60: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7b70: 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20  code: Null * P2 
7b80: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
7b90: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
7ba0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7bb0: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
7bc0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7bd0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7be0: 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
7bf0: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
7c00: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70   * P4.**.** P4 p
7c10: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
7c20: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
7c30: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
7c40: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
7c50: 67 69 73 74 65 72 20 50 32 2e 20 54 68 69 73 20  gister P2. This 
7c60: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6e  instruction is n
7c70: 6f 74 20 63 6f 64 65 64 20 64 69 72 65 63 74 6c  ot coded directl
7c80: 79 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d 70  y.** by the comp
7c90: 69 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20 74  iler. Instead, t
7ca0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65  he compiler laye
7cb0: 72 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20 61  r specifies.** a
7cc0: 6e 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63  n OP_HexBlob opc
7cd0: 6f 64 65 2c 20 77 69 74 68 20 74 68 65 20 68 65  ode, with the he
7ce0: 78 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  x string represe
7cf0: 6e 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ntation of.** th
7d00: 65 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54 68  e blob as P4. Th
7d10: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7d20: 6e 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f  nsformed to an O
7d30: 50 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69  P_Blob.** the fi
7d40: 72 73 74 20 74 69 6d 65 20 69 74 20 69 73 20 65  rst time it is e
7d50: 78 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65  xecuted..*/.case
7d60: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
7d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7d80: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7d90: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7da0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
7db0: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
7dc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7dd0: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7de0: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
7df0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
7e00: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
7e10: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7e20: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7e30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
7e40: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 50 33  ariable P1 P2 P3
7e50: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e   P4 *.**.** Tran
7e60: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
7e70: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
7e80: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ers P1..P1+P3-1 
7e90: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  into registers.*
7ea0: 2a 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a  * P2..P2+P3-1..*
7eb0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61  *.** If the para
7ec0: 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20  meter is named, 
7ed0: 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70  then its name ap
7ee0: 70 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20  pears in P4 and 
7ef0: 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34  P3==1..** The P4
7f00: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
7f10: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
7f20: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
7f30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
7f40: 61 62 6c 65 3a 20 7b 0a 20 20 69 6e 74 20 70 31  able: {.  int p1
7f50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
7f60: 72 69 61 62 6c 65 20 74 6f 20 63 6f 70 79 20 66  riable to copy f
7f70: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
7f80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
7f90: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
7fa0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
7fb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7fc0: 20 6f 66 20 76 61 6c 75 65 73 20 6c 65 66 74 20   of values left 
7fd0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 4d 65 6d  to copy */.  Mem
7fe0: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
7ff0: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
8000: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 70  nsferred */..  p
8010: 31 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b  1 = pOp->p1 - 1;
8020: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
8030: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
8040: 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
8050: 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 56 61 72  && p1+n<=p->nVar
8060: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
8070: 3e 3d 31 20 26 26 20 70 32 2b 6e 2d 31 3c 3d 70  >=1 && p2+n-1<=p
8080: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65  ->nMem );.  asse
8090: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
80a0: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29   || pOp->p3==1 )
80b0: 3b 0a 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ;..  while( n-- 
80c0: 3e 20 30 20 29 7b 0a 20 20 20 20 70 56 61 72 20  > 0 ){.    pVar 
80d0: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 31 2b 2b 5d  = &p->aVar[p1++]
80e0: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
80f0: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
8100: 56 61 72 29 20 29 7b 0a 20 20 20 20 20 20 67 6f  Var) ){.      go
8110: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
8120: 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d  }.    pOut = &p-
8130: 3e 61 4d 65 6d 5b 70 32 2b 2b 5d 3b 0a 20 20 20  >aMem[p2++];.   
8140: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
8150: 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70  eleaseExternal(p
8160: 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Out);.    pOut->
8170: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
8180: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8190: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
81a0: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
81b0: 53 74 61 74 69 63 29 3b 0a 20 20 20 20 55 50 44  Static);.    UPD
81c0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
81d0: 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62 72  (pOut);.  }.  br
81e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
81f0: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
8200: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
8210: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
8220: 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33  gister P1..P1+P3
8230: 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  -1 over into.** 
8240: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
8250: 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72  +P3-1.  Register
8260: 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72  s P1..P1+P1-1 ar
8270: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
8280: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
8290: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
82a0: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
82b0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64   P1..P1+P3-1 and
82c0: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20   P2..P2+P3-1 to 
82d0: 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65  overlap..*/.case
82e0: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68   OP_Move: {.  ch
82f0: 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f  ar *zMalloc;   /
8300: 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62  * Holding variab
8310: 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64  le for allocated
8320: 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
8330: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
8340: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
8350: 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  ters left to cop
8360: 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  y */.  int p1;  
8370: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
8380: 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d  ter to copy from
8390: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
83a0: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
83b0: 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f  er to copy to */
83c0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
83d0: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
83e0: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
83f0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
8400: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
8410: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
8420: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
8430: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 70   );..  pIn1 = &p
8440: 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f  ->aMem[p1];.  pO
8450: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  ut = &p->aMem[p2
8460: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
8470: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8480: 4f 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d  Out<=&p->aMem[p-
8490: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
84a0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 70 2d 3e  sert( pIn1<=&p->
84b0: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
84c0: 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70  .    zMalloc = p
84d0: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
84e0: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
84f0: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
8500: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
8510: 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e  , pIn1);.    pIn
8520: 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61  1->zMalloc = zMa
8530: 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54  lloc;.    REGIST
8540: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
8550: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
8560: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
8570: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
8580: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
8590: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
85a0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
85b0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
85c0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
85d0: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
85e0: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
85f0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
8600: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
8610: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
8620: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
8630: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
8640: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
8650: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
8660: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
8670: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
8680: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
8690: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
86a0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
86b0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
86c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
86d0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
86e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
86f0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8700: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8710: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
8720: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
8730: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8740: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
8750: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8760: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
8770: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
8780: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8790: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
87a0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
87b0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
87c0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
87d0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
87e0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
87f0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
8800: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8810: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
8820: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
8830: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
8840: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8850: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8860: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
8870: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8880: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8890: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
88a0: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
88b0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
88c0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
88d0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
88e0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
88f0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
8900: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8910: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
8920: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
8930: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
8940: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
8950: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
8960: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8970: 2a 20 69 6e 31 20 2a 2f 0a 20 20 52 45 47 49 53  * in1 */.  REGIS
8980: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8990: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  1, pIn1);.  asse
89a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
89b0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
89c0: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
89d0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
89e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
89f0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
8a00: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
8a10: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
8a20: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
8a30: 70 68 65 6d 29 3b 0a 20 20 52 45 47 49 53 54 45  phem);.  REGISTE
8a40: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
8a50: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
8a60: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
8a70: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
8a80: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
8a90: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
8aa0: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
8ab0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
8ac0: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
8ad0: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
8ae0: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
8af0: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
8b00: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
8b10: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
8b20: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
8b30: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
8b40: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
8b50: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
8b60: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
8b70: 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73  top P1 values as
8b80: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72   the result.** r
8b90: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
8ba0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
8bb0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
8bc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
8bd0: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
8be0: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
8bf0: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
8c00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
8c10: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p2<=p->nMem+
8c20: 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  1 );..  /* If th
8c30: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  is statement has
8c40: 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69   violated immedi
8c50: 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
8c60: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a  constraints, do.
8c70: 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20    ** not return 
8c80: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8c90: 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64  ws modified. And
8ca0: 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20   do not RELEASE 
8cb0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  the statement.  
8cc0: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  ** transaction. 
8cd0: 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  It needs to be r
8ce0: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a  olled back.  */.
8cf0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
8d00: 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64  =(rc = sqlite3Vd
8d10: 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29  beCheckFk(p, 0))
8d20: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
8d30: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
8d40: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
8d50: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65    assert( p->use
8d60: 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a  sStmtJournal );.
8d70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8d80: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
8d90: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
8da0: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
8db0: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
8dc0: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
8dd0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
8de0: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
8df0: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
8e00: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
8e10: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
8e20: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
8e30: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
8e40: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
8e50: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
8e60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
8e70: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
8e80: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
8e90: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
8ea0: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
8eb0: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
8ec0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8ed0: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
8ee0: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
8ef0: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
8f00: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8f10: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
8f20: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
8f30: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
8f40: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
8f50: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
8f60: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
8f70: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
8f80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
8f90: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
8fa0: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
8fb0: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
8fc0: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
8fd0: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
8fe0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
8ff0: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
9000: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
9010: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
9020: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
9030: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
9040: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
9050: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
9060: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
9070: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
9080: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
9090: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
90a0: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
90b0: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
90c0: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
90d0: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
90e0: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
90f0: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
9100: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
9110: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69  NT_RELEASE);.  i
9120: 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
9130: 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62  ITE_OK) ){.    b
9140: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
9150: 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65  Invalidate all e
9160: 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20  phemeral cursor 
9170: 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20  row caches */.  
9180: 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70  p->cacheCtr = (p
9190: 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c  ->cacheCtr + 2)|
91a0: 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  1;..  /* Make su
91b0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
91c0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
91d0: 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69  w are \000 termi
91e0: 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68  nated.  ** and h
91f0: 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20  ave an assigned 
9200: 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c  type.  The resul
9210: 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65  ts are de-epheme
9220: 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20  ralized as.  ** 
9230: 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a  as side effect..
9240: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
9250: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 70  >pResultSet = &p
9260: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
9270: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
9280: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
9290: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
92a0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
92b0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65  m[i]);.    store
92c0: 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69  TypeInfo(&pMem[i
92d0: 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
92e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
92f0: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
9300: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
9310: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
9320: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
9330: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
9340: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
9350: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
9360: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
9370: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
9380: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
9390: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
93a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
93b0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
93c0: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
93d0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
93e0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
93f0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
9400: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9410: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9420: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
9430: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
9440: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
9450: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
9460: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
9470: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
9480: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
9490: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
94a0: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
94b0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
94c0: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
94d0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
94e0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
94f0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
9500: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
9510: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
9520: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
9530: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
9540: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
9550: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
9560: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ;..  assert( pIn
9570: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
9580: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
9590: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
95a0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
95b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
95c0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
95d0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
95e0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
95f0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
9600: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
9610: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
9620: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
9630: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9640: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
9650: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
9660: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
9670: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
9680: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
9690: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
96a0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
96b0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
96c0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
96d0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
96e0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
96f0: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
9700: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
9710: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
9720: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
9730: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
9740: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
9750: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
9760: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
9770: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
9780: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
9790: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
97a0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
97b0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
97c0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
97d0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
97e0: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
97f0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9800: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9810: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9820: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9830: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
9840: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
9850: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
9860: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9870: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
9880: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9890: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
98a0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
98b0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
98c0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
98d0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
98e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
98f0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
9900: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a  P2 P3 * *.**.**.
9910: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
9920: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9930: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9940: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9950: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9960: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9970: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9980: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9990: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
99a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
99b0: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
99c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
99d0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
99e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
99f0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
9a00: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9a10: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9a20: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9a30: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9a40: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9a50: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9a60: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9a70: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
9a80: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9a90: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
9aa0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9ab0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9ac0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9ad0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9ae0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9af0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
9b00: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
9b10: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
9b20: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
9b30: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9b40: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
9b50: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
9b60: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9b70: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9b80: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
9b90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9ba0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
9bb0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
9bc0: 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20  ger division of 
9bd0: 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
9be0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
9bf0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9c00: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
9c10: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9c20: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
9c30: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9c40: 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P2 is zero the 
9c50: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9c60: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
9c70: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
9c80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9c90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
9ca0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9cb0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9cc0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
9cd0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9ce0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
9cf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9d00: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
9d10: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9d20: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
9d30: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
9d40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
9d50: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
9d60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
9d70: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
9d80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9d90: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
9da0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9db0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
9dc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9dd0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
9de0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
9df0: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
9e00: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
9e10: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
9e20: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
9e30: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
9e40: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9e50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9e60: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
9e70: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9e80: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9e90: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9ea0: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
9eb0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
9ec0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
9ed0: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
9ee0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
9ef0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9f00: 0a 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ..  applyNumeric
9f10: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a  Affinity(pIn1);.
9f20: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9f30: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9f40: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
9f50: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
9f60: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
9f70: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
9f80: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9f90: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9fa0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
9fb0: 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67  ags & pIn2->flag
9fc0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45  s & MEM_Int)==ME
9fd0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20  M_Int ){.    iA 
9fe0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
9ff0: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
a000: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
a010: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
a020: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
a030: 20 20 20 20 20 20 20 69 42 20 2b 3d 20 69 41 3b         iB += iA;
a040: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a050: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
a060: 72 61 63 74 3a 20 20 20 20 69 42 20 2d 3d 20 69  ract:    iB -= i
a070: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
a080: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
a090: 6c 74 69 70 6c 79 3a 20 20 20 20 69 42 20 2a 3d  ltiply:    iB *=
a0a0: 20 69 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   iA;       break
a0b0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a0c0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
a0d0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
a0e0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a0f0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a100: 20 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e        /* Dividin
a110: 67 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f  g the largest po
a120: 73 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20  ssible negative 
a130: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28  64-bit integer (
a140: 31 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20  1<<63) by .     
a150: 20 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73     ** -1 returns
a160: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20   an integer too 
a170: 6c 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69  large to store i
a180: 6e 20 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d  n a 64-bit data-
a190: 74 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20  type. On.       
a1a0: 20 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65   ** some archite
a1b0: 63 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75  ctures, the valu
a1c0: 65 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28  e overflows to (
a1d0: 31 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72  1<<63). On other
a1e0: 73 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20  s,.        ** a 
a1f0: 53 49 47 46 50 45 20 69 73 20 69 73 73 75 65 64  SIGFPE is issued
a200: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
a210: 73 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c  statement normal
a220: 69 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20 20  izes this.      
a230: 20 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f    ** behavior so
a240: 20 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74   that all archit
a250: 65 63 74 75 72 65 73 20 62 65 68 61 76 65 20 61  ectures behave a
a260: 73 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20  s if integer .  
a270: 20 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f        ** overflo
a280: 77 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20  w occurred..    
a290: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
a2a0: 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d  f( iA==-1 && iB=
a2b0: 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
a2c0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a2d0: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
a2e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a2f0: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
a300: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
a310: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a320: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a330: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a340: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a350: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
a360: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
a370: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a380: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
a390: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
a3a0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a3b0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
a3c0: 73 65 7b 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  se{.    rA = sql
a3d0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
a3e0: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
a3f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
a400: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
a410: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
a420: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
a430: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
a440: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
a450: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a460: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
a470: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
a480: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a490: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
a4a0: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
a4b0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
a4c0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
a4d0: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
a4e0: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
a4f0: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
a500: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
a510: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
a520: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
a530: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a540: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a550: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
a560: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
a570: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a580: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
a590: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
a5a0: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
a5b0: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
a5c0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
a5d0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a5e0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a5f0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
a600: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
a610: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
a620: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
a630: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a640: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
a650: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
a660: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
a670: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a680: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
a690: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42      pOut->r = rB
a6a0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a6b0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
a6c0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66  eal);.    if( (f
a6d0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
a6e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
a6f0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
a700: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
a710: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
a720: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
a730: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
a740: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a750: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
a760: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a770: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20  de: CollSeq * * 
a780: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
a790: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f   pointer to a Co
a7a0: 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66  llSeq struct. If
a7b0: 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   the next call t
a7c0: 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  o a user functio
a7d0: 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74  n.** or aggregat
a7e0: 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47  e calls sqlite3G
a7f0: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c  etFuncCollSeq(),
a800: 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20   this collation 
a810: 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a  sequence will.**
a820: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68   be returned. Th
a830: 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68  is is used by th
a840: 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29  e built-in min()
a850: 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c  , max() and null
a860: 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  if().** function
a870: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  s..**.** The int
a880: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
a890: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
a8a0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
a8b0: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
a8c0: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
a8d0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
a8e0: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
a8f0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
a900: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
a910: 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f  ublicly, only to
a920: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
a930: 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e  defined in func.
a940: 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  c..*/.case OP_Co
a950: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
a960: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
a970: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
a980: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a990: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
a9a0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
a9b0: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
a9c0: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
a9d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a9e0: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
a9f0: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
aa00: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
aa10: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
aa20: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
aa30: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
aa40: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
aa50: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
aa60: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
aa70: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
aa80: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
aa90: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
aaa0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
aab0: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
aac0: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
aad0: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
aae0: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
aaf0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
ab00: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
ab10: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
ab20: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
ab30: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
ab40: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
ab50: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
ab60: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
ab70: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
ab80: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
ab90: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
aba0: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
abb0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
abc0: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
abd0: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
abe0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
abf0: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
ac00: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
ac10: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
ac20: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
ac30: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
ac40: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
ac50: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
ac60: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
ac70: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
ac80: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
ac90: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
aca0: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
acb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
acc0: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
acd0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
ace0: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
acf0: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
ad00: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20  al || n==0 );.. 
ad10: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
ad20: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
ad30: 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65  Op->p2+n<=p->nMe
ad40: 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  m+1) );.  assert
ad50: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
ad60: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
ad70: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72  p->p2+n );.  pAr
ad80: 67 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  g = &p->aMem[pOp
ad90: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
ada0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
adb0: 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ++){.    apVal[i
adc0: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 73 74  ] = pArg;.    st
add0: 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 41 72 67  oreTypeInfo(pArg
ade0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
adf0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
ae00: 70 4f 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a  pOp->p2, pArg);.
ae10: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
ae20: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
ae30: 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70  UNCDEF || pOp->p
ae40: 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55  4type==P4_VDBEFU
ae50: 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  NC );.  if( pOp-
ae60: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
ae70: 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70  DEF ){.    ctx.p
ae80: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
ae90: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56  Func;.    ctx.pV
aea0: 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d  dbeFunc = 0;.  }
aeb0: 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56  else{.    ctx.pV
aec0: 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46  dbeFunc = (VdbeF
aed0: 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64  unc*)pOp->p4.pVd
aee0: 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e  beFunc;.    ctx.
aef0: 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  pFunc = ctx.pVdb
af00: 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20  eFunc->pFunc;.  
af10: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
af20: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
af30: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
af40: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
af50: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 63 74 78 2e  pOp->p3];.  ctx.
af60: 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
af70: 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d  ll;.  ctx.s.db =
af80: 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65   db;.  ctx.s.xDe
af90: 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  l = 0;.  ctx.s.z
afa0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f  Malloc = 0;..  /
afb0: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
afc0: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
afd0: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
afe0: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
aff0: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
b000: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
b010: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
b020: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
b030: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
b040: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
b050: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
b060: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
b070: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
b080: 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20  MemMove(&ctx.s, 
b090: 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  pOut);.  MemSetT
b0a0: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
b0b0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
b0c0: 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
b0d0: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
b0e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
b0f0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
b100: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
b110: 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
b120: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
b130: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
b140: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
b150: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
b160: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
b170: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
b180: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
b190: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
b1a0: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
b1b0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
b1c0: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a 63  to_misuse;.  (*c
b1d0: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
b1e0: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
b1f0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
b200: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
b210: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b220: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
b230: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
b240: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
b250: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
b260: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
b270: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
b280: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
b290: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
b2a0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
b2b0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
b2c0: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
b2d0: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
b2e0: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
b2f0: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
b300: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
b310: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
b320: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
b330: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
b340: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
b350: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
b360: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e  .    **.    ** N
b370: 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52 65  ote: Maybe MemRe
b380: 6c 65 61 73 65 28 29 20 73 68 6f 75 6c 64 20 62  lease() should b
b390: 65 20 63 61 6c 6c 65 64 20 69 66 20 73 71 6c 69  e called if sqli
b3a0: 74 65 33 53 61 66 65 74 79 4f 6e 28 29 0a 20 20  te3SafetyOn().  
b3b0: 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f 20    ** fails also 
b3c0: 28 74 68 65 20 69 66 28 2e 2e 2e 29 20 73 74 61  (the if(...) sta
b3d0: 74 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20 42  tement above). B
b3e0: 75 74 20 69 66 20 70 65 6f 70 6c 65 20 61 72 65  ut if people are
b3f0: 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e 67  .    ** misusing
b400: 20 73 71 6c 69 74 65 2c 20 74 68 65 79 20 68 61   sqlite, they ha
b410: 76 65 20 62 69 67 67 65 72 20 70 72 6f 62 6c 65  ve bigger proble
b420: 6d 73 20 74 68 61 6e 20 61 20 6c 65 61 6b 65 64  ms than a leaked
b430: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
b440: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b450: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
b460: 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
b470: 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  m;.  }..  /* If 
b480: 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61  any auxiliary da
b490: 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  ta functions hav
b4a0: 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79  e been called by
b4b0: 20 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74   this user funct
b4c0: 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69  ion,.  ** immedi
b4d0: 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64  ately call the d
b4e0: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e  estructor for an
b4f0: 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c  y non-static val
b500: 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ues..  */.  if( 
b510: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b  ctx.pVdbeFunc ){
b520: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b530: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74  DeleteAuxData(ct
b540: 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70  x.pVdbeFunc, pOp
b550: 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e  ->p1);.    pOp->
b560: 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63  p4.pVdbeFunc = c
b570: 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  tx.pVdbeFunc;.  
b580: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
b590: 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d  P4_VDBEFUNC;.  }
b5a0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
b5b0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
b5c0: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
b5d0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
b5e0: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
b5f0: 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
b600: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
b610: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
b620: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
b630: 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
b640: 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
b650: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  or;.  }..  /* Co
b660: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
b670: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
b680: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
b690: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
b6a0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63  hangeEncoding(&c
b6b0: 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  tx.s, encoding);
b6c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
b6d0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78  mMove(pOut, &ctx
b6e0: 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  .s);.  if( sqlit
b6f0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
b700: 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  pOut) ){.    got
b710: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
b720: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
b730: 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
b740: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
b750: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
b760: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b770: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
b780: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
b790: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
b7a0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
b7b0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b7c0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b7d0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b7e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b7f0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b800: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b810: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b820: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
b830: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
b840: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
b850: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
b860: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
b870: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
b880: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
b890: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b8a0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b8b0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b8c0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b8d0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b8e0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
b8f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b900: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
b910: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
b920: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
b930: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
b940: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
b950: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
b960: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
b970: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
b980: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b990: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b9a0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b9b0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b9c0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b9d0: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
b9e0: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
b9f0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
ba00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
ba10: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
ba20: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
ba30: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
ba40: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
ba50: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
ba60: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
ba70: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
ba80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
ba90: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
baa0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bab0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bac0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
bad0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
bae0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
baf0: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
bb00: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
bb10: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
bb30: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
bb40: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bb50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
bb60: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
bb70: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bb80: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
bb90: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bba0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
bbb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bbc0: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
bbd0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bbe0: 2a 2f 0a 20 20 69 36 34 20 61 3b 0a 20 20 69 36  */.  i64 a;.  i6
bbf0: 34 20 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e  4 b;..  if( (pIn
bc00: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
bc10: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
bc20: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
bc30: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
bc40: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
bc50: 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69  ;.  }.  a = sqli
bc60: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
bc70: 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c  pIn2);.  b = sql
bc80: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
bc90: 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68  (pIn1);.  switch
bca0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
bcb0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74  .    case OP_Bit
bcc0: 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62  And:      a &= b
bcd0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
bce0: 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20   case OP_BitOr: 
bcf0: 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20        a |= b;   
bd00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
bd10: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
bd20: 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72    a <<= b;    br
bd30: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
bd40: 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  :  assert( pOp->
bd50: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74  opcode==OP_Shift
bd60: 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20  Right );.       
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd80: 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72    a >>= b;    br
bd90: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  eak;.  }.  pOut-
bda0: 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53  >u.i = a;.  MemS
bdb0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
bdc0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
bdd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bde0: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
bdf0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64  * * *.** .** Add
be00: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
be10: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
be20: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
be30: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
be40: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
be50: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
be60: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
be70: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
be80: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
be90: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
beb0: 6e 31 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  n1 */.  sqlite3V
bec0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
bed0: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
bee0: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
bef0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bf00: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
bf10: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
bf20: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
bf30: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bf40: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
bf50: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
bf60: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
bf70: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
bf80: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
bf90: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
bfa0: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
bfb0: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
bfc0: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
bfd0: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
bfe0: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
bff0: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
c000: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
c010: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
c020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
c030: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
c040: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c050: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c060: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
c070: 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  g);.  if( (pIn1-
c080: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
c090: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
c0a0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
c0b0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
c0c0: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
c0d0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
c0e0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
c0f0: 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70  se{.      pc = p
c100: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
c110: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d  }.  }else{.    M
c120: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
c130: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
c140: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
c150: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66   Opcode: RealAff
c160: 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a  inity P1 * * * *
c170: 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .**.** If regist
c180: 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69  er P1 holds an i
c190: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69  nteger convert i
c1a0: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
c1b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
c1c0: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
c1d0: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
c1e0: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
c1f0: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
c200: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
c210: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
c220: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
c230: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
c240: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
c250: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
c260: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
c270: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
c280: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
c290: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
c2a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
c2b0: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
c2d0: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31  n1 */.  if( pIn1
c2e0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
c2f0: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
c300: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
c310: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c320: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
c330: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f  LITE_OMIT_CAST./
c340: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74  * Opcode: ToText
c350: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c360: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c370: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c380: 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20   to be text..** 
c390: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c3a0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
c3b0: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
c3c0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c3d0: 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74  ivalent of print
c3e0: 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65  f().  Blob value
c3f0: 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20  s are unchanged 
c400: 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72  and.** are after
c410: 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74  wards simply int
c420: 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74  erpreted as text
c430: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
c440: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
c450: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
c460: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
c470: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
c480: 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20  P_ToText: {     
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45  same as TK_TO_TE
c4b0: 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  XT, in1 */.  if(
c4c0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c4d0: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
c4e0: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
c4f0: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
c500: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
c510: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
c520: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
c530: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
c540: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
c550: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
c560: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
c570: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
c580: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
c590: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
c5a0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
c5b0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c5c0: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
c5d0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
c5e0: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
c5f0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
c600: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
c610: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
c620: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
c630: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c640: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c650: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
c660: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
c670: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
c680: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
c690: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
c6a0: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
c6b0: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
c6c0: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
c6d0: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
c6e0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
c6f0: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
c700: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c710: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c720: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c730: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c740: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c770: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
c780: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c790: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
c7a0: 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ak;.  if( (pIn1-
c7b0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
c7c0: 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  b)==0 ){.    app
c7d0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
c7e0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
c7f0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
c800: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
c810: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
c820: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
c830: 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ed );.    MemSet
c840: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
c850: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73  EM_Blob);.  }els
c860: 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  e{.    pIn1->fla
c870: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65  gs &= ~(MEM_Type
c880: 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b  Mask&~MEM_Blob);
c890: 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
c8a0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
c8b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c8c0: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
c8d0: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
c8e0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c8f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c900: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
c910: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
c920: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
c930: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
c940: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
c950: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
c960: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c970: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
c980: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c990: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
c9a0: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
c9b0: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
c9c0: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
c9d0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c9e0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c9f0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
ca00: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
ca10: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
ca20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
ca30: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
ca40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ca50: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
ca60: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  IC, in1 */.  if(
ca70: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
ca80: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e  (MEM_Null|MEM_In
ca90: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
caa0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
cab0: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
cac0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
cad0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
cae0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
caf0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
cb00: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
cb10: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
cb20: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cb30: 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67 65   P1 be an intege
cb40: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
cb50: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
cb60: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
cb70: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
cb80: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
cb90: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
cba0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
cbb0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
cbc0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
cbd0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
cbe0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
cbf0: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
cc00: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
cc10: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
cc20: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
cc30: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
cc40: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
cc50: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
cc60: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
cc70: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
cc80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cc90: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
cca0: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
ccb0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
ccc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
ccd0: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
cce0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
ccf0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
cd00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
cd10: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
cd20: 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20  ToReal P1 * * * 
cd30: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
cd40: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
cd50: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66  ter P1 to be a f
cd60: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
cd70: 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20  mber..** If The 
cd80: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
cd90: 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63  ly an integer, c
cda0: 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66  onvert it..** If
cdb0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
cdc0: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
cdd0: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
cde0: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
cdf0: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
ce00: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
ce10: 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e  d store 0.0 if n
ce20: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
ce30: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
ce40: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
ce50: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
ce60: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
ce70: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
ce80: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
ce90: 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  oReal: {        
cea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ceb0: 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c  e as TK_TO_REAL,
cec0: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
ced0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cee0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
cef0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
cf00: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
cf10: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
cf20: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
cf30: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
cf40: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
cf50: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43  P3 P4 P5.**.** C
cf60: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
cf70: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
cf80: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
cf90: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
cfa0: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
cfb0: 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a  ress P2.  .**.**
cfc0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
cfd0: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
cfe0: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
cff0: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
d000: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
d010: 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
d020: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
d030: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d040: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
d050: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
d060: 75 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  u if either oper
d070: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
d080: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
d090: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
d0a0: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
d0b0: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
d0c0: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
d0d0: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
d0e0: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
d0f0: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
d100: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
d110: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
d120: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
d130: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
d140: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
d150: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
d160: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
d170: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
d180: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
d190: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
d1a0: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
d1b0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
d1c0: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
d1d0: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
d1e0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
d1f0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
d200: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
d210: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
d220: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
d230: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
d240: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
d250: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
d260: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
d270: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
d280: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
d290: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
d2a0: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
d2b0: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
d2c0: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
d2d0: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
d2e0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
d2f0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
d300: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
d310: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
d320: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
d330: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
d340: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
d350: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
d360: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
d370: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
d380: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
d390: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
d3a0: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
d3b0: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
d3c0: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
d3d0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
d3e0: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
d3f0: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
d400: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
d410: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
d420: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
d430: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
d440: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
d450: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d460: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
d470: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
d480: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d490: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
d4a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
d4b0: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
d4c0: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
d4d0: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
d4e0: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
d4f0: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
d500: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
d510: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
d520: 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  er P2..*/./* Opc
d530: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
d540: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d550: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d560: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d570: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d580: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d590: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
d5a0: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
d5b0: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
d5c0: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
d5d0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
d5e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d5f0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
d600: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
d610: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
d620: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
d630: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
d640: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
d650: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
d660: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
d670: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
d680: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
d690: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
d6a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66   comparison is f
d6b0: 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72  alse.  If either
d6c0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d6d0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d6e0: 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20   is true..** If 
d6f0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
d700: 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20  is NULL the the 
d710: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
d720: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
d730: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
d740: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
d750: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
d760: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
d770: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
d780: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d790: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d7a0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d7b0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d7c0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d7d0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
d7e0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
d7f0: 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e  nd P3 are equal.
d800: 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f  .** See the Lt o
d810: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d820: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d830: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
d840: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
d850: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
d860: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
d870: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
d880: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
d890: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
d8a0: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
d8b0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
d8c0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d8d0: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
d8e0: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
d8f0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
d900: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
d910: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
d920: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
d930: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d940: 20 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20   the the result 
d950: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
d960: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
d970: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
d980: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
d990: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
d9a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
d9b0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d9c0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d9d0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d9e0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d9f0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
da00: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
da10: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
da20: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
da30: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
da40: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
da50: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
da60: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
da70: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
da80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
da90: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
daa0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
dab0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
dac0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
dad0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
dae0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
daf0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
db00: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
db10: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
db20: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
db30: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
db40: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
db50: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
db60: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
db70: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
db80: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
db90: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
dba0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
dbb0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
dbc0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
dbd0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
dbe0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
dbf0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
dc00: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
dc10: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
dc20: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
dc30: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
dc40: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
dc50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
dc60: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
dc70: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
dc80: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dc90: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
dca0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
dcb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dcc0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
dcd0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
dce0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dd00: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
dd10: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
dd20: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
dd40: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
dd50: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
dd60: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
dd70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dd80: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
dd90: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
dda0: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
ddb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ddc0: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
ddd0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
dde0: 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
ddf0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
de00: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
de10: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
de20: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
de30: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
de40: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
de50: 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
de60: 0a 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ..  if( (pIn1->f
de70: 6c 61 67 73 20 7c 20 70 49 6e 33 2d 3e 66 6c 61  lags | pIn3->fla
de80: 67 73 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  gs)&MEM_Null ){.
de90: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f      /* One or bo
dea0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
deb0: 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20  NULL */.    if( 
dec0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
ded0: 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20  _NULLEQ ){.     
dee0: 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55   /* If SQLITE_NU
def0: 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69  LLEQ is set (whi
df00: 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70  ch will only hap
df10: 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61  pen if the opera
df20: 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20  tor is.      ** 
df30: 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20  OP_Eq or OP_Ne) 
df40: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
df50: 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  mp or not depend
df60: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20  ing on whether. 
df70: 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62       ** or not b
df80: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
df90: 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a   null..      */.
dfa0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
dfb0: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
dfc0: 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
dfd0: 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
dfe0: 72 65 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  res = (pIn1->fla
dff0: 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs & pIn3->flags
e000: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b   & MEM_Null)==0;
e010: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e020: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c    /* SQLITE_NULL
e030: 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20  EQ is clear and 
e040: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65  at least one ope
e050: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20  rand is NULL,.  
e060: 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
e070: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
e080: 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20   NULL..      ** 
e090: 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
e0a0: 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  n if the SQLITE_
e0b0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69  JUMPIFNULL bit i
e0c0: 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a  s set..      */.
e0d0: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
e0e0: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
e0f0: 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
e100: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
e110: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20  p->p2];.        
e120: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e130: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
e140: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
e150: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
e160: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
e170: 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  se if( pOp->p5 &
e180: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e190: 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  LL ){.        pc
e1a0: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
e1b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
e1c0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
e1d0: 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72  {.    /* Neither
e1e0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e1f0: 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73  .  Do a comparis
e200: 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e  on. */.    affin
e210: 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
e220: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
e230: 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74  .    if( affinit
e240: 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  y ){.      apply
e250: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
e260: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
e270: 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  g);.      applyA
e280: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66  ffinity(pIn3, af
e290: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
e2a0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  );.      if( db-
e2b0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
e2c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
e2d0: 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20   }..    assert( 
e2e0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
e2f0: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
e300: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
e310: 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
e320: 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  n1);.    ExpandB
e330: 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72  lob(pIn3);.    r
e340: 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  es = sqlite3MemC
e350: 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e  ompare(pIn3, pIn
e360: 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  1, pOp->p4.pColl
e370: 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28  );.  }.  switch(
e380: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
e390: 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20      case OP_Eq: 
e3a0: 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b     res = res==0;
e3b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e3c0: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72  case OP_Ne:    r
e3d0: 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20  es = res!=0;    
e3e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e3f0: 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d   OP_Lt:    res =
e400: 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65   res<0;      bre
e410: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e420: 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Le:    res = res
e430: 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  <=0;     break;.
e440: 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20      case OP_Gt: 
e450: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20     res = res>0; 
e460: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e470: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72  default:       r
e480: 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20  es = res>=0;    
e490: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
e4a0: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
e4b0: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
e4c0: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
e4d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
e4e0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e4f0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
e500: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
e510: 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
e520: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
e530: 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20   pOut);.  }else 
e540: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
e550: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
e560: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
e570: 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
e580: 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
e590: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
e5a0: 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
e5b0: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
e5c0: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
e5d0: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
e5e0: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
e5f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
e600: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
e610: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
e620: 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ext OP_Permutati
e630: 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a  on, OP_Compare,.
e640: 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f  ** OP_Halt, or O
e650: 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79  P_ResultRow.  Ty
e660: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
e670: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
e680: 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64  d occur.** immed
e690: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
e6a0: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
e6b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
e6c0: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
e6d0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
e6e0: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
e6f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e700: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
e710: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
e720: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e730: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
e740: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
e750: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76  .** Compare to v
e760: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
e770: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
e780: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c  reg(P1+P3-1) (al
e790: 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41  l this.** one "A
e7a0: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
e7b0: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
e7c0: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
e7d0: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
e7e0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
e7f0: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
e800: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
e810: 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  t..**.** P4 is a
e820: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
e830: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
e840: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
e850: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
e860: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
e870: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
e880: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
e890: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
e8a0: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
e8b0: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
e8c0: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
e8d0: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
e8e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e8f0: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
e900: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
e910: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
e920: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
e930: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
e940: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
e950: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
e960: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
e970: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
e980: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
e990: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
e9a0: 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
e9b0: 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
e9c0: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
e9d0: 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
e9e0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
e9f0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
ea00: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
ea10: 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
ea20: 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
ea30: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
ea40: 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
ea50: 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20  t order */..  n 
ea60: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
ea70: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
ea80: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
ea90: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
eaa0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
eab0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
eac0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
ead0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
eae0: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
eaf0: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
eb00: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
eb10: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
eb20: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
eb30: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
eb40: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
eb50: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
eb60: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
eb70: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
eb80: 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p2+mx<=p->nM
eb90: 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  em+1 );.  }else{
eba0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
ebb0: 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d  0 && p1+n<=p->nM
ebc0: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
ebd0: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
ebe0: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
ebf0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
ec00: 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
ec10: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
ec20: 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
ec30: 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
ec40: 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45 47  [i] : i;.    REG
ec50: 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69  ISTER_TRACE(p1+i
ec60: 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b  dx, &p->aMem[p1+
ec70: 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
ec80: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
ec90: 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64  , &p->aMem[p2+id
eca0: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
ecb0: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
ecc0: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
ecd0: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
ece0: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
ecf0: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
ed00: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
ed10: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
ed20: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d 3e  3MemCompare(&p->
ed30: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 70  aMem[p1+idx], &p
ed40: 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20  ->aMem[p2+idx], 
ed50: 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20  pColl);.    if( 
ed60: 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20  iCompare ){.    
ed70: 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f    if( bRev ) iCo
ed80: 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72  mpare = -iCompar
ed90: 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  e;.      break;.
eda0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72      }.  }.  aPer
edb0: 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  mute = 0;.  brea
edc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
edd0: 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a   Jump P1 P2 P3 *
ede0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
edf0: 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   the instruction
ee00: 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20   at address P1, 
ee10: 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64  P2, or P3 depend
ee20: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
ee30: 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  * in the most re
ee40: 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  cent OP_Compare 
ee50: 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20  instruction the 
ee60: 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65  P1 vector was le
ee70: 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c  ss than.** equal
ee80: 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20   to, or greater 
ee90: 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74  than the P2 vect
eea0: 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  or, respectively
eeb0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d  ..*/.case OP_Jum
eec0: 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  p: {            
eed0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
eee0: 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a  ( iCompare<0 ){.
eef0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31      pc = pOp->p1
ef00: 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66   - 1;.  }else if
ef10: 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
ef20: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
ef30: 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
ef40: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33      pc = pOp->p3
ef50: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
ef60: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ef70: 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20   And P1 P2 P3 * 
ef80: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
ef90: 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
efa0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
efb0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
efc0: 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
efd0: 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
efe0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
eff0: 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
f000: 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
f010: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
f020: 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
f030: 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
f040: 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
f050: 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
f060: 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
f070: 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
f080: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
f090: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f0a0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
f0b0: 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76  ical OR of the v
f0c0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
f0d0: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
f0e0: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73  ** store the ans
f0f0: 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  wer in register 
f100: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
f110: 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
f120: 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74  nonzero (true) t
f130: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
f140: 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76  s 1 (true).** ev
f150: 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20  en if the other 
f160: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
f170: 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65  A NULL and false
f180: 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a   or two NULLs.**
f190: 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74   give a NULL out
f1a0: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
f1b0: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
f1c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f1d0: 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
f1e0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ut3 */.case OP_O
f1f0: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  r: {            
f200: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f   /* same as TK_O
f210: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
f220: 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20  3 */.  int v1;  
f230: 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e    /* Left operan
f240: 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  d:  0==FALSE, 1=
f250: 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
f260: 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  N or NULL */.  i
f270: 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67  nt v2;    /* Rig
f280: 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46  ht operand: 0==F
f290: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
f2a0: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
f2b0: 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31  L */..  if( pIn1
f2c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f2d0: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
f2e0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
f2f0: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
f300: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
f310: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32  ;.  }.  if( pIn2
f320: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f330: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
f340: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
f350: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
f360: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
f370: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
f380: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
f390: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
f3a0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
f3b0: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
f3c0: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
f3d0: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
f3e0: 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
f3f0: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
f400: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
f410: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
f420: 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
f430: 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
f440: 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
f450: 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
f460: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
f470: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
f480: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
f490: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
f4a0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f4b0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
f4c0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f4d0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
f4e0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f4f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
f500: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
f510: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
f520: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f530: 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
f540: 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
f550: 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
f560: 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
f570: 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
f580: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
f590: 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
f5a0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
f5b0: 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
f5c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
f5d0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
f5e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f5f0: 4b 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  K_NOT, in1 */.  
f600: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
f610: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
f620: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f630: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
f640: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
f650: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
f660: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
f670: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
f680: 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62  Out, !sqlite3Vdb
f690: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
f6a0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f6b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
f6c0: 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
f6d0: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
f6e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f6f0: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
f700: 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
f710: 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
f720: 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
f730: 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
f740: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
f750: 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
f760: 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
f770: 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
f780: 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
f790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f7a0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
f7b0: 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d   in1 */.  pOut =
f7c0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
f7d0: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
f7e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f7f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
f800: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
f810: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f830: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e  SetInt64(pOut, ~
f840: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f850: 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
f860: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f870: 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
f880: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
f890: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
f8a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
f8b0: 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
f8c0: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73  e value is.** is
f8d0: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
f8e0: 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
f8f0: 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
f900: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
f910: 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
f920: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
f930: 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e  p if P3 is true.
f940: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
f950: 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
f960: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
f970: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
f980: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
f990: 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
f9a0: 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e  lue is.** is con
f9b0: 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
f9c0: 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
f9d0: 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
f9e0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
f9f0: 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
fa00: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
fa10: 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e  p if P3 is true.
fa20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa40: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
fa50: 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
fa70: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
fa80: 74 20 63 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t c;.  if( pIn1-
fa90: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
faa0: 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70  l ){.    c = pOp
fab0: 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23  ->p3;.  }else{.#
fac0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
fad0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
fae0: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
faf0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
fb00: 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20  1)!=0;.#else.   
fb10: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
fb20: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
fb30: 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
fb40: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
fb50: 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
fb60: 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63   !c;.  }.  if( c
fb70: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
fb80: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
fb90: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
fba0: 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
fbb0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
fbc0: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
fbd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
fbe0: 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
fbf0: 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fc10: 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
fc20: 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
fc30: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
fc40: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
fc50: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
fc60: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
fc70: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
fc80: 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
fc90: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  P2 * * *.**.** J
fca0: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
fcb0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
fcc0: 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
fcd0: 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
fce0: 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
fcf0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fd00: 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
fd10: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  p, in1 */.  if( 
fd20: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
fd30: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
fd40: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
fd50: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
fd60: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
fd70: 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
fd80: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  P4 P5.**.** Inte
fd90: 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
fda0: 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
fdb0: 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
fdc0: 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
fdd0: 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
fde0: 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
fdf0: 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
fe00: 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
fe10: 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
fe20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
fe30: 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
fe40: 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
fe50: 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
fe60: 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
fe70: 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
fe80: 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
fe90: 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
fea0: 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
feb0: 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
fec0: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
fed0: 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
fee0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
fef0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
ff00: 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
ff10: 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
ff20: 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
ff30: 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
ff40: 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
ff50: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
ff60: 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
ff70: 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
ff80: 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
ff90: 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
ffa0: 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
ffb0: 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
ffc0: 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
ffd0: 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
ffe0: 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
fff0: 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
10000 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
10010 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
10020 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
10030 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
10040 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
10050 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
10060 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
10070 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
10080 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
10090 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
100a0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
100b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
100c0 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61 79  umn: {.  u32 pay
100d0 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e  loadSize;   /* N
100e0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
100f0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
10100 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a    i64 payloadSiz
10110 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e64; /* Number o
10120 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
10130 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70  ecord */.  int p
10140 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
10150 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65   P1 value of the
10160 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
10170 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
10180 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
10190 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
101a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
101b0 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
101c0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61   cursor */.  cha
101d0 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20  r *zRec;        
101e0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f  /* Pointer to co
101f0 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61  mplete record-da
10200 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  ta */.  BtCursor
10210 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68   *pCrsr;   /* Th
10220 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a  e BTree cursor *
10230 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20  /.  u32 *aType; 
10240 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b         /* aType[
10250 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d  i] holds the num
10260 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65  eric type of the
10270 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
10280 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20    u32 *aOffset; 
10290 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b       /* aOffset[
102a0 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20  i] is offset to 
102b0 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f  start of data fo
102c0 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  r i-th column */
102d0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
102e0 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20        /* number 
102f0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
10300 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
10310 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
10320 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  /* The length of
10330 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20   the serialized 
10340 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c  data for the col
10350 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  umn */.  int i; 
10360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
10370 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
10380 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20   char *zData;   
10390 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74      /* Part of t
103a0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
103b0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d  decoded */.  Mem
103c0 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
103d0 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
103e0 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
103f0 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
10400 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
10410 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
10420 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
10430 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a  coded */.  u8 *z
10440 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Idx;          /*
10450 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64   Index into head
10460 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64  er */.  u8 *zEnd
10470 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  Hdr;       /* Po
10480 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
10490 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
104a0 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66  ader */.  u32 of
104b0 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  fset;        /* 
104c0 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
104d0 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66  data */.  u64 of
104e0 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20  fset64;      /* 
104f0 36 34 2d 62 69 74 20 6f 66 66 73 65 74 2e 20 20  64-bit offset.  
10500 36 34 20 62 69 74 73 20 6e 65 65 64 65 64 20 74  64 bits needed t
10510 6f 20 63 61 74 63 68 20 6f 76 65 72 66 6c 6f 77  o catch overflow
10520 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b   */.  int szHdr;
10530 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
10540 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73   of the header s
10550 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61  ize field at sta
10560 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a  rt of record */.
10570 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20    int avail;    
10580 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10590 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
105a0 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 4d  able data */.  M
105b0 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
105c0 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
105d0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
105e0 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  */...  p1 = pOp-
105f0 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
10600 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20  >p2;.  pC = 0;. 
10610 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
10620 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
10630 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d  .  assert( p1<p-
10640 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
10650 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
10660 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
10670 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
10680 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
10690 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  3];.  MemSetType
106a0 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
106b0 4e 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20  Null);.  zRec = 
106c0 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  0;..  /* This bl
106d0 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
106e0 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
106f0 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
10700 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
10710 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
10720 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
10730 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
10740 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
10750 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
10760 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
10770 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
10780 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
10790 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
107a0 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
107b0 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
107c0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
107d0 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
107e0 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
107f0 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
10800 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
10810 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
10820 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
10830 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
10840 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
10850 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
10860 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
10870 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
10880 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
10890 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
108a0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
108b0 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
108c0 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
108d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
108e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
108f0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
10900 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
10910 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
10920 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
10930 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
10940 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10950 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
10960 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
10970 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
10980 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
10990 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
109a0 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
109b0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
109c0 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72  stored in a B-Tr
109d0 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  ee */.    rc = s
109e0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
109f0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
10a00 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
10a10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
10a20 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
10a30 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
10a40 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
10a50 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
10a60 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
10a70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
10a80 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10a90 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
10aa0 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20  e;.      zRec = 
10ab0 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b  (char*)pC->aRow;
10ac0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
10ad0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
10ae0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
10af0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
10b00 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
10b10 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
10b20 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
10b30 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
10b40 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73  ze64);.      ass
10b50 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
10b60 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20  OK );   /* True 
10b70 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
10b80 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
10b90 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  bove */.      /*
10ba0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
10bb0 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
10bc0 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
10bd0 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
10be0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
10bf0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
10c00 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
10c10 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
10c20 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72  .      ** larger
10c30 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
10c40 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10c50 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
10c60 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
10c70 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
10c80 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61  ze64 );.      pa
10c90 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
10ca0 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
10cb0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10cc0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
10cd0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
10ce0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
10cf0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
10d00 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
10d10 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
10d20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
10d30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10d40 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
10d50 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
10d60 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
10d70 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  f( pC->pseudoTab
10d80 6c 65 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70  leReg>0 ){.    p
10d90 52 65 67 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Reg = &p->aMem[p
10da0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
10db0 67 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g];.    assert( 
10dc0 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
10dd0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70 61  M_Blob );.    pa
10de0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 52 65 67  yloadSize = pReg
10df0 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20  ->n;.    zRec = 
10e00 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d  pReg->z;.    pC-
10e10 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 28  >cacheStatus = (
10e20 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43  pOp->p5&OPFLAG_C
10e30 4c 45 41 52 43 41 43 48 45 29 20 3f 20 43 41 43  LEARCACHE) ? CAC
10e40 48 45 5f 53 54 41 4c 45 20 3a 20 70 2d 3e 63 61  HE_STALE : p->ca
10e50 63 68 65 43 74 72 3b 0a 20 20 20 20 61 73 73 65  cheCtr;.    asse
10e60 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  rt( payloadSize=
10e70 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b  =0 || zRec!=0 );
10e80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
10e90 20 43 6f 6e 73 69 64 65 72 20 74 68 65 20 72 6f   Consider the ro
10ea0 77 20 74 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a  w to be NULL */.
10eb0 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10ec0 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  = 0;.  }..  /* I
10ed0 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73  f payloadSize is
10ee0 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74   0, then just st
10ef0 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20  ore a NULL */.  
10f00 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  if( payloadSize=
10f10 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
10f20 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
10f30 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67  EM_Null );.    g
10f40 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10f50 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  t;.  }.  assert(
10f60 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
10f70 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
10f80 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79  >=0 );.  if( pay
10f90 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
10fa0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
10fb0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
10fc0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
10fd0 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  big;.  }..  nFie
10fe0 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b  ld = pC->nField;
10ff0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
11000 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
11010 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
11020 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
11030 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
11040 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
11050 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
11060 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
11070 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
11080 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54  ursor..  */.  aT
11090 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
110a0 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
110b0 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
110c0 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73  Ctr ){.    aOffs
110d0 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
110e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
110f0 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20  ssert(aType);.  
11100 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20    avail = 0;.   
11110 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61   pC->aOffset = a
11120 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b  Offset = &aType[
11130 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d  nField];.    pC-
11140 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
11150 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
11160 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
11170 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a  = p->cacheCtr;..
11180 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75      /* Figure ou
11190 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73  t how many bytes
111a0 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61 64   are in the head
111b0 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52  er */.    if( zR
111c0 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74  ec ){.      zDat
111d0 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65  a = zRec;.    }e
111e0 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70  lse{.      if( p
111f0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
11200 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
11210 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
11220 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
11230 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
11240 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
11250 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
11260 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
11270 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
11280 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
11290 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68    /* If KeyFetch
112a0 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d  ()/DataFetch() m
112b0 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74 68  anaged to get th
112c0 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
112d0 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20  ,.      ** save 
112e0 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74  the payload in t
112f0 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68  he pC->aRow cach
11300 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61  e.  That will sa
11310 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20  ve us from.     
11320 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61   ** having to ma
11330 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61  ke additional ca
11340 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68 65  lls to fetch the
11350 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e   content portion
11360 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
11370 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
11380 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
11390 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20  avail>=0 );.    
113a0 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
113b0 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20  e <= (u32)avail 
113c0 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20  ){.        zRec 
113d0 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20  = zData;.       
113e0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
113f0 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65  )zData;.      }e
11400 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
11410 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
11420 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20   }.    }.    /* 
11430 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  The following as
11440 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e 20  sert is true in 
11450 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70 74  all cases accept
11460 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65   when.    ** the
11470 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
11480 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65  as been corrupte
11490 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20  d externally..  
114a0 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20    **    assert( 
114b0 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c  zRec!=0 || avail
114c0 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c  >=payloadSize ||
114d0 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a   avail>=9 ); */.
114e0 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56      szHdr = getV
114f0 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61  arint32((u8*)zDa
11500 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20  ta, offset);..  
11510 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
11520 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
11530 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
11540 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
11550 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
11560 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
11570 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
11580 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
11590 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
115a0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
115b0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
115c0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
115d0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
115e0 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
115f0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
11600 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
11610 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
11620 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
11630 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
11640 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
11650 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
11660 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
11670 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
11680 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
11690 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
116a0 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
116b0 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
116c0 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
116d0 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
116e0 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
116f0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
11700 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
11710 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
11720 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
11730 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
11740 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
11750 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
11760 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75   }..    /* Compu
11770 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75  te in len the nu
11780 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
11790 20 64 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f   data we need to
117a0 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20   read in order. 
117b0 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69     ** to get nFi
117c0 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e  eld type values.
117d0 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75    offset is an u
117e0 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
117f0 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20  is.  But.    ** 
11800 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20  nField might be 
11810 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65  significantly le
11820 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75 65  ss than the true
11830 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11840 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ns.    ** in the
11850 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74   table, and in t
11860 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65  hat case, 5*nFie
11870 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d  ld+3 might be sm
11880 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65  aller than offse
11890 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e  t..    ** We wan
118a0 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65  t to minimize le
118b0 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69  n in order to li
118c0 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20  mit the size of 
118d0 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  the memory.    *
118e0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73  * allocation, es
118f0 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f  pecially if a co
11900 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
11910 69 6c 65 20 68 61 73 20 63 61 75 73 65 64 20 6f  ile has caused o
11920 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20  ffset.    ** to 
11930 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66  be oversized. Of
11940 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20  fset is limited 
11950 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20  to 98307 above. 
11960 20 42 75 74 20 39 38 33 30 37 20 6d 69 67 68 74   But 98307 might
11970 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78  .    ** still ex
11980 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f  ceed Robson memo
11990 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69  ry allocation li
119a0 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e  mits on some con
119b0 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20  figurations..   
119c0 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74   ** On systems t
119d0 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72  hat cannot toler
119e0 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  ate large memory
119f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46   allocations, nF
11a00 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20  ield*5+3.    ** 
11a10 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d  will likely be m
11a20 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63  uch smaller sinc
11a30 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69  e nField will li
11a40 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61  kely be less tha
11a50 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73  n.    ** 20 or s
11a60 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65 73  o.  This insures
11a70 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d   that Robson mem
11a80 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c  ory allocation l
11a90 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a  imits are.    **
11aa0 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65 76   not exceeded ev
11ab0 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64  en for corrupt d
11ac0 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20  atabase files.. 
11ad0 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20     */.    len = 
11ae0 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20  nField*5 + 3;.  
11af0 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74    if( len > (int
11b00 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20  )offset ) len = 
11b10 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20  (int)offset;..  
11b20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63    /* The KeyFetc
11b30 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63 68  h() or DataFetch
11b40 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61 73  () above are fas
11b50 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74  t and will get t
11b60 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a  he entire.    **
11b70 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
11b80 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42  n most cases.  B
11b90 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69  ut they will fai
11ba0 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d  l to get the com
11bb0 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63  plete.    ** rec
11bc0 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74 68  ord header if th
11bd0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
11be0 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20  does not fit on 
11bf0 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20  a single page.  
11c00 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72    ** in the B-Tr
11c10 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68  ee.  When that h
11c20 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69  appens, use sqli
11c30 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
11c40 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20  ree() to.    ** 
11c50 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70  acquire the comp
11c60 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78 74  lete header text
11c70 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
11c80 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c   !zRec && avail<
11c90 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65  len ){.      sMe
11ca0 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  m.flags = 0;.   
11cb0 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a     sMem.db = 0;.
11cc0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
11cd0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
11ce0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e  ee(pCrsr, 0, len
11cf0 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
11d00 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
11d10 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
11d20 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
11d30 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
11d40 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
11d50 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
11d60 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
11d70 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e  (u8 *)&zData[len
11d80 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75  ];.    zIdx = (u
11d90 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72  8 *)&zData[szHdr
11da0 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20  ];..    /* Scan 
11db0 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75  the header and u
11dc0 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e  se it to fill in
11dd0 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64   the aType[] and
11de0 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a   aOffset[].    *
11df0 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65  * arrays.  aType
11e00 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
11e10 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65   the type intege
11e20 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20  r for the i-th. 
11e30 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64     ** column and
11e40 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c   aOffset[i] will
11e50 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66   contain the off
11e60 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
11e70 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66  inning.    ** of
11e80 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74   the record to t
11e90 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
11ea0 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74  data for the i-t
11eb0 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a  h column.    */.
11ec0 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 6f      offset64 = o
11ed0 66 66 73 65 74 3b 0a 20 20 20 20 66 6f 72 28 69  ffset;.    for(i
11ee0 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b  =0; i<nField; i+
11ef0 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49  +){.      if( zI
11f00 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20  dx<zEndHdr ){.  
11f10 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
11f20 20 3d 20 28 75 33 32 29 6f 66 66 73 65 74 36 34   = (u32)offset64
11f30 3b 0a 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b  ;.        zIdx +
11f40 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 7a 49  = getVarint32(zI
11f50 64 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20  dx, aType[i]);. 
11f60 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
11f70 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
11f80 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
11f90 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  e[i]);.      }el
11fa0 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
11fb0 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74  f i is less that
11fc0 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68   nField, then th
11fd0 65 72 65 20 61 72 65 20 6c 65 73 73 20 66 69 65  ere are less fie
11fe0 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
11ff0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
12000 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
12010 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
12020 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
12030 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
12040 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
12050 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
12060 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
12070 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
12080 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
12090 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
120a0 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
120b0 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20  tore a NULL.    
120c0 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
120d0 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20  f deserializing 
120e0 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  a value from the
120f0 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20   record..       
12100 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66   */.        aOff
12110 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20  set[i] = 0;.    
12120 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
12130 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
12140 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
12150 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
12160 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49  _Null;..    /* I
12170 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
12180 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
12190 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
121a0 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
121b0 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74  ,.    ** or if t
121c0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
121d0 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
121e0 20 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20   to be past the 
121f0 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  end of the.    *
12200 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20  * record, or if 
12210 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
12220 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
12230 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74  s to be before t
12240 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66  he end.    ** of
12250 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65   the record (whe
12260 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65  n all fields pre
12270 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d  sent), then we m
12280 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a  ust be dealing .
12290 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
122a0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
122b0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
122c0 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 7c  zIdx > zEndHdr)|
122d0 7c 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 61  | (offset64 > pa
122e0 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
122f0 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64  || (zIdx==zEndHd
12300 72 20 26 26 20 6f 66 66 73 65 74 36 34 21 3d 28  r && offset64!=(
12310 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 29  u64)payloadSize)
12320 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
12330 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
12340 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
12350 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
12360 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65    }.  }..  /* Ge
12370 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66  t the column inf
12380 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66  ormation. If aOf
12390 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d  fset[p2] is non-
123a0 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  zero, then .  **
123b0 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65   deserialize the
123c0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
123d0 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73  record. If aOffs
123e0 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a  et[p2] is zero,.
123f0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20    ** then there 
12400 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66  are not enough f
12410 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
12420 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74  ord to satisfy t
12430 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e  he.  ** request.
12440 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
12450 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55  set the value NU
12460 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50  LL or to P4 if P
12470 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e  4 is.  ** a poin
12480 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a  ter to a Mem obj
12490 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ect..  */.  if( 
124a0 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20  aOffset[p2] ){. 
124b0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
124c0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
124d0 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20  if( zRec ){.    
124e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
124f0 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
12500 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71  pDest);.      sq
12510 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
12520 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61  et((u8 *)&zRec[a
12530 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79  Offset[p2]], aTy
12540 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
12550 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12560 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
12570 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
12580 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20  aType[p2]);.    
12590 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
125a0 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73  Move(&sMem, pDes
125b0 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  t);.      rc = s
125c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
125d0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
125e0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
125f0 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
12600 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
12610 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12620 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
12630 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
12640 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
12650 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
12660 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12670 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c  lGet((u8*)zData,
12680 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73   aType[p2], pDes
12690 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44  t);.    }.    pD
126a0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
126b0 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ing;.  }else{.  
126c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
126d0 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
126e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
126f0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
12700 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
12710 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
12720 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12730 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66  assert( pDest->f
12740 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  lags&MEM_Null );
12750 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
12760 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
12770 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
12780 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
12790 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a  ata (in the.  **
127a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
127b0 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
127c0 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
127d0 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
127e0 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69  that.  ** dynami
127f0 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
12800 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68  space over to th
12810 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72  e pDest structur
12820 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65  e..  ** This pre
12830 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
12840 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  opy..  */.  if( 
12850 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
12860 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d      assert( sMem
12870 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  .z==sMem.zMalloc
12880 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
12890 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
128a0 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20   MEM_Dyn) );.   
128b0 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
128c0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
128d0 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c  lob|MEM_Str)) ||
128e0 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
128f0 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  z );.    pDest->
12900 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
12910 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
12920 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
12930 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
12940 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
12950 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74  Mem.z;.    pDest
12960 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
12970 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20  .zMalloc;.  }.. 
12980 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
12990 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
129a0 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f  e(pDest);..op_co
129b0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
129c0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
129d0 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
129e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
129f0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
12a00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12a10 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
12a20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70  * P4 *.**.** App
12a30 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
12a40 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
12a50 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
12a60 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
12a70 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
12a80 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
12a90 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
12aa0 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
12ab0 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
12ac0 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
12ad0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
12ae0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
12af0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
12b00 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
12b10 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
12b20 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
12b30 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
12b40 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
12b50 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
12b60 69 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ied */.  Mem *pD
12b70 61 74 61 30 3b 20 20 20 20 20 20 20 2f 2a 20 46  ata0;       /* F
12b80 69 72 73 74 20 72 65 67 69 73 74 65 72 20 74 6f  irst register to
12b90 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20   which to apply 
12ba0 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65  affinity */.  Me
12bb0 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
12bc0 20 2f 2a 20 4c 61 73 74 20 72 65 67 69 73 74 65   /* Last registe
12bd0 72 20 74 6f 20 77 68 69 63 68 20 74 6f 20 61 70  r to which to ap
12be0 70 6c 79 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a  ply affinity */.
12bf0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
12c00 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
12c10 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 7a  register */..  z
12c20 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
12c30 70 34 2e 7a 3b 0a 20 20 70 44 61 74 61 30 20 3d  p4.z;.  pData0 =
12c40 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
12c50 31 5d 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  1];.  pLast = &p
12c60 44 61 74 61 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d  Data0[pOp->p2-1]
12c70 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
12c80 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
12c90 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 45  ; pRec++){.    E
12ca0 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b  xpandBlob(pRec);
12cb0 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
12cc0 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69  ty(pRec, zAffini
12cd0 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c  ty[pRec-pData0],
12ce0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a   encoding);.  }.
12cf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12d00 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
12d10 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
12d20 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32  **.** Convert P2
12d30 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
12d40 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74  ning with P1 int
12d50 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e 74 72 79  o a single entry
12d60 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20 66 6f 72  .** suitable for
12d70 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
12d80 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
12d90 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
12da0 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
12db0 6e 64 65 78 2e 20 20 54 68 65 20 64 65 74 61 69  ndex.  The detai
12dc0 6c 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 74  ls of the format
12dd0 20 61 72 65 20 69 72 72 65 6c 65 76 61 6e 74 20   are irrelevant 
12de0 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68  as long as.** th
12df0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
12e00 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68  de can decode th
12e10 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a  e record later..
12e20 2a 2a 20 52 65 66 65 72 20 74 6f 20 73 6f 75 72  ** Refer to sour
12e30 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73  ce code comments
12e40 20 66 6f 72 20 74 68 65 20 64 65 74 61 69 6c 73   for the details
12e50 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 0a 2a   of the record.*
12e60 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20  * format..**.** 
12e70 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
12e80 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
12e90 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
12ea0 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
12eb0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
12ec0 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
12ed0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
12ee0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
12ef0 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
12f00 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
12f10 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
12f20 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
12f30 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
12f40 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
12f50 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
12f60 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
12f70 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
12f80 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
12f90 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
12fa0 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
12fb0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
12fc0 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65  ty NONE..*/.case
12fd0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
12fe0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
12ff0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
13000 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
13010 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
13020 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
13030 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
13040 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
13050 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
13060 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
13070 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13080 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
13090 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
130a0 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
130b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
130c0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
130d0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
130e0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
130f0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
13100 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
13110 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
13120 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
13130 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13140 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
13150 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
13160 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
13170 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
13180 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
13190 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
131a0 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
131b0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
131c0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
131d0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
131e0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
131f0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
13200 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
13210 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
13220 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
13230 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
13240 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
13250 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
13260 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13270 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
13280 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
13290 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
132a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
132b0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
132c0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
132d0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
132e0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
132f0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
13300 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
13310 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
13320 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
13330 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
13340 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  rd[] */.  int le
13350 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
13360 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
13370 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
13380 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
13390 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
133a0 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
133b0 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
133c0 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
133d0 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
133e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13420 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
13430 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
13440 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
13450 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
13460 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
13470 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
13480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
134b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
134c0 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
134d0 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
134e0 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
134f0 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
13500 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
13510 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
13520 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
13530 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
13540 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
13550 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
13560 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
13570 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
13580 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
13590 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
135a0 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
135b0 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
135c0 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
135d0 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
135e0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
135f0 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
13600 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13610 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
13620 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
13630 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
13640 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
13650 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
13660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13670 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
13680 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
13690 20 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20    nByte = 0;    
136a0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
136b0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
136c0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
136d0 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
136e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
136f0 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
13700 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
13710 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
13720 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
13730 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
13740 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
13750 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
13760 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
13770 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b  nField<=p->nMem+
13780 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
13790 26 70 2d 3e 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d  &p->aMem[nField]
137a0 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
137b0 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
137c0 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
137d0 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
137e0 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
137f0 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
13800 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
13810 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
13820 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
13830 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
13840 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
13850 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
13860 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
13870 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
13880 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
13890 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
138a0 65 63 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a  ec++){.    if( z
138b0 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
138c0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
138d0 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
138e0 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
138f0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
13900 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
13910 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
13920 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
13930 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13940 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
13950 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
13960 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
13970 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
13980 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
13990 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
139a0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
139b0 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
139c0 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
139d0 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
139e0 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
139f0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
13a00 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
13a10 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
13a20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
13a30 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
13a40 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
13a50 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
13a60 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
13a70 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
13a80 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
13a90 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
13aa0 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
13ab0 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
13ac0 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
13ad0 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
13ae0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
13af0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13b00 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
13b10 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
13b20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
13b30 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
13b40 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
13b50 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
13b60 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
13b70 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
13b80 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
13b90 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
13ba0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
13bb0 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
13bc0 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
13bd0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
13be0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
13bf0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
13c00 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
13c10 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
13c20 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
13c30 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
13c40 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
13c50 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
13c60 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
13c70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
13c80 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
13c90 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
13ca0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
13cb0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
13cc0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
13cd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
13ce0 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
13cf0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
13d00 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
13d10 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
13d20 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
13d30 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
13d40 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
13d50 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
13d60 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
13d70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
13d80 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
13d90 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  yte, 0) ){.    g
13da0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
13db0 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
13dc0 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
13dd0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
13de0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
13df0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
13e00 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66  cord, nHdr);.  f
13e10 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
13e20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13e30 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c  c++){.    serial
13e40 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
13e50 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
13e60 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
13e70 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
13e80 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
13e90 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
13ea0 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72  pe);      /* ser
13eb0 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a  ial type */.  }.
13ec0 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
13ed0 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
13ee0 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72  pRec++){  /* ser
13ef0 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  ial data */.    
13f00 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  i += sqlite3Vdbe
13f10 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
13f20 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28  ecord[i], (int)(
13f30 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66  nByte-i), pRec,f
13f40 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d  ile_format);.  }
13f50 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42  .  assert( i==nB
13f60 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
13f70 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
13f80 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
13f90 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
13fa0 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
13fb0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
13fc0 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20  lob | MEM_Dyn;. 
13fd0 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
13fe0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
13ff0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
14000 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
14010 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
14020 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
14030 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
14040 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
14050 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
14060 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
14070 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
14080 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
14090 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
140a0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
140b0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
140c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
140d0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
140e0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
140f0 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
14100 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
14110 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
14120 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
14130 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
14140 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
14150 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
14160 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
14170 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
14180 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
14190 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
141a0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
141b0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
141c0 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
141d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
141e0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
141f0 20 70 43 72 73 72 20 29 7b 0a 20 20 20 20 72 63   pCrsr ){.    rc
14200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
14210 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
14220 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  try);.  }else{. 
14230 20 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20     nEntry = 0;. 
14240 20 7d 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73   }.  pOut->flags
14250 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f   = MEM_Int;.  pO
14260 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
14270 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
14280 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
14290 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
142a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
142b0 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
142c0 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
142d0 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
142e0 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
142f0 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
14300 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
14310 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
14320 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
14330 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
14340 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
14350 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
14360 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
14370 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
14380 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
14390 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
143a0 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
143d0 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
143e0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
14410 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
14420 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
14430 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
14440 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
14450 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
14460 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
14470 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
14480 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
14490 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
144a0 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
144b0 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
144c0 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
144d0 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
144e0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
144f0 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
14500 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
14510 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
14520 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
14530 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
14540 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
14550 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
14560 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
14570 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
14580 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
14590 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
145a0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
145b0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
145c0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
145d0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
145e0 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
145f0 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
14600 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
14610 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  db) );..  if( p1
14620 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
14630 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
14640 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
14650 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
14660 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
14670 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
14680 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
14690 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
146a0 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
146b0 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
146c0 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
146d0 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
146e0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
146f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
14700 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
14710 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
14720 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
14730 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
14740 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
14750 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14760 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
14770 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
14780 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
14790 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20  0(zName);..     
147a0 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
147b0 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
147c0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
147d0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
147e0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
147f0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
14800 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
14810 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
14820 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
14830 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
14840 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
14850 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
14860 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
14870 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
14880 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
14890 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
148a0 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
148b0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
148c0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
148d0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
148e0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
148f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
14900 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
14910 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
14920 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
14930 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
14940 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
14950 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14960 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
14970 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
14980 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
14990 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
149a0 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
149b0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
149c0 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
149d0 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
149e0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
149f0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
14a00 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
14a10 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
14a20 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
14a30 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
14a40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
14a50 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
14a60 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
14a70 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
14a80 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
14a90 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
14aa0 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
14ab0 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
14ac0 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
14ad0 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
14ae0 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
14af0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
14b00 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
14b10 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
14b20 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
14b30 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
14b40 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
14b50 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
14b60 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
14b70 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
14b80 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
14b90 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
14ba0 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
14bb0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
14bc0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
14bd0 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
14be0 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
14bf0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14c00 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
14c10 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20 20  else if( .      
14c20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43    db->writeVdbeC
14c30 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56  nt>0 || (p1==SAV
14c40 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
14c50 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  && db->activeVdb
14c60 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a  eCnt>1) .    ){.
14c70 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
14c80 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
14c90 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
14ca0 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
14cb0 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
14cc0 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
14cd0 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20 69  statements. It i
14ce0 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
14cf0 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76  o rollback a sav
14d00 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  epoint.      ** 
14d10 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
14d20 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
14d30 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20  ts at all..     
14d40 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
14d50 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
14d60 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
14d70 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73 20       "cannot %s 
14d80 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
14d90 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
14da0 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20  ogress",.       
14db0 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f   (p1==SAVEPOINT_
14dc0 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c  ROLLBACK ? "roll
14dd0 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65 22  back": "release"
14de0 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
14df0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
14e00 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
14e10 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
14e20 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
14e30 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
14e40 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
14e50 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
14e60 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
14e70 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
14e80 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
14e90 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
14ea0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
14eb0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
14ec0 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
14ed0 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
14ee0 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
14ef0 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
14f00 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
14f10 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
14f20 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
14f30 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
14f40 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
14f50 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
14f60 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
14f70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14f80 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
14f90 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
14fa0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
14fb0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
14fc0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
14fd0 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
14fe0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
14ff0 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
15000 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  c;.          db-
15010 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
15020 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
15030 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
15040 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
15050 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
15060 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15070 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
15080 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
15090 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
150a0 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
150b0 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76  se{.        iSav
150c0 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
150d0 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
150e0 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
150f0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
15100 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
15110 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
15120 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
15130 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
15140 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
15150 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
15160 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15170 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
15180 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15190 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
151a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
151b0 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
151c0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
151d0 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
151e0 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
151f0 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
15200 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
15210 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
15220 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
15230 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
15240 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
15250 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  (db, 0);.       
15260 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
15270 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
15280 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
15290 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
152a0 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
152b0 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
152c0 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
152d0 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
152e0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
152f0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
15300 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
15310 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
15320 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
15330 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
15340 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
15350 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
15360 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
15370 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
15380 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
15390 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
153a0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
153b0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
153c0 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
153d0 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
153e0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
153f0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
15400 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
15410 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
15420 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
15430 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
15440 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
15450 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
15460 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
15470 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
15480 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
15490 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
154a0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
154b0 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
154c0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
154d0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
154e0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
154f0 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
15500 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
15510 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
15520 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
15530 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
15540 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
15550 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
15560 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
15570 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
15580 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
15590 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
155a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
155b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
155c0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
155d0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
155e0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
155f0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
15600 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15610 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
15620 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
15630 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
15640 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
15650 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
15660 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
15670 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
15680 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
15690 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
156a0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
156b0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
156c0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
156d0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
156e0 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
156f0 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
15700 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
15710 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
15720 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
15730 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
15740 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
15750 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
15760 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
15770 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
15780 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
15790 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
157a0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
157b0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
157c0 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
157d0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
157e0 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
157f0 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
15800 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
15810 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
15820 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
15830 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
15840 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
15850 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
15860 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
15870 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
15880 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
15890 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
158a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
158b0 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
158c0 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  t>0 );  /* At le
158d0 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
158e0 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20  is active */..  
158f0 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
15900 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
15910 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
15920 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
15930 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
15940 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c  mplements a ROLL
15950 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56  BACK and other V
15960 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74  Ms are.    ** st
15970 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64  ill running, and
15980 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
15990 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e  s active, return
159a0 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
159b0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74  ting.    ** that
159c0 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
159d0 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
159e0 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
159f0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
15a00 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15a10 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  , "cannot rollba
15a20 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  ck transaction -
15a30 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
15a40 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
15a50 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
15a60 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15a70 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e    }else if( turn
15a80 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61  OnAC && !iRollba
15a90 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56  ck && db->writeV
15aa0 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
15ab0 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
15ac0 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
15ad0 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
15ae0 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
15af0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
15b00 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
15b10 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
15b20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
15b30 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
15b40 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
15b50 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15b60 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
15b70 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
15b80 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
15b90 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15ba0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15bb0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
15bc0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
15bd0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
15be0 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
15bf0 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
15c00 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
15c10 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
15c20 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
15c30 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
15c40 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
15c50 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
15c60 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
15c70 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
15c80 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
15c90 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
15ca0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
15cb0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
15cc0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15cd0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15ce0 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
15cf0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
15d00 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
15d10 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
15d20 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
15d30 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
15d40 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15d50 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
15d60 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
15d70 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
15d80 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
15d90 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
15da0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
15db0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
15dc0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
15dd0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
15de0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
15df0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
15e00 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
15e10 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
15e20 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
15e30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
15e40 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15e50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
15e60 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
15e70 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
15e80 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15e90 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
15ea0 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
15eb0 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
15ec0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
15ed0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
15ee0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
15ef0 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
15f00 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
15f10 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
15f20 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
15f50 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
15f60 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
15f70 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
15f80 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15f90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
15fa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
15fb0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a  nsaction P1 P2 *
15fc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
15fd0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
15fe0 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   The transaction
15ff0 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d   ends when a Com
16000 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a  mit or Rollback.
16010 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63  ** opcode is enc
16020 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e  ountered.  Depen
16030 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43  ding on the ON C
16040 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c  ONFLICT setting,
16050 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74   the.** transact
16060 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ion might also b
16070 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66  e rolled back if
16080 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
16090 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  ountered..**.** 
160a0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
160b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
160c0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
160d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
160e0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
160f0 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
16100 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
16110 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
16120 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
16130 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
16140 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
16150 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
16160 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
16170 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
16180 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
16190 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
161a0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
161b0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41  n is started.  A
161c0 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69   RESERVED lock i
161d0 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e  s.** obtained on
161e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
161f0 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d  le when a write-
16200 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
16210 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f  tarted.  No.** o
16220 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e  ther process can
16230 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77   start another w
16240 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
16250 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e   while this tran
16260 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e  saction is.** un
16270 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e  derway.  Startin
16280 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  g a write transa
16290 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74  ction also creat
162a0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
162b0 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74  urnal. A.** writ
162c0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  e transaction mu
162d0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
162e0 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73  fore any changes
162f0 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
16300 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
16310 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20    If P2 is 2 or 
16320 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20  greater then an 
16330 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69  EXCLUSIVE lock i
16340 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a  s also obtained.
16350 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a  ** on the file..
16360 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
16370 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
16380 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
16390 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
163a0 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
163b0 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
163c0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
163d0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
163e0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
163f0 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
16400 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
16410 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
16420 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
16430 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
16440 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
16450 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
16460 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
16470 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
16480 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
16490 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
164a0 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
164b0 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
164c0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
164d0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
164e0 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
164f0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
16500 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66  n allows the aff
16510 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ects of this.** 
16520 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
16530 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
16540 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
16550 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
16560 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
16570 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
16580 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
16590 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
165a0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
165b0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
165c0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
165d0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
165e0 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  lts..**.** If P2
165f0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
16600 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
16610 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
16620 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
16630 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
16640 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
16650 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
16660 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
16670 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
16680 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
16690 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
166a0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
166b0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
166c0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
166d0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
166e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
166f0 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
16700 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
16710 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
16720 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
16730 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
16740 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
16750 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
16760 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16770 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
16780 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
16790 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
167a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
167b0 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
167c0 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
167d0 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
167e0 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
167f0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74  it==0 || db->act
16800 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20  iveVdbeCnt>1) . 
16810 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
16820 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
16830 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
16840 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
16850 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
16860 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
16870 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
16880 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
16890 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
168a0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
168b0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
168c0 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
168d0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
168e0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
168f0 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
16900 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
16910 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
16920 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20  Statement);..   
16930 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
16940 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
16950 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
16960 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
16970 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
16980 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
16990 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
169a0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
169b0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
169c0 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
169d0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
169e0 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
169f0 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
16a00 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
16a10 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
16a20 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
16a30 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
16a40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
16a50 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
16a60 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
16a70 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
16a80 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
16a90 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
16aa0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
16ab0 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
16ac0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
16ad0 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
16ae0 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
16af0 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
16b00 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
16b10 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
16b20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
16b30 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
16b40 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
16b50 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
16b60 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
16b70 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
16b80 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
16b90 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
16ba0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
16bb0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
16bc0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
16bd0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
16be0 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
16bf0 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
16c00 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
16c10 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
16c20 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
16c30 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
16c40 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
16c50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
16c60 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
16c70 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
16c80 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
16c90 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d  Cookie;..  iDb =
16ca0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
16cb0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
16cc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
16cd0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
16ce0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
16cf0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
16d00 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
16d10 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
16d20 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
16d30 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
16d40 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
16d50 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  =0 );..  sqlite3
16d60 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
16d70 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
16d80 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
16d90 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e  iMeta);.  pOut->
16da0 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d  u.i = iMeta;.  M
16db0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
16dc0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
16dd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16de0 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
16df0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
16e00 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
16e10 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
16e20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
16e30 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
16e40 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
16e50 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
16e60 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69  ase P1.  P2==1 i
16e70 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
16e80 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32  sion.  .** P2==2
16e90 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
16ea0 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69   format. P2==3 i
16eb0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
16ec0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
16ed0 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
16ee0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
16ef0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16f00 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
16f10 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
16f20 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
16f30 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
16f40 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
16f50 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
16f60 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
16f70 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
16f80 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
16f90 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
16fa0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
16fb0 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
16fc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
16fd0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
16fe0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
16ff0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
17000 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
17010 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17020 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
17030 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
17040 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
17050 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
17060 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
17070 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  0 );.  sqlite3Vd
17080 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
17090 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
170a0 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
170b0 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
170c0 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
170d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
170e0 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
170f0 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28  >pBt, pOp->p2, (
17100 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
17110 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
17120 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
17130 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
17140 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
17150 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
17160 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
17170 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
17180 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
17190 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
171a0 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
171b0 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
171c0 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
171d0 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
171e0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
171f0 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
17200 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
17210 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
17220 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
17230 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
17240 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
17250 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
17260 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
17270 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
17280 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
17290 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
172a0 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
172b0 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
172c0 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
172d0 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
172e0 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
172f0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
17300 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
17310 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
17320 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
17330 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17340 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
17350 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P2 *.**.** Check
17360 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
17370 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
17380 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
17390 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
173a0 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
173b0 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
173c0 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50  al to P2.  .** P
173d0 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
173e0 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
173f0 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
17400 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
17410 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
17420 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
17430 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
17440 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
17450 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
17460 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
17470 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
17480 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
17490 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
174a0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
174b0 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
174c0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
174d0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
174e0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
174f0 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
17500 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
17510 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
17520 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
17530 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
17540 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
17550 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
17560 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
17570 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
17580 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
17590 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
175a0 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
175b0 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
175c0 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
175d0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
175e0 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
175f0 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74   int iMeta;.  Bt
17600 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65  ree *pBt;.  asse
17610 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
17620 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
17630 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
17640 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
17650 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
17660 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
17670 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
17680 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
17690 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
176a0 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
176b0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
176c0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
176d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 4d  .  }else{.    iM
176e0 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  eta = 0;.  }.  i
176f0 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  f( iMeta!=pOp->p
17700 32 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  2 ){.    sqlite3
17710 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
17720 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
17730 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
17740 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
17750 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
17760 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
17770 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
17780 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
17790 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
177a0 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
177b0 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
177c0 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
177d0 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
177e0 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
177f0 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
17800 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
17810 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
17820 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
17830 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
17840 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
17850 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
17860 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
17870 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
17880 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
17890 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
178a0 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
178b0 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
178c0 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
178d0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
178e0 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
178f0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
17900 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
17910 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
17920 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
17930 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
17940 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
17950 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
17960 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
17970 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
17980 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
17990 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
179a0 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
179b0 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
179c0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
179d0 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
179e0 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
179f0 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
17a00 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
17a10 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
17a20 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
17a30 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
17a40 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
17a50 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
17a60 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
17a70 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
17a80 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
17a90 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
17aa0 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
17ab0 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  1);.    }..    s
17ac0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17ad0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17ae0 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  b);.    rc = SQL
17af0 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
17b00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17b10 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
17b20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
17b30 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
17b40 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
17b50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
17b60 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
17b70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
17b80 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
17b90 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
17ba0 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
17bb0 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
17bc0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
17bd0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
17be0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
17bf0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
17c00 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
17c10 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
17c20 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
17c30 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
17c40 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
17c50 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
17c60 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
17c70 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
17c80 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
17c90 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
17ca0 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
17cb0 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
17cc0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
17cd0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
17ce0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
17cf0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
17d00 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
17d10 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
17d20 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
17d30 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
17d40 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
17d50 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
17d60 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
17d70 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
17d80 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
17d90 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
17da0 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
17db0 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
17dc0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
17dd0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
17de0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
17df0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
17e00 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
17e10 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
17e20 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
17e30 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
17e40 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
17e50 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
17e60 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
17e70 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
17e80 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
17e90 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
17ea0 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
17eb0 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
17ec0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
17ed0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
17ee0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17ef0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
17f00 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
17f10 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
17f20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
17f30 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
17f40 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
17f50 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
17f60 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
17f70 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
17f80 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
17f90 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
17fa0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
17fb0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
17fc0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
17fd0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
17fe0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
17ff0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
18000 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
18010 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
18020 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
18030 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
18040 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
18050 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
18060 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
18070 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
18080 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
18090 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
180a0 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
180b0 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74  ee also OpenWrit
180c0 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
180d0 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
180e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
180f0 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
18100 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
18110 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
18120 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
18130 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
18140 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
18150 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
18160 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
18170 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
18180 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
18190 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
181a0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
181b0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
181c0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
181d0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
181e0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
181f0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
18200 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
18210 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
18220 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
18230 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
18240 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
18250 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
18260 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
18270 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
18280 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
18290 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
182a0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
182b0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
182c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
182d0 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
182e0 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
182f0 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
18300 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
18310 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
18320 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
18330 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
18340 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
18350 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
18360 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
18370 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
18380 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
18390 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
183a0 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
183b0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
183c0 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
183d0 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
183e0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
183f0 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
18400 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
18410 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
18420 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
18430 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b   OP_OpenWrite: {
18440 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
18450 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
18460 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
18470 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
18480 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
18490 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
184a0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
184b0 62 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  b;..  if( p->exp
184c0 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d  ired ){.    rc =
184d0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20   SQLITE_ABORT;. 
184e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
184f0 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
18500 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
18510 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
18520 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
18530 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
18540 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
18550 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
18560 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69  treeMask & (1<<i
18570 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  Db))!=0 );.  pDb
18580 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
18590 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
185a0 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
185b0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
185c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
185d0 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
185e0 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  lag = 1;.    if(
185f0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
18600 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
18610 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
18620 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
18630 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
18640 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
18650 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
18660 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
18670 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
18680 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
18690 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
186a0 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
186b0 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  t( p2<=p->nMem )
186c0 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d  ;.    pIn2 = &p-
186d0 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73  >aMem[p2];.    s
186e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
186f0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
18700 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
18710 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
18720 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
18730 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
18740 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54  prior OP_CreateT
18750 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  able opcode and.
18760 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
18770 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
18780 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
18790 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
187a0 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
187b0 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
187c0 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
187d0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
187e0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
187f0 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
18800 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
18810 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
18820 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32      if( NEVER(p2
18830 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63  <2) ) {.      rc
18840 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
18850 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
18860 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18870 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
18880 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
18890 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
188a0 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
188b0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
188c0 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d  o;.    pKeyInfo-
188d0 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
188e0 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
188f0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
18900 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  +1;.  }else if( 
18910 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
18920 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
18930 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
18940 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
18950 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
18960 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
18970 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
18980 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
18990 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
189a0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
189b0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
189c0 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
189d0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
189e0 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
189f0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43  eyInfo, pCur->pC
18a00 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
18a10 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
18a20 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65  nfo;..  /* Since
18a30 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20   it performs no 
18a40 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18a50 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c  n or IO, the onl
18a60 79 20 76 61 6c 75 65 73 20 74 68 61 74 0a 20 20  y values that.  
18a70 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
18a80 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75  ursor() may retu
18a90 72 6e 20 61 72 65 20 53 51 4c 49 54 45 5f 45 4d  rn are SQLITE_EM
18aa0 50 54 59 20 61 6e 64 20 53 51 4c 49 54 45 5f 4f  PTY and SQLITE_O
18ab0 4b 2e 20 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f  K. .  ** SQLITE_
18ac0 45 4d 50 54 59 20 69 73 20 6f 6e 6c 79 20 72 65  EMPTY is only re
18ad0 74 75 72 6e 65 64 20 77 68 65 6e 20 61 74 74 65  turned when atte
18ae0 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74  mpting to open t
18af0 68 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72 6f  he table.  ** ro
18b00 6f 74 65 64 20 61 74 20 70 61 67 65 20 31 20 6f  oted at page 1 o
18b10 66 20 61 20 7a 65 72 6f 2d 62 79 74 65 20 64 61  f a zero-byte da
18b20 74 61 62 61 73 65 2e 20 20 2a 2f 0a 20 20 61 73  tabase.  */.  as
18b30 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
18b40 5f 45 4d 50 54 59 20 7c 7c 20 72 63 3d 3d 53 51  _EMPTY || rc==SQ
18b50 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28  LITE_OK );.  if(
18b60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54   rc==SQLITE_EMPT
18b70 59 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70  Y ){.    pCur->p
18b80 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20  Cursor = 0;.    
18b90 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
18ba0 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68    }..  /* Set th
18bb0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
18bc0 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78  able and isIndex
18bd0 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76   variables. Prev
18be0 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
18bf0 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
18c00 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
18c10 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
18c20 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
18c30 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
18c40 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
18c50 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
18c60 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
18c70 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
18c80 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
18c90 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
18ca0 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
18cb0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
18cc0 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
18cd0 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75  4_KEYINFO;.  pCu
18ce0 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  r->isIndex = !pC
18cf0 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  ur->isTable;.  b
18d00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18d10 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
18d20 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
18d30 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
18d40 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
18d50 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
18d60 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
18d70 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
18d80 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
18d90 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
18da0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
18db0 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73  only.  The trans
18dc0 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a  ient or virtual.
18dd0 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
18de0 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
18df0 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
18e00 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
18e10 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
18e20 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
18e30 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
18e40 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
18e50 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
18e60 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
18e70 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
18e80 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
18e90 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
18ea0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
18eb0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
18ec0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
18ed0 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
18ee0 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
18ef0 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
18f00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
18f10 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c  ode was once cal
18f20 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42  led OpenTemp.  B
18f30 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a  ut that created.
18f40 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63  ** confusion bec
18f50 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74  ause the term "t
18f60 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68  emp table", migh
18f70 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a  t refer either.*
18f80 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c  * to a TEMP tabl
18f90 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  e at the SQL lev
18fa0 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c  el, or to a tabl
18fb0 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74  e opened by.** t
18fc0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  his opcode.  The
18fd0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61  n this opcode wa
18fe0 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75  s call OpenVirtu
18ff0 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  al.  But.** that
19000 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69   created confusi
19010 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c  on with the whol
19020 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
19030 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  idea..*/.case OP
19040 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
19050 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
19060 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  pCx;.  static co
19070 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  nst int openFlag
19080 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
19090 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
190a0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
190b0 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
190c0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
190d0 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
190e0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
190f0 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
19100 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19110 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20  TRANSIENT_DB;.. 
19120 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
19130 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
19140 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
19150 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
19160 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
19170 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
19180 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
19190 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
191a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  = sqlite3BtreeFa
191b0 63 74 6f 72 79 28 64 62 2c 20 30 2c 20 31 2c 20  ctory(db, 0, 1, 
191c0 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 54  SQLITE_DEFAULT_T
191d0 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20  EMP_CACHE_SIZE, 
191e0 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20  openFlags,.     
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 20 20 26 70 43 78 2d 3e 70 42 74 29        &pCx->pBt)
19210 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
19220 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
19230 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
19240 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42  ginTrans(pCx->pB
19250 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28  t, 1);.  }.  if(
19260 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19270 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72  {.    /* If a tr
19280 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73  ansient index is
19290 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74   required, creat
192a0 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a  e it by calling.
192b0 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74      ** sqlite3Bt
192c0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29  reeCreateTable()
192d0 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
192e0 5a 45 52 4f 44 41 54 41 20 66 6c 61 67 20 62 65  ZERODATA flag be
192f0 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
19300 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
19310 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
19320 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
19330 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
19340 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
19350 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
19360 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 49  oot-page 1 (an I
19370 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
19380 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
19390 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b  ->p4.pKeyInfo ){
193a0 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
193b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
193c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
193d0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
193e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
193f0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
19400 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
19410 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a  REE_ZERODATA); .
19420 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
19430 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19440 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
19450 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
19460 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
19470 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
19480 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f  r(pCx->pBt, pgno
19490 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 1, .          
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29        (KeyInfo*)
194c0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e  pOp->p4.z, pCx->
194d0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
194e0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
194f0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
19500 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  fo;.        pCx-
19510 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
19520 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20   ENC(p->db);.   
19530 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
19540 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
19550 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
19560 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
19570 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
19580 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
19590 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
195a0 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
195b0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
195c0 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64    }.  pCx->isInd
195d0 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62  ex = !pCx->isTab
195e0 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  le;.  break;.}..
195f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
19600 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
19610 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20   *.**.** Open a 
19620 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
19630 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
19640 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
19650 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
19660 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
19670 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
19680 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68  at one row in th
19690 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
196a0 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
196b0 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
196c0 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
196d0 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
196e0 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
196f0 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
19700 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
19710 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
19720 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
19730 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
19740 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
19750 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a  ld the a single.
19760 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
19770 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
19780 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
19790 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
197a0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
197b0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
197c0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
197d0 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
197e0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
197f0 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
19800 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
19810 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
19820 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
19830 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
19840 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
19850 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
19860 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
19870 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
19880 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
19890 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
198a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
198b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
198c0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p1>=0 );.  pCx
198d0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
198e0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
198f0 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20  p->p3, -1, 0);. 
19900 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
19910 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
19920 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
19930 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c   pCx->pseudoTabl
19940 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
19950 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
19960 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64   1;.  pCx->isInd
19970 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ex = 0;.  break;
19980 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
19990 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
199a0 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
199b0 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
199c0 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
199d0 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
199e0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
199f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
19a00 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
19a10 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
19a20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19a30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
19a40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
19a50 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
19a60 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
19a70 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
19a80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
19a90 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
19aa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
19ab0 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kGe P1 P2 P3 P4 
19ac0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
19ad0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19ae0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19af0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19b00 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
19b10 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
19b20 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
19b30 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
19b40 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
19b50 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
19b60 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
19b70 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
19b80 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19b90 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19ba0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19bb0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19bc0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19bd0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19be0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19bf0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
19c00 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
19c10 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
19c20 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
19c30 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
19c40 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
19c50 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
19c60 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
19c70 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
19c80 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
19c90 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
19ca0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
19cb0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
19cc0 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
19cd0 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
19ce0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19cf0 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Gt P1 P2 P3 P4 *
19d00 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
19d10 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
19d20 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
19d30 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
19d40 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
19d50 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
19d60 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
19d70 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
19d80 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
19d90 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
19da0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
19db0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
19dc0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
19dd0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
19de0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
19df0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
19e00 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
19e10 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
19e20 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
19e30 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
19e40 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
19e50 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
19e60 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
19e70 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
19e80 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
19e90 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
19ea0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
19eb0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
19ec0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
19ed0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
19ee0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
19ef0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
19f00 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
19f10 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20  SeekLt P1 P2 P3 
19f20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63  P4 * .**.** If c
19f30 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19f40 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
19f50 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
19f60 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
19f70 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
19f80 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
19f90 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
19fa0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19fb0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
19fc0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
19fd0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
19fe0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
19ff0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1a000 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1a010 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1a020 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1a030 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1a040 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1a050 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1a060 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1a070 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1a080 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1a090 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1a0a0 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
1a0b0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1a0c0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1a0d0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1a0e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1a0f0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1a100 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
1a110 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1a120 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1a130 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  ekLe P1 P2 P3 P4
1a140 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
1a150 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1a160 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1a170 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1a180 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1a190 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1a1a0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1a1b0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1a1c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1a1d0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1a1e0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1a1f0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1a200 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1a210 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1a220 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1a230 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1a240 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1a250 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1a260 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1a270 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1a280 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1a290 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1a2a0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1a2b0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1a2c0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
1a2d0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1a2e0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1a2f0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1a300 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1a310 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a320 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1a330 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1a340 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1a350 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1a360 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f  eekLt:         /
1a370 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1a380 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20  ase OP_SeekLe:  
1a390 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1a3a0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1a3b0 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f  eekGe:         /
1a3c0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1a3d0 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b  ase OP_SeekGt: {
1a3e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1a3f0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1a400 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64  ;.  int oc;.  Vd
1a410 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1a420 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1a430 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  ;.  int nField;.
1a440 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1a450 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
1a460 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
1a470 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
1a480 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1a490 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1a4a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a4b0 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
1a4c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1a4d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1a4e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1a4f0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1a500 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Reg==0 );.  if( 
1a510 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1a520 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
1a530 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
1a540 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1a550 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1a560 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
1a570 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1a580 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1a590 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1a5a0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1a5b0 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
1a5c0 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1a5d0 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1a5e0 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1a5f0 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
1a600 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1a610 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1a620 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1a630 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
1a640 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
1a650 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1a660 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  In3);.      pC->
1a670 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1a680 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ;..      /* If t
1a690 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
1a6a0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
1a6b0 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
1a6c0 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20  er without.     
1a6d0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
1a6e0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
1a6f0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
1a700 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
1a710 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
1a720 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1a730 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1a740 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1a750 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1a760 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
1a770 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1a780 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
1a790 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
1a7a0 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
1a7b0 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74  ,.          ** t
1a7c0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1a7d0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1a7e0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1a7f0 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
1a800 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1a810 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a820 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
1a830 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
1a840 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68  s point, then th
1a850 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1a860 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20  be a floating.  
1a870 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e        ** point n
1a880 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  umber. */.      
1a890 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1a8a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1a8b0 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  l)!=0 );..      
1a8c0 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c    if( iKey==SMAL
1a8d0 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70  LEST_INT64 && (p
1a8e0 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69  In3->r<(double)i
1a8f0 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30  Key || pIn3->r>0
1a900 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  ) ){.          /
1a910 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
1a920 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d  s too large in m
1a930 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65  agnitude to be e
1a940 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20  xpressed as an. 
1a950 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65           ** inte
1a960 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ger. */.        
1a970 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20    res = 1;.     
1a980 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1a990 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
1a9a0 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1a9b0 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGt || oc==OP_Se
1a9c0 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekGe ){.        
1a9d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a9e0 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d  e3BtreeFirst(pC-
1a9f0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1aa00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1aa10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1aa20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1aa30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1aa40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1aa50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1aa60 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f         if( oc==O
1aa70 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1aa80 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20  OP_SeekLe ){.   
1aa90 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1aaa0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1aab0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1aac0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  es);.           
1aad0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1aae0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1aaf0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1ab10 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1ab20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1ab30 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20             pc = 
1ab40 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1ab50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ab60 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1ab70 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d    }else if( oc==
1ab80 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1ab90 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
1aba0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1abb0 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e  he ceiling() fun
1abc0 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1abd0 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1abe0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1abf0 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b  ->r > (double)iK
1ac00 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20  ey ) iKey++;.   
1ac10 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ac20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65        /* Use the
1ac30 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f   floor() functio
1ac40 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1ac50 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1ac60 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1ac70 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d  OP_SeekLe || oc=
1ac80 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1ac90 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1aca0 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b  ->r < (double)iK
1acb0 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20  ey ) iKey--;.   
1acc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a       }.      } .
1acd0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ace0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1acf0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1ad00 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1ad10 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1ad20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1ad30 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1ad40 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1ad50 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1ad60 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1ad70 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  ){.        pC->r
1ad80 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1ad90 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73  .        pC->las
1ada0 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1adb0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1adc0 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d  {.      nField =
1add0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1ade0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1adf0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1ae00 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1ae10 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1ae20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1ae30 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1ae40 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1ae50 75 31 36 29 6e 46 69 65 6c 64 3b 0a 20 20 20 20  u16)nField;.    
1ae60 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1ae70 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGt || oc==OP_Se
1ae80 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekLe ){.        
1ae90 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1aea0 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20  ED_INCRKEY;.    
1aeb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1aec0 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
1aed0 20 20 20 20 7d 0a 20 20 20 20 20 20 72 2e 61 4d      }.      r.aM
1aee0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1aef0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72 63  p->p3];.      rc
1af00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1af10 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1af20 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  ->pCursor, &r, 0
1af30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1af40 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1af50 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1af60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1af70 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1af80 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1af90 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1afa0 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
1afb0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1afc0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1afd0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1afe0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1aff0 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
1b000 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1b010 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f  #endif.    if( o
1b020 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c==OP_SeekGe || 
1b030 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 7b  oc==OP_SeekGt ){
1b040 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30  .      if( res<0
1b050 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1b060 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b  c==OP_SeekGt) ){
1b070 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1b080 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
1b090 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1b0a0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1b0b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1b0c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b0d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1b0e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1b0f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1b100 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
1b110 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1b120 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
1b130 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1b140 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
1b150 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28  kLe );.      if(
1b160 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d   res>0 || (res==
1b170 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1b180 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Lt) ){.        r
1b190 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b1a0 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
1b1b0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1b1c0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1b1d0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1b1e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b1f0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
1b200 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1b210 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1b220 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1b230 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1b240 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1b250 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1b260 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   to.        ** s
1b270 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1b280 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20  e case..        
1b290 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  */.        res =
1b2a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1b2b0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1b2c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1b2d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1b2e0 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  >0 );.    if( re
1b2f0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
1b300 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1b310 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1b320 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
1b330 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20  when attempting 
1b340 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69  to open the sqli
1b350 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  te3_master table
1b360 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64  .    ** for read
1b370 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20   access returns 
1b380 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e  SQLITE_EMPTY. In
1b390 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79   this case alway
1b3a0 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68  s.    ** take th
1b3b0 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68  e jump (since th
1b3c0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1b3d0 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29  ds in the table)
1b3e0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20  ..    */.    pc 
1b3f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1b400 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1b410 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50  * Opcode: Seek P
1b420 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1b430 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74   P1 is an open t
1b440 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20  able cursor and 
1b450 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e  P2 is a rowid in
1b460 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a  teger.  Arrange.
1b470 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76  ** for P1 to mov
1b480 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  e so that it poi
1b490 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64  nts to the rowid
1b4a0 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a   given by P2..**
1b4b0 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75  .** This is actu
1b4c0 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20  ally a deferred 
1b4d0 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
1b4e0 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
1b4f0 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
1b500 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
1b510 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
1b520 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
1b530 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
1b540 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
1b550 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61  O happens..*/.ca
1b560 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20  se OP_Seek: {   
1b570 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
1b580 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
1b590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b5a0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1b5b0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1b5c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1b5d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1b5e0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41  pC!=0 );.  if( A
1b5f0 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
1b600 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
1b610 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1b620 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   );.    pC->null
1b630 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  Row = 0;.    pC-
1b640 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1b650 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1b660 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  lue(pIn2);.    p
1b670 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b680 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1b690 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b  erredMoveto = 1;
1b6a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1b6b0 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1b6c0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  ound P1 P2 P3 * 
1b6d0 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  *.**.** Register
1b6e0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1b6f0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1b700 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20  MakeRecord.  P1 
1b710 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 20  is an index..** 
1b720 49 66 20 61 6e 20 65 6e 74 72 79 20 74 68 61 74  If an entry that
1b730 20 6d 61 74 63 68 65 73 20 74 68 65 20 76 61 6c   matches the val
1b740 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ue in register p
1b750 33 20 65 78 69 73 74 73 20 69 6e 20 50 31 20 74  3 exists in P1 t
1b760 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50  hen.** jump to P
1b770 32 2e 20 20 49 66 20 74 68 65 20 50 33 20 76 61  2.  If the P3 va
1b780 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  lue does not mat
1b790 63 68 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  ch any entry in 
1b7a0 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c 6c 20  P1.** then fall 
1b7b0 74 68 72 75 2e 20 20 54 68 65 20 50 31 20 63 75  thru.  The P1 cu
1b7c0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 70 6f 69  rsor is left poi
1b7d0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
1b7e0 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a 20 69  ching entry.** i
1b7f0 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a  f it exists..**.
1b800 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1b810 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
1b820 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 49 4e 20  mplement the IN 
1b830 6f 70 65 72 61 74 6f 72 20 77 68 65 72 65 20 74  operator where t
1b840 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e 64 20  he.** left-hand 
1b850 73 69 64 65 20 69 73 20 61 20 53 45 4c 45 43 54  side is a SELECT
1b860 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 31 20   statement.  P1 
1b870 6d 61 79 20 62 65 20 61 20 74 72 75 65 20 69 6e  may be a true in
1b880 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d 61  dex, or it.** ma
1b890 79 20 62 65 20 61 20 74 65 6d 70 6f 72 61 72 79  y be a temporary
1b8a0 20 69 6e 64 65 78 20 74 68 61 74 20 68 6f 6c 64   index that hold
1b8b0 73 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  s the results of
1b8c0 20 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a 20 73   the SELECT.** s
1b8d0 74 61 74 65 6d 65 6e 74 2e 20 20 20 54 68 69 73  tatement.   This
1b8e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1b8f0 61 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d 70  also used to imp
1b900 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 44 49  lement the.** DI
1b910 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 69  STINCT keyword i
1b920 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  n SELECT stateme
1b930 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  nts..**.** This 
1b940 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63  instruction chec
1b950 6b 73 20 69 66 20 69 6e 64 65 78 20 50 31 20 63  ks if index P1 c
1b960 6f 6e 74 61 69 6e 73 20 61 20 72 65 63 6f 72 64  ontains a record
1b970 20 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a 20 74   for which .** t
1b980 68 65 20 66 69 72 73 74 20 4e 20 73 65 72 69 61  he first N seria
1b990 6c 69 7a 65 64 20 76 61 6c 75 65 73 20 65 78 61  lized values exa
1b9a0 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4e  ctly match the N
1b9b0 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75   serialized valu
1b9c0 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  es.** in the rec
1b9d0 6f 72 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ord in register 
1b9e0 50 33 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74  P3, where N is t
1b9f0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
1ba00 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a 2a 20  of values in.** 
1ba10 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 28 74  the P3 record (t
1ba20 68 65 20 50 33 20 72 65 63 6f 72 64 20 69 73 20  he P3 record is 
1ba30 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
1ba40 50 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a 2a 0a  P1 record). .**.
1ba50 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1ba60 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 2c  Found, IsUnique,
1ba70 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a   NotExists.*/./*
1ba80 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1ba90 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1baa0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
1bab0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1bac0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1bad0 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73 0a  eRecord.  P1 is.
1bae0 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66  ** an index.  If
1baf0 20 6e 6f 20 65 6e 74 72 79 20 65 78 69 73 74 73   no entry exists
1bb00 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63   in P1 that matc
1bb10 68 65 73 20 74 68 65 20 62 6c 6f 62 20 74 68 65  hes the blob the
1bb20 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  n jump.** to P2.
1bb30 20 20 49 66 20 61 6e 20 65 6e 74 72 79 20 64 6f    If an entry do
1bb40 65 73 20 65 78 69 73 74 69 6e 67 2c 20 66 61 6c  es existing, fal
1bb50 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20  l through.  The 
1bb60 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 0a 2a  cursor is left.*
1bb70 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  * pointing to th
1bb80 65 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74  e entry that mat
1bb90 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ches..**.** See 
1bba0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1bbb0 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65  Exists, IsUnique
1bbc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46  .*/.case OP_NotF
1bbd0 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1bbe0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1bbf0 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1bc00 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1bc10 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1bc20 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43  yExists;.  VdbeC
1bc30 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1bc40 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
1bc50 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
1bc60 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
1bc70 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
1bc80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
1bc90 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20  + sizeof(Mem)*3 
1bca0 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
1bcb0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
1bcc0 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
1bcd0 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72  +;.#endif..  alr
1bce0 65 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a  eadyExists = 0;.
1bcf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bd00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1bd10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1bd20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1bd30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1bd40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1bd50 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1bd60 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20  sor!=0) ){..    
1bd70 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1bd80 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  ble==0 );.    as
1bd90 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1bda0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1bdb0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
1bdc0 49 6e 33 29 3b 0a 20 20 20 20 70 49 64 78 4b 65  In3);.    pIdxKe
1bdd0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  y = sqlite3VdbeR
1bde0 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e  ecordUnpack(pC->
1bdf0 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e  pKeyInfo, pIn3->
1be00 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20  n, pIn3->z,.    
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
1be40 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
1be50 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
1be60 30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  0 ){.      goto 
1be70 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
1be80 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1be90 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
1bea0 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c       pIdxKey->fl
1beb0 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
1bec0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1bed0 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
1bee0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1bef0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1bf00 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
1bf10 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73   0, &res);.    s
1bf20 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
1bf30 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
1bf40 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28  IdxKey);.    if(
1bf50 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1bf60 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
1bf70 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79     }.    already
1bf80 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
1bf90 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
1bfa0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1bfb0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1bfc0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1bfd0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1bfe0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1bff0 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
1c000 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1c010 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c020 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
1c030 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1c040 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c050 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1c060 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
1c070 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20  Unique P1 P2 P3 
1c080 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  P4 *.**.** Curso
1c090 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20  r P1 is open on 
1c0a0 61 6e 20 69 6e 64 65 78 2e 20 20 53 6f 20 69 74  an index.  So it
1c0b0 20 68 61 73 20 6e 6f 20 64 61 74 61 20 61 6e 64   has no data and
1c0c0 20 69 74 73 20 6b 65 79 20 63 6f 6e 73 69 73 74   its key consist
1c0d0 73 20 0a 2a 2a 20 6f 66 20 61 20 72 65 63 6f 72  s .** of a recor
1c0e0 64 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f  d generated by O
1c0f0 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65  P_MakeRecord whe
1c100 72 65 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  re the last fiel
1c110 64 20 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77  d is the .** row
1c120 69 64 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  id of the entry 
1c130 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 72  that the index r
1c140 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  efers to..**.** 
1c150 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
1c160 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65  contains an inte
1c170 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1c180 72 2e 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63  r. Call this rec
1c190 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52  ord .** number R
1c1a0 2e 20 52 65 67 69 73 74 65 72 20 50 34 20 69 73  . Register P4 is
1c1b0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 20   the first in a 
1c1c0 73 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75  set of N contigu
1c1d0 6f 75 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  ous registers.**
1c1e0 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e   that make up an
1c1f0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c200 6b 65 79 20 74 68 61 74 20 63 61 6e 20 62 65 20  key that can be 
1c210 75 73 65 64 20 77 69 74 68 20 63 75 72 73 6f 72  used with cursor
1c220 20 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75   P1..** The valu
1c230 65 20 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e  e of N can be in
1c240 66 65 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20  ferred from the 
1c250 63 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64  cursor. N includ
1c260 65 73 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20  es the rowid.** 
1c270 76 61 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74  value appended t
1c280 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
1c290 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54   index record. T
1c2a0 68 69 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20  his rowid value 
1c2b0 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f  may.** or may no
1c2c0 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
1c2d0 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79   R..**.** If any
1c2e0 20 6f 66 20 74 68 65 20 4e 20 72 65 67 69 73 74   of the N regist
1c2f0 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
1c300 74 68 20 72 65 67 69 73 74 65 72 20 50 34 20 63  th register P4 c
1c310 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a  ontains a NULL.*
1c320 2a 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  * value, jump im
1c330 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1c340 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  .**.** Otherwise
1c350 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1c360 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 63 75 72  on checks if cur
1c370 73 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  sor P1 contains 
1c380 61 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72  an entry.** wher
1c390 65 20 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31  e the first (N-1
1c3a0 29 20 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62  ) fields match b
1c3b0 75 74 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c  ut the rowid val
1c3c0 75 65 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a  ue at the end.**
1c3d0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e   of the index en
1c3e0 74 72 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66  try is not R. If
1c3f0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
1c400 68 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c  h entry, control
1c410 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73   jumps.** to ins
1c420 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
1c430 65 72 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69  erwise, the rowi
1c440 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63  d of the conflic
1c450 74 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e  ting index.** en
1c460 74 72 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f  try is copied to
1c470 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
1c480 20 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74   control falls t
1c490 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1c4a0 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  xt.** instructio
1c4b0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1c4c0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74  o: NotFound, Not
1c4d0 45 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f  Exists, Found.*/
1c4e0 0a 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75  .case OP_IsUniqu
1c4f0 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  e: {        /* j
1c500 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31  ump, in3 */.  u1
1c510 36 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  6 ii;.  VdbeCurs
1c520 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72  or *pCx;.  BtCur
1c530 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31  sor *pCrsr;.  u1
1c540 36 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20  6 nField;.  Mem 
1c550 2a 61 4d 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65  *aMem;.  Unpacke
1c560 64 52 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20  dRecord r;      
1c570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
1c580 2d 54 72 65 65 20 69 6e 64 65 78 20 73 65 61 72  -Tree index sear
1c590 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20  ch key */.  i64 
1c5a0 52 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R;              
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c5c0 2a 20 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69  * Rowid stored i
1c5d0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f  n register P3 */
1c5e0 0a 0a 20 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61  ..  aMem = &p->a
1c5f0 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a  Mem[pOp->p4.i];.
1c600 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1c610 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70   the values of p
1c620 61 72 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64  arameters P1 and
1c630 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65   P4 are in range
1c640 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
1c650 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1c660 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
1c670 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26  ( pOp->p4.i>0 &&
1c680 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e   pOp->p4.i<=p->n
1c690 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Mem );.  assert(
1c6a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c6b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c6c0 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20  r );..  /* Find 
1c6d0 74 68 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72  the index cursor
1c6e0 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e  . */.  pCx = p->
1c6f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1c700 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64    assert( pCx->d
1c710 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1c720 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52   );.  pCx->seekR
1c730 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78  esult = 0;.  pCx
1c740 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c750 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
1c760 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72  Crsr = pCx->pCur
1c770 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e  sor;..  /* If an
1c780 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  y of the values 
1c790 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74  are NULL, take t
1c7a0 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46  he jump. */.  nF
1c7b0 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79  ield = pCx->pKey
1c7c0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  Info->nField;.  
1c7d0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69  for(ii=0; ii<nFi
1c7e0 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
1c7f0 69 66 28 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61  if( aMem[ii].fla
1c800 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1c810 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1c820 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70  >p2 - 1;.      p
1c830 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  Crsr = 0;.      
1c840 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
1c850 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
1c860 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26  [nField].flags &
1c870 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b   MEM_Null)==0 );
1c880 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ..  if( pCrsr!=0
1c890 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c   ){.    /* Popul
1c8a0 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73 65  ate the index se
1c8b0 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20  arch key. */.   
1c8c0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1c8d0 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  x->pKeyInfo;.   
1c8e0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65   r.nField = nFie
1c8f0 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c  ld + 1;.    r.fl
1c900 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1c910 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20  REFIX_SEARCH;.  
1c920 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b    r.aMem = aMem;
1c930 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74  ..    /* Extract
1c940 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20   the value of R 
1c950 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
1c960 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  . */.    sqlite3
1c970 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1c980 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d  y(pIn3);.    R =
1c990 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20   pIn3->u.i;..   
1c9a0 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 42   /* Search the B
1c9b0 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20  -Tree index. If 
1c9c0 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72  no conflicting r
1c9d0 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20  ecord is found, 
1c9e0 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50  jump.    ** to P
1c9f0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f  2. Otherwise, co
1ca00 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  py the rowid of 
1ca10 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20  the conflicting 
1ca20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a  record to.    **
1ca30 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
1ca40 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1ca50 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1ca60 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72  ction.  */.    r
1ca70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ca80 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1ca90 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
1caa0 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74  &pCx->seekResult
1cab0 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c  );.    if( (r.fl
1cac0 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50  ags & UNPACKED_P
1cad0 52 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c  REFIX_SEARCH) ||
1cae0 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20   r.rowid==R ){. 
1caf0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1cb00 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  2 - 1;.    }else
1cb10 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e  {.      pIn3->u.
1cb20 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20  i = r.rowid;.   
1cb30 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
1cb40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1cb50 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1cb60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74   * *.**.** Use t
1cb70 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1cb80 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 69  gister P3 as a i
1cb90 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20  nteger key.  If 
1cba0 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74  a record .** wit
1cbb0 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20  h that key does 
1cbc0 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62  not exist in tab
1cbd0 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a  le of P1, then j
1cbe0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
1cbf0 66 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65  f the record doe
1cc00 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61  s exist, then fa
1cc10 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20 63 75  ll thru.  The cu
1cc20 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a  rsor is left .**
1cc30 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
1cc40 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 65 78   record if it ex
1cc50 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ists..**.** The 
1cc60 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
1cc70 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  en this operatio
1cc80 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69  n and NotFound i
1cc90 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f  s that this.** o
1cca0 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73  peration assumes
1ccb0 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69   the key is an i
1ccc0 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20  nteger and that 
1ccd0 50 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68  P1 is a table wh
1cce0 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e  ereas.** NotFoun
1ccf0 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73  d assumes key is
1cd00 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1cd10 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63  ted from MakeRec
1cd20 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73  ord and.** P1 is
1cd30 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   an index..**.**
1cd40 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1cd50 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e  , NotFound, IsUn
1cd60 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ique.*/.case OP_
1cd70 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20  NotExists: {    
1cd80 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1cd90 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1cda0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1cdb0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
1cdc0 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a  es;.  u64 iKey;.
1cdd0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
1cde0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1cdf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ce00 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ce10 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1ce20 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1ce30 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1ce40 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1ce50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1ce60 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
1ce70 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1ce80 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72  eReg==0 );.  pCr
1ce90 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1cea0 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ;.  if( pCrsr!=0
1ceb0 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b   ){.    res = 0;
1cec0 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  .    iKey = pIn3
1ced0 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20  ->u.i;.    rc = 
1cee0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1cef0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1cf00 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
1cf10 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73  es);.    pC->las
1cf20 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1cf30 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  .i;.    pC->rowi
1cf40 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1cf50 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
1cf60 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1cf70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1cf80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1cf90 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1cfa0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1cfb0 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1cfc0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1cfd0 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   - 1;.      asse
1cfe0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1cff0 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  alid==0 );.    }
1d000 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  .    pC->seekRes
1d010 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c  ult = res;.  }el
1d020 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
1d030 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20  happens when an 
1d040 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  attempt to open 
1d050 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e  a read cursor on
1d060 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c   the .    ** sql
1d070 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1d080 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
1d090 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20  EMPTY..    */.  
1d0a0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1d0b0 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1d0c0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d0d0 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73  ==0 );.    pC->s
1d0e0 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
1d0f0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1d100 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1d110 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
1d120 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65  *.** Find the ne
1d130 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71  xt available seq
1d140 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72  uence number for
1d150 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57   cursor P1..** W
1d160 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63  rite the sequenc
1d170 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65  e number into re
1d180 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68  gister P2..** Th
1d190 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1d1a0 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  r on the cursor 
1d1b0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
1d1c0 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73  fter this.** ins
1d1d0 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63  truction.  .*/.c
1d1e0 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a  ase OP_Sequence:
1d1f0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1d200 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1d210 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1d220 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d230 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d240 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1d250 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
1d260 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1d270 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d280 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
1d290 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1d2a0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1d2b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1d2c0 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1d2d0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1d2e0 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1d2f0 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1d300 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1d310 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1d320 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1d330 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1d340 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1d350 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1d360 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1d370 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1d380 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1d390 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1d3a0 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1d3b0 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1d3c0 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1d3d0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1d3e0 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1d3f0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1d400 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1d410 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1d420 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1d430 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1d440 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1d450 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1d460 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1d470 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1d480 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1d490 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1d4a0 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1d4b0 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1d4c0 2a 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20  * a SQLITE_FULL 
1d4d0 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1d4e0 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1d4f0 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1d500 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1d510 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1d520 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1d530 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1d540 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1d550 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1d560 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1d570 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1d580 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1d590 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1d5a0 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5c0 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1d5d0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1d5e0 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1d5f0 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1d600 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1d610 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1d620 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1d630 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1d640 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1d650 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1d660 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d670 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1d680 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1d690 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1d6a0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1d6b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1d6c0 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1d6d0 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1d6e0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1d6f0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1d700 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1d710 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1d720 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1d730 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1d740 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d750 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d760 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d770 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1d780 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d790 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1d7a0 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1d7b0 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1d7c0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1d7d0 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1d7e0 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1d7f0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1d800 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1d810 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1d820 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1d830 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1d840 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1d850 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1d860 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1d870 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1d880 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1d890 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1d8a0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1d8b0 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1d8c0 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1d8d0 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1d8e0 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1d8f0 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1d900 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1d910 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1d920 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1d930 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1d940 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1d950 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1d960 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1d970 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1d980 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1d990 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1d9a0 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1d9b0 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1d9c0 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1d9d0 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1d9e0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1d9f0 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1da00 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1da10 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1da20 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1da30 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1da40 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1da50 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1da60 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1da70 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1da80 62 6c 65 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d  ble );.    cnt =
1da90 20 30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   0;..#ifdef SQLI
1daa0 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
1dab0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1dac0 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
1dad0 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
1dae0 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
1daf0 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
1db00 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
1db10 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
1db20 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
1db30 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1db40 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1db50 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
1db60 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
1db70 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
1db80 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
1db90 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
1dba0 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
1dbb0 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
1dbc0 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1dbd0 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
1dbe0 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
1dbf0 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
1dc00 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
1dc10 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
1dc20 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1dc30 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
1dc40 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eGetCachedRowid(
1dc50 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1dc60 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a      if( v==0 ){.
1dc70 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1dc80 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1dc90 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1dca0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1dcb0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1dcc0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1dcd0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1dce0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1dcf0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1dd00 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a           v = 1;.
1dd10 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1dd20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1dd30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dd40 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70  sorIsValid(pC->p
1dd50 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
1dd60 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1dd70 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
1dd80 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
1dd90 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1dda0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1ddb0 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66  );   /* Cannot f
1ddc0 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74  ail following Bt
1ddd0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20  reeLast() */.   
1dde0 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41         if( v==MA
1ddf0 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
1de00 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
1de10 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
1de20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
1de30 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b              v++;
1de40 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1de50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1de60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1de70 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1de80 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  T.      if( pOp-
1de90 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  >p3 ){.        /
1dea0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1deb0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1dec0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1ded0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1dee0 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
1def0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
1df00 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
1df10 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
1df20 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
1df30 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
1df40 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
1df50 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1df60 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1df70 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1df80 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1df90 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
1dfa0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
1dfb0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1dfc0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
1dfd0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
1dfe0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1dff0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1e000 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1e010 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1e020 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1e030 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
1e040 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65  );.          pMe
1e050 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
1e060 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
1e070 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ..        REGIST
1e080 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1e090 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
1e0a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1e0b0 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
1e0c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e0d0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
1e0e0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
1e0f0 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
1e100 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
1e110 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
1e120 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
1e130 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
1e140 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
1e150 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1e160 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20 67  ULL;.          g
1e170 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e180 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1e190 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c  }.        if( v<
1e1a0 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
1e1b0 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65           v = pMe
1e1c0 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
1e1d0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d      }.        pM
1e1e0 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
1e1f0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
1e200 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
1e210 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1e220 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58  ->pCursor, v<MAX
1e230 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30  _ROWID ? v+1 : 0
1e240 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
1e250 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
1e260 77 69 64 20 29 7b 0a 20 20 20 20 20 20 61 73 73  wid ){.      ass
1e270 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
1e280 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
1e290 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
1e2a0 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
1e2b0 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
1e2e0 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
1e2f0 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73       v = db->las
1e300 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 63 6e  tRowid;.      cn
1e310 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
1e320 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74  .        if( cnt
1e330 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66 66 66  ==0 && (v&0xffff
1e340 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20  ff)==v ){.      
1e350 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20      v++;.       
1e360 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1e370 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
1e380 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
1e390 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  &v);.          i
1e3a0 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26 3d 20  f( cnt<5 ) v &= 
1e3b0 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20  0xffffff;.      
1e3c0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 63 20 3d    }.        rc =
1e3d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e3e0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1e3f0 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1e400 29 76 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  )v, 0, &res);.  
1e410 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
1e420 20 20 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31     }while( cnt<1
1e430 30 30 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45  00 && rc==SQLITE
1e440 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 3b  _OK && res==0 );
1e450 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1e460 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
1e470 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1e480 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a   = SQLITE_FULL;.
1e490 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1e4a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e4b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1e4c0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1e4d0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  lid = 0;.    pC-
1e4e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e4f0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1e500 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e510 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65  _STALE;.  }.  Me
1e520 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1e530 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70  t, MEM_Int);.  p
1e540 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
1e550 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1e560 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
1e570 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
1e580 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
1e590 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
1e5a0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
1e5b0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
1e5c0 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
1e5d0 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
1e5e0 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
1e5f0 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
1e600 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
1e610 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
1e620 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
1e630 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
1e640 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
1e650 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
1e660 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
1e670 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
1e680 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
1e690 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
1e6a0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
1e6b0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
1e6c0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
1e6d0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
1e6e0 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
1e6f0 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
1e700 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
1e710 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
1e720 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1e730 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
1e740 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
1e750 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
1e760 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
1e770 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
1e780 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
1e790 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
1e7a0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
1e7b0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
1e7c0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
1e7d0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1e7e0 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
1e7f0 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
1e800 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
1e810 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
1e820 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
1e830 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
1e840 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
1e850 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
1e860 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
1e870 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
1e880 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
1e890 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
1e8a0 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
1e8b0 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
1e8c0 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
1e8d0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
1e8e0 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
1e8f0 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
1e900 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
1e910 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
1e920 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
1e930 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
1e940 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
1e950 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
1e960 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
1e970 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
1e980 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
1e990 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
1e9a0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
1e9b0 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
1e9c0 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
1e9d0 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
1e9e0 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
1e9f0 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
1ea00 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
1ea10 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
1ea20 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
1ea30 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
1ea40 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
1ea50 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
1ea60 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
1ea70 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
1ea80 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
1ea90 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
1eaa0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1eab0 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
1eac0 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
1ead0 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1eae0 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
1eaf0 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
1eb00 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
1eb10 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
1eb20 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
1eb30 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
1eb40 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
1eb50 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
1eb60 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
1eb70 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
1eb80 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
1eb90 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
1eba0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
1ebb0 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
1ebc0 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
1ebd0 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
1ebe0 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
1ebf0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1ec00 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
1ec10 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
1ec20 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
1ec30 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
1ec40 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
1ec50 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
1ec60 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
1ec70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1ec80 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
1ec90 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
1eca0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
1ecb0 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
1ecc0 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
1ecd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1ece0 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  ert: {.  Mem *pD
1ecf0 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
1ed00 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
1ed10 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
1ed20 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
1ed30 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
1ed40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
1ed50 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
1ed60 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
1ed70 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20   */.  i64 iKey; 
1ed80 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
1ed90 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20  nteger ROWID or 
1eda0 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f  key for the reco
1edb0 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
1edc0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1edd0 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
1ede0 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
1edf0 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
1ee00 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1ee10 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
1ee20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
1ee30 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e  o-bytes to appen
1ee40 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  d */.  int seekR
1ee50 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
1ee60 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
1ee70 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
1ee80 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
1ee90 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1eea0 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
1eeb0 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
1eec0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
1eed0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1eee0 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65   *zTbl; /* Table
1eef0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
1ef00 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20  the opdate hook 
1ef10 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
1ef20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
1ef30 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
1ef40 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
1ef50 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
1ef60 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
1ef70 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
1ef80 3b 0a 20 20 70 4b 65 79 20 3d 20 26 70 2d 3e 61  ;.  pKey = &p->a
1ef90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1efa0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1efb0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1efc0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1efd0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1efe0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1eff0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1f000 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1f010 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1f020 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1f030 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1f040 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
1f050 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
1f060 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f070 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
1f080 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
1f090 61 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ata);.  REGISTER
1f0a0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
1f0b0 70 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d  pKey);..  iKey =
1f0c0 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66   pKey->u.i;.  if
1f0d0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1f0e0 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
1f0f0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
1f100 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1f110 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
1f120 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b  ->lastRowid = pK
1f130 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70  ey->u.i;.  if( p
1f140 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
1f150 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44  M_Null ){.    pD
1f160 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  ata->z = 0;.    
1f170 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20  pData->n = 0;.  
1f180 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
1f190 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
1f1a0 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
1f1b0 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65  Str) );.  }.  se
1f1c0 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70  ekResult = ((pOp
1f1d0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
1f1e0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
1f1f0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
1f200 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  0);.  if( pData-
1f210 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1f220 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  o ){.    nZero =
1f230 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
1f240 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a  .  }else{.    nZ
1f250 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73  ero = 0;.  }.  s
1f260 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
1f270 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1f280 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20  ursor, 0);.  rc 
1f290 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
1f2a0 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  sert(pC->pCursor
1f2b0 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70       pData->z, p
1f2e0 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a  Data->n, nZero,.
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70            pOp->p
1f310 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
1f320 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  D, seekResult.  
1f330 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  );.  pC->rowidIs
1f340 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1f350 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1f360 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1f370 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1f380 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
1f390 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
1f3a0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
1f3b0 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
1f3c0 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
1f3d0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
1f3e0 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
1f3f0 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
1f400 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1f410 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e      zTbl = pOp->
1f420 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28  p4.z;.    op = (
1f430 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1f440 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
1f450 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
1f460 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
1f470 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1f480 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
1f490 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1f4a0 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
1f4b0 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
1f4c0 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
1f4d0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
1f4e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f4f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
1f500 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  te P1 P2 * P4 *.
1f510 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
1f520 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
1f530 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
1f540 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1f550 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ting..**.** The 
1f560 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
1f570 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1f580 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
1f590 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
1f5a0 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
1f5b0 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
1f5c0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1f5d0 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
1f5e0 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
1f5f0 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
1f600 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
1f610 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20  o-op.  Hence it 
1f620 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a  is OK to delete.
1f630 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  ** a record from
1f640 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20   within an Next 
1f650 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
1f660 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1f670 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
1f680 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1f690 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1f6a0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1f6b0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1f6c0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
1f6d0 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
1f6e0 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
1f6f0 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
1f700 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
1f710 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
1f720 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1f730 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
1f740 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1f750 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
1f760 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
1f770 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
1f780 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
1f790 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
1f7a0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1f7b0 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
1f7c0 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
1f7d0 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
1f7e0 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
1f7f0 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
1f800 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
1f810 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
1f820 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65  ete: {.  i64 iKe
1f830 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  y;.  VdbeCursor 
1f840 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 30  *pC;..  iKey = 0
1f850 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f860 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f870 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f880 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f890 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f8a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1f8b0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1f8c0 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  or!=0 );  /* Onl
1f8d0 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c  y valid for real
1f8e0 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75   tables, no pseu
1f8f0 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f  dotables */..  /
1f900 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d  * If the update-
1f910 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
1f920 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74  oked, set iKey t
1f930 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  o the rowid of t
1f940 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e  he.  ** row bein
1f950 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a  g deleted..  */.
1f960 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
1f970 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
1f980 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73  ->p4.z ){.    as
1f990 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f9a0 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  e );.    assert(
1f9b0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1f9c0 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77  d );  /* lastRow
1f9d0 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69 6f  id set by previo
1f9e0 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a  us OP_NotFound *
1f9f0 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43 2d  /.    iKey = pC-
1fa00 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a  >lastRowid;.  }.
1fa10 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c  .  /* The OP_Del
1fa20 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79  ete opcode alway
1fa30 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f  s follows an OP_
1fa40 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f  NotExists or OP_
1fa50 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  Last or.  ** OP_
1fa60 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61  Column on the sa
1fa70 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74  me table without
1fa80 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67   any intervening
1fa90 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74   operations that
1faa0 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65  .  ** might move
1fab0 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74   or invalidate t
1fac0 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63  he cursor.  Henc
1fad0 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20 61  e cursor pC is a
1fae0 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20  lways pointing. 
1faf0 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74   ** to the row t
1fb00 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64  o be deleted and
1fb10 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62 65   the sqlite3Vdbe
1fb20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f  CursorMoveto() o
1fb30 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65  peration.  ** be
1fb40 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61 20  low is always a 
1fb50 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74  no-op and cannot
1fb60 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20   fail.  We will 
1fb70 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74  run it anyhow, t
1fb80 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67  hough,.  ** to g
1fb90 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75 74  uard against fut
1fba0 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ure changes to t
1fbb0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1fbc0 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72  r..  **/.  asser
1fbd0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
1fbe0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
1fbf0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
1fc00 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
1fc10 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
1fc20 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
1fc30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1fc40 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33  rror;..  sqlite3
1fc50 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
1fc60 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
1fc70 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
1fc80 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
1fc90 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  C->pCursor);.  p
1fca0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1fcb0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
1fcc0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
1fcd0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
1fce0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
1fcf0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
1fd00 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  & db->xUpdateCal
1fd10 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1fd20 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  .z ){.    const 
1fd30 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e  char *zDb = db->
1fd40 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
1fd50 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  me;.    const ch
1fd60 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e  ar *zTbl = pOp->
1fd70 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55  p4.z;.    db->xU
1fd80 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
1fd90 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51  ->pUpdateArg, SQ
1fda0 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62  LITE_DELETE, zDb
1fdb0 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20  , zTbl, iKey);. 
1fdc0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1fdd0 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69  Db>=0 );.  }.  i
1fde0 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
1fdf0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
1fe00 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72  >nChange++;.  br
1fe10 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
1fe20 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
1fe30 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
1fe40 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
1fe50 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
1fe60 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
1fe70 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
1fe80 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1fe90 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
1fea0 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
1feb0 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
1fec0 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
1fed0 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
1fee0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
1fef0 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
1ff00 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
1ff10 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
1ff20 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
1ff30 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
1ff40 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
1ff50 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
1ff60 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
1ff70 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
1ff80 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
1ff90 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
1ffa0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
1ffb0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
1ffc0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
1ffd0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
1ffe0 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
1fff0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
20000 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
20010 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
20020 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
20030 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
20040 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
20050 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
20060 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
20070 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
20080 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
20090 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
200a0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
200b0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
200c0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
200d0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
200e0 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
200f0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
20100 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
20110 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
20120 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
20130 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
20140 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
20150 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
20160 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
20170 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
20180 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
20190 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
201a0 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
201b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
201c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
201d0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
201e0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
201f0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
20200 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
20210 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
20220 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
20230 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
20240 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
20250 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
20260 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
20270 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
20280 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
20290 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ..  pOut = &p->a
202a0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20  Mem[pOp->p2];.. 
202b0 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
202c0 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
202d0 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
202e0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
202f0 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
20300 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20310 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20320 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
20330 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20340 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
20350 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
20360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
20370 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Key );.  assert(
20380 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
20390 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
203a0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
203b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
203c0 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
203d0 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
203e0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
203f0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
20400 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
20410 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
20420 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
20430 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
20440 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
20450 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20  lid(pCrsr) );.. 
20460 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
20470 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
20480 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
20490 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
204a0 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
204b0 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
204c0 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
204d0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
204e0 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
204f0 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
20500 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65  rsor.  Hence the
20510 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
20520 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
20530 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77  to() call is alw
20540 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70  ays.  ** a no-op
20550 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66   and can never f
20560 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61  ail.  But we lea
20570 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61  ve it in place a
20580 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f  s a safety..  */
20590 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
205a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
205b0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
205c0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
205d0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
205e0 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
205f0 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
20600 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
20610 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
20620 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
20630 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
20640 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20650 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
20660 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
20670 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
20680 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
20690 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
206a0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
206b0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
206c0 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
206d0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
206e0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
206f0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
20700 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
20710 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
20720 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20730 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
20740 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
20750 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
20760 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
20770 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
20780 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
20790 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
207a0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
207b0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
207c0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
207d0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
207e0 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
207f0 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
20800 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
20810 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
20820 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
20830 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
20840 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
20850 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
20860 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
20870 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
20880 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
20890 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
208a0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
208b0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
208c0 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
208d0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
208e0 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
208f0 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
20900 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
20910 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
20920 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
20930 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20940 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
20950 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
20960 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
20970 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
20980 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
20990 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
209a0 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
209b0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
209c0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
209d0 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
209e0 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
209f0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
20a00 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
20a10 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
20a20 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
20a30 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
20a40 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
20a50 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
20a60 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
20a70 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
20a80 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
20a90 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
20aa0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
20ab0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
20ac0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
20ad0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
20ae0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
20af0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
20b00 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
20b10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20b20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20b30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20b40 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20b50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20b60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
20b70 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
20b80 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
20b90 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
20ba0 20 29 7b 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f   ){.    /* Do no
20bb0 74 68 69 6e 67 20 73 6f 20 74 68 61 74 20 72 65  thing so that re
20bc0 67 5b 50 32 5d 20 72 65 6d 61 69 6e 73 20 4e 55  g[P2] remains NU
20bd0 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b  LL */.    break;
20be0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
20bf0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
20c00 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
20c10 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
20c20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20c30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
20c40 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56  }else if( pC->pV
20c50 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  tabCursor ){.   
20c60 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74   pVtab = pC->pVt
20c70 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
20c80 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
20c90 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
20ca0 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
20cb0 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
20cc0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
20cd0 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
20ce0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
20cf0 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20  isuse;.    rc = 
20d00 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
20d10 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  pC->pVtabCursor,
20d20 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   &v);.    sqlite
20d30 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
20d40 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
20d50 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
20d60 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
20d70 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
20d80 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
20d90 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
20da0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20db0 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64 69 66  o_misuse;.#endif
20dc0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
20dd0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
20de0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
20df0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
20e00 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
20e10 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
20e20 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
20e30 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
20e40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20e50 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
20e60 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
20e70 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
20e80 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
20e90 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
20ea0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
20eb0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
20ec0 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
20ed0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
20ee0 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
20ef0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
20f00 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
20f10 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
20f20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
20f30 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
20f40 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
20f50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20f60 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
20f70 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
20f80 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
20f90 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
20fa0 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
20fb0 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
20fc0 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
20fd0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
20fe0 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
20ff0 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
21000 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
21010 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
21020 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21030 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
21040 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21050 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21060 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21070 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21080 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21090 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
210a0 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
210b0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20  alid = 0;.  if( 
210c0 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
210d0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
210e0 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
210f0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
21100 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21110 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
21120 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
21130 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
21140 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
21150 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
21160 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
21170 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
21180 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
21190 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
211a0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
211b0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
211c0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
211d0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
211e0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
211f0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
21200 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
21210 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
21220 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
21230 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
21240 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
21250 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
21260 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
21270 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
21280 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
21290 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
212a0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
212b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
212c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
212d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
212e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
212f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21300 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
21310 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
21320 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b   if( pCrsr==0 ){
21330 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20  .    res = 1;.  
21340 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
21350 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
21360 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
21370 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
21380 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
21390 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
213a0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69   = 0;.  pC->rowi
213b0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
213c0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
213d0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
213e0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26   if( pOp->p2>0 &
213f0 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  & res ){.    pc 
21400 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
21410 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
21420 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20  /* Opcode: Sort 
21430 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
21440 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
21450 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  es exactly the s
21460 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f  ame thing as OP_
21470 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68  Rewind except th
21480 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65  at.** it increme
21490 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e  nts an undocumen
214a0 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ted global varia
214b0 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73  ble used for tes
214c0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74  ting..**.** Sort
214d0 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73  ing is accomplis
214e0 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72  hed by writing r
214f0 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f  ecords into a so
21500 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20  rting index,.** 
21510 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74  then rewinding t
21520 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c  hat index and pl
21530 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72  aying it back fr
21540 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a  om beginning to.
21550 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20  ** end.  We use 
21560 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f  the OP_Sort opco
21570 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50  de instead of OP
21580 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68  _Rewind to do th
21590 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73  e.** rewinding s
215a0 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61  o that the globa
215b0 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20  l variable will 
215c0 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  be incremented a
215d0 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e  nd.** regression
215e0 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72   tests can deter
215f0 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
21600 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  not the optimize
21610 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c  r is.** correctl
21620 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  y optimizing out
21630 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20   sorts..*/.case 
21640 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
21650 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
21660 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
21670 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
21680 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
21690 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
216a0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
216b0 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
216c0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d  MTSTATUS_SORT-1]
216d0 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ++;.  /* Fall th
216e0 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65  rough into OP_Re
216f0 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63  wind */.}./* Opc
21700 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50  ode: Rewind P1 P
21710 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
21720 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
21730 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
21740 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
21750 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
21760 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
21770 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69  he first entry i
21780 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
21790 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
217a0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
217b0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
217c0 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
217d0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
217e0 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
217f0 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
21800 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
21810 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
21820 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
21830 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
21840 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
21850 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
21860 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
21870 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
21880 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
21890 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
218a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
218b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
218c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
218d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
218e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
218f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21900 69 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d  if( (pCrsr = pC-
21910 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
21920 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21930 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
21940 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
21950 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d  >atFirst = res==
21960 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
21970 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21980 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
21990 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
219a0 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72  STALE;.    pC->r
219b0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
219c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
219d0 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d  s = 1;.  }.  pC-
219e0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
219f0 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
21a00 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
21a10 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69  p2<p->nOp );.  i
21a20 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
21a30 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
21a40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
21a60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
21a70 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
21a80 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
21a90 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
21aa0 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
21ab0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
21ac0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
21ad0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
21ae0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
21af0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
21b00 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
21b10 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
21b20 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
21b30 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
21b40 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
21b50 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21b60 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
21b70 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
21b80 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
21b90 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
21ba0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
21bb0 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
21bc0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
21bd0 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ev P1 P2 * * *.*
21be0 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
21bf0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
21c00 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
21c10 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
21c20 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
21c30 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
21c40 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
21c50 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
21c60 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
21c70 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
21c80 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
21c90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
21ca0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
21cb0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
21cc0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
21cd0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21ce0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
21cf0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
21d00 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
21d10 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
21d20 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  le..*/.case OP_P
21d30 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
21d40 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
21d50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  _Next: {        
21d60 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
21d70 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21d80 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21d90 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48    int res;..  CH
21da0 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
21db0 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  T;.  assert( pOp
21dc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21dd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21de0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21df0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
21e00 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72   pC==0 ){.    br
21e10 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63  eak;  /* See tic
21e20 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d  ket #2273 */.  }
21e30 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
21e40 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
21e50 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43  rsr==0 ){.    pC
21e60 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
21e70 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
21e80 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65 72  res = 1;.  asser
21e90 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
21ea0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
21eb0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d   = pOp->opcode==
21ec0 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74 65  OP_Next ? sqlite
21ed0 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73 72  3BtreeNext(pCrsr
21ee0 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20 20  , &res) :.      
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
21f10 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 72  treePrevious(pCr
21f20 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
21f30 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
21f40 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  es;.  pC->cacheS
21f50 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21f60 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ALE;.  if( res==
21f70 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
21f80 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 69  p->p2 - 1;.    i
21f90 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e  f( pOp->p5 ) p->
21fa0 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35  aCounter[pOp->p5
21fb0 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  -1]++;.#ifdef SQ
21fc0 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
21fd0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
21fe0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  nt++;.#endif.  }
21ff0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
22000 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  lid = 0;.  break
22010 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22020 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20  IdxInsert P1 P2 
22030 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65  P3 * P5.**.** Re
22040 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
22050 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  a SQL index key 
22060 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
22070 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
22080 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
22090 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
220a0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
220b0 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
220c0 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
220d0 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
220e0 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61  P3 is a flag tha
220f0 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e  t provides a hin
22100 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
22110 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a  layer that this.
22120 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  ** insert is lik
22130 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
22140 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  end..**.** This 
22150 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
22160 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
22170 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
22180 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
22190 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
221a0 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63   OP_Insert..*/.c
221b0 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
221c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
221d0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
221e0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
221f0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
22200 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nKey;.  const ch
22210 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73  ar *zKey;..  ass
22220 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22230 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22240 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22250 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22260 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
22270 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22280 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
22290 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73  M_Blob );.  pCrs
222a0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
222b0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
222c0 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  rsr!=0) ){.    a
222d0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
222e0 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  le==0 );.    rc 
222f0 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
22300 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
22310 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
22320 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
22330 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  n;.      zKey = 
22340 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72  pIn2->z;.      r
22350 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22360 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b  Insert(pCrsr, zK
22370 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
22380 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
22390 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
223a0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
223b0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
223c0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
223d0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61        );.      a
223e0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
223f0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22400 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53        pC->cacheS
22410 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22420 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ALE;.    }.  }. 
22430 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22440 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
22450 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
22460 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
22470 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
22480 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
22490 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
224a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
224b0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
224c0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
224d0 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
224e0 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
224f0 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
22500 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
22510 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
22520 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
22530 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
22540 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
22550 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
22560 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
22570 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22580 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
22590 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
225a0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
225b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
225c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
225d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
225e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
225f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22600 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
22610 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c  Cursor;.  if( AL
22620 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
22630 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
22640 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
22650 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
22660 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
22670 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
22680 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e     r.aMem = &p->
22690 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
226a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
226b0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
226c0 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
226d0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
226e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
226f0 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
22700 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22710 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
22720 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73  r);.    }.    as
22730 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
22740 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
22750 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
22760 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
22770 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22780 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
22790 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
227a0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
227b0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
227c0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
227d0 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
227e0 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
227f0 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
22800 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
22810 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
22820 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
22830 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
22840 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
22850 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
22860 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
22870 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
22880 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22890 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
228a0 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
228b0 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  IdxRowid: {     
228c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
228d0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
228e0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
228f0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
22900 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b  pC;.  i64 rowid;
22910 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22920 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22930 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22940 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22950 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22960 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
22970 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
22980 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
22990 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
229a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
229b0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
229c0 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45  C);.    if( NEVE
229d0 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f  R(rc) ) goto abo
229e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
229f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22a00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
22a10 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
22a20 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
22a30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d   );.    if( !pC-
22a40 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
22a50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
22a60 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
22a70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  Crsr, &rowid);. 
22a80 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
22a90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22aa0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22ab0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22ac0 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54   }.      MemSetT
22ad0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
22ae0 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 70 4f  M_Int);.      pO
22af0 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b  ut->u.i = rowid;
22b00 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
22b10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22b20 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
22b30 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65   P4 P5.**.** The
22b40 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
22b50 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
22b60 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
22b70 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
22b80 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
22b90 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
22ba0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
22bb0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
22bc0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
22bd0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
22be0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
22bf0 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
22c00 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
22c10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
22c20 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
22c30 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
22c40 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
22c50 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
22c60 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
22c70 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
22c80 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
22c90 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
22ca0 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
22cb0 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
22cc0 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
22cd0 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
22ce0 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65  .** prior to the
22cf0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
22d00 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f  is make the opco
22d10 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
22d20 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61  GT except.** tha
22d30 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f  t if the key fro
22d40 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  m register P3 is
22d50 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
22d60 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73   key in the curs
22d70 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  or,.** the resul
22d80 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65  t is false where
22d90 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74  as it would be t
22da0 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a  rue with IdxGT..
22db0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
22dc0 78 4c 54 20 50 31 20 50 32 20 50 33 20 2a 20 50  xLT P1 P2 P3 * P
22dd0 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
22de0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
22df0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
22e00 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
22e10 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
22e20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
22e30 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
22e40 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
22e50 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
22e60 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
22e70 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
22e80 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
22e90 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
22ea0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
22eb0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
22ec0 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
22ed0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
22ee0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
22ef0 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
22f00 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
22f10 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
22f20 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
22f30 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
22f40 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
22f50 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
22f60 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72  an epsilon prior
22f70 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70   .** to the comp
22f80 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
22f90 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77  kes the opcode w
22fa0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a  ork like IdxLE..
22fb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
22fc0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
22fd0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
22fe0 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20  OP_IdxGE: {     
22ff0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
23000 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
23010 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
23020 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
23030 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
23040 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23050 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23060 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23070 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23080 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23090 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d    if( ALWAYS(pC-
230a0 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a  >pCursor!=0) ){.
230b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
230c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
230d0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
230e0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
230f0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
23100 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
23110 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
23120 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
23130 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
23140 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
23150 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
23160 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
23170 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
23180 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
23190 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49  KEY | UNPACKED_I
231a0 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
231b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
231c0 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
231d0 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
231e0 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
231f0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
23200 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
23210 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
23220 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
23230 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
23240 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
23250 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
23260 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
23270 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
23280 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23290 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
232a0 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
232b0 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
232c0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
232d0 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
232e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
232f0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
23300 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
23310 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
23320 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
23330 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
23340 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
23350 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
23360 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
23370 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
23380 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
23390 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
233a0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
233b0 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
233c0 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
233d0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
233e0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
233f0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
23400 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
23410 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
23420 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
23430 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
23440 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
23450 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
23460 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
23470 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
23480 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
23490 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
234a0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
234b0 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
234c0 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
234d0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
234e0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
234f0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
23500 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
23510 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
23520 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
23530 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
23540 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
23550 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
23560 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
23570 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
23580 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
23590 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
235a0 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
235b0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
235c0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
235d0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
235e0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
235f0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
23600 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
23610 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
23620 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
23630 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
23640 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
23650 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
23660 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
23670 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
23680 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
23690 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
236a0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
236b0 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
236c0 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
236d0 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
236e0 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  iDb;.#ifndef SQL
236f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23700 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
23710 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
23720 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
23730 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
23740 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
23750 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
23760 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
23770 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
23780 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
23790 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
237a0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
237b0 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
237c0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
237d0 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
237e0 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20  Cnt>1 ){.    rc 
237f0 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
23800 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
23810 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
23820 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62    }else{.    iDb
23830 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
23840 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20  assert( iCnt==1 
23850 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
23860 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
23870 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  1<<iDb))!=0 );. 
23880 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
23890 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
238a0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
238b0 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
238c0 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
238d0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
238e0 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
238f0 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
23900 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23910 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
23920 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23930 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
23940 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
23950 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64  RootPageMoved(&d
23960 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f  b->aDb[iDb], iMo
23970 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
23980 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
23990 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
239a0 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
239b0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
239c0 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
239d0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
239e0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
239f0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
23a00 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
23a10 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
23a20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
23a30 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
23a40 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
23a50 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23a60 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
23a70 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
23a80 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
23a90 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
23aa0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
23ab0 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
23ac0 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
23ad0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
23ae0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
23af0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
23b00 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
23b10 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
23b20 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
23b30 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
23b40 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
23b50 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
23b60 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
23b70 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
23b80 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
23b90 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
23ba0 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
23bb0 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
23bc0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
23bd0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
23be0 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
23bf0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
23c00 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
23c10 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
23c20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
23c30 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
23c40 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
23c50 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
23c60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
23c70 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
23c80 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
23c90 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
23ca0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
23cb0 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
23cc0 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
23cd0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
23ce0 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
23cf0 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
23d00 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  0;.  assert( (p-
23d10 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
23d20 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b  <pOp->p2))!=0 );
23d30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23d40 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
23d50 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
23d60 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
23d70 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
23d80 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
23d90 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
23da0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
23db0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
23dc0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
23dd0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 61 4d 65   ){.      p->aMe
23de0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
23df0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
23e00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
23e10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
23e20 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
23e30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
23e40 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
23e50 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
23e60 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
23e70 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
23e80 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
23e90 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
23ea0 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
23eb0 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
23ec0 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
23ed0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
23ee0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
23ef0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
23f00 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
23f10 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
23f20 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
23f30 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
23f40 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
23f50 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
23f60 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
23f70 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
23f80 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
23f90 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
23fa0 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
23fb0 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
23fc0 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
23fd0 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
23fe0 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
23ff0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
24000 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
24010 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
24020 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
24030 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
24040 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
24050 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24060 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
24070 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
24080 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
24090 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
240a0 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
240b0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
240c0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
240d0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
240e0 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
240f0 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
24100 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
24110 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
24120 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
24130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
24140 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
24150 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
24160 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
24170 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
24180 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
24190 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
241a0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
241b0 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
241c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
241d0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
241e0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
241f0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
24200 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
24210 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
24220 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24230 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
24240 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
24250 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
24260 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
24270 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
24280 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
24290 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46 44  gs = BTREE_LEAFD
242a0 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59  ATA|BTREE_INTKEY
242b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
242c0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45 52  lags = BTREE_ZER
242d0 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20  ODATA;.  }.  rc 
242e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
242f0 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
24300 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
24310 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
24320 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74 54   pgno;.  MemSetT
24330 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
24340 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
24350 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
24360 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32  arseSchema P1 P2
24370 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
24380 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
24390 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
243a0 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
243b0 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
243c0 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
243d0 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
243e0 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74  use P4.  P2 is t
243f0 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e  he "force" flag.
24400 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20     Always do.** 
24410 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50  the parsing if P
24420 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50  2 is true.  If P
24430 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e  2 is false, then
24440 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
24450 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74   a.** no-op if t
24460 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74  he schema is not
24470 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65   currently loade
24480 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
24490 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20  ds, if P2.** is 
244a0 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54  false, the SQLIT
244b0 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69  E_MASTER table i
244c0 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66  s only parsed if
244d0 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
244e0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c  .** schema is al
244f0 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74  ready loaded int
24500 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62  o the symbol tab
24510 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
24520 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
24530 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
24540 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
24550 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
24560 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
24570 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
24580 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
24590 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
245a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
245b0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
245c0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
245d0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
245e0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
245f0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
24600 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
24610 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
24620 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
24630 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f  b );..  /* If pO
24640 70 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65 6e  p->p2 is 0, then
24650 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
24660 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 74  being executed t
24670 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73 69  o read a.  ** si
24680 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65 78  ngle row, for ex
24690 61 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63 6f  ample the row co
246a0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61  rresponding to a
246b0 20 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20   new index.  ** 
246c0 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
246d0 56 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20 73  VDBE, from the s
246e0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
246f0 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a  le. It only.  **
24700 20 64 6f 65 73 20 74 68 69 73 20 69 66 20 74 68   does this if th
24710 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
24720 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61  in-memory schema
24730 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20 20   is currently.  
24740 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72  ** loaded. Other
24750 77 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69 6e  wise, the new in
24760 64 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  dex definition c
24770 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f  an be loaded alo
24780 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68 65  ng.  ** with the
24790 20 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 68   rest of the sch
247a0 65 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20 72  ema when it is r
247b0 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20  equired..  **.  
247c0 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65 20  ** Although the 
247d0 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74 53  mutex on the BtS
247e0 68 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68 61  hared object tha
247f0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
24800 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69  .  ** database i
24810 44 62 20 28 74 68 65 20 64 61 74 61 62 61 73 65  Db (the database
24820 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
24830 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
24840 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62 79  ble.  ** read by
24850 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
24860 6e 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  n) is currently 
24870 68 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63 65  held, it is nece
24880 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62  ssary to.  ** ob
24890 74 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65 73  tain the mutexes
248a0 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   on all attached
248b0 20 64 61 74 61 62 61 73 65 73 20 62 65 66 6f 72   databases befor
248c0 65 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20 20  e checking if.  
248d0 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  ** the schema of
248e0 20 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e 20   iDb is loaded. 
248f0 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 2c  This is because,
24900 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
24910 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  .  ** the sqlite
24920 33 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62 65  3_exec() call be
24930 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  low, SQLite will
24940 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71   invoke .  ** sq
24950 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
24960 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74  ll(). If all mut
24970 65 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 72  exes are not alr
24980 65 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a 20  eady held, the. 
24990 20 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d 61   ** iDb mutex ma
249a0 79 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c 79  y be temporarily
249b0 20 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76 6f   released to avo
249c0 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20  id deadlock. If 
249d0 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70 65  .  ** this happe
249e0 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74  ns, then some ot
249f0 68 65 72 20 74 68 72 65 61 64 20 6d 61 79 20 64  her thread may d
24a00 65 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d  elete the in-mem
24a10 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61  ory .  ** schema
24a20 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
24a30 20 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c 20   before the SQL 
24a40 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20  statement runs. 
24a50 54 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20  The schema.  ** 
24a60 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f  will not be relo
24a70 61 64 65 64 20 62 65 63 75 61 73 65 20 74 68 65  aded becuase the
24a80 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66   db->init.busy f
24a90 6c 61 67 20 69 73 20 73 65 74 2e 20 54 68 69 73  lag is set. This
24aa0 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74  .  ** can result
24ab0 20 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20 74   in a "no such t
24ac0 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73  able: sqlite_mas
24ad0 74 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d  ter" or "malform
24ae0 65 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  ed.  ** database
24af0 20 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20 62   schema" error b
24b00 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74 6f  eing returned to
24b10 20 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a   the user..  */.
24b20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
24b30 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
24b40 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
24b50 74 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  t) );.  sqlite3B
24b60 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29  treeEnterAll(db)
24b70 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
24b80 7c 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  || DbHasProperty
24b90 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
24ba0 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20  emaLoaded) ){.  
24bb0 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
24bc0 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
24bd0 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
24be0 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
24bf0 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
24c00 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
24c10 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
24c20 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
24c30 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
24c40 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
24c50 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
24c60 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
24c70 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a 20  .%s WHERE %s",. 
24c80 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
24c90 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
24ca0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
24cb0 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
24cc0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
24cd0 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
24ce0 65 6c 73 65 7b 0a 20 20 20 20 20 20 28 76 6f 69  else{.      (voi
24cf0 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  d)sqlite3SafetyO
24d00 66 66 28 64 62 29 3b 0a 20 20 20 20 20 20 61 73  ff(db);.      as
24d10 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
24d20 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
24d30 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
24d40 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
24d50 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
24d60 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
24d70 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
24d80 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
24d90 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
24da0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
24db0 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
24dc0 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
24dd0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
24de0 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
24df0 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
24e00 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
24e10 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
24e20 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
24e30 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74       (void)sqlit
24e40 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a  e3SafetyOn(db);.
24e50 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
24e60 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c 6c  te3BtreeLeaveAll
24e70 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
24e80 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
24e90 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
24ea0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
24eb0 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
24ec0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
24ed0 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
24ee0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
24ef0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
24f00 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
24f10 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
24f20 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
24f30 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
24f40 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
24f50 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
24f60 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
24f70 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
24f80 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
24f90 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
24fa0 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
24fb0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
24fc0 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
24fd0 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
24fe0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
24ff0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25000 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
25010 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
25020 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
25030 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
25040 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
25050 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25060 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
25070 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
25080 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
25090 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
250a0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
250b0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
250c0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
250d0 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
250e0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
250f0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
25100 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
25110 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
25120 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
25130 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
25140 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
25150 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
25160 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
25170 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
25180 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
25190 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
251a0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
251b0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
251c0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
251d0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
251e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
251f0 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
25200 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
25210 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
25220 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
25230 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
25240 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
25250 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
25260 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
25270 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
25280 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
25290 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
252a0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
252b0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
252c0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
252d0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
252e0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
252f0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
25300 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
25310 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
25320 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
25330 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
25340 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
25350 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
25360 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
25370 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
25380 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
25390 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
253a0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
253b0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
253c0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
253d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
253e0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
253f0 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
25400 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
25410 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
25420 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
25430 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
25440 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
25450 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
25460 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
25470 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
25480 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
25490 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
254a0 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
254b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
254c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
254d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
254e0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
254f0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
25500 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
25510 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
25520 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
25530 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
25540 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
25550 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
25560 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
25570 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
25580 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
25590 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
255a0 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
255b0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
255c0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
255d0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
255e0 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
255f0 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
25600 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
25610 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
25620 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
25630 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
25640 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
25650 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
25660 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
25670 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
25680 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
25690 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
256a0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
256b0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
256c0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
256d0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
256e0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
256f0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
25700 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
25710 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
25720 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
25730 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
25740 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
25750 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
25760 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
25770 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
25780 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
25790 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
257a0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
257b0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
257c0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
257d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
257e0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
257f0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
25800 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
25810 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
25820 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
25830 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
25840 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
25850 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
25860 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
25870 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
25880 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
25890 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
258a0 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
258b0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
258c0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
258d0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
258e0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
258f0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
25900 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
25910 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
25920 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
25930 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
25940 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
25950 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
25960 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
25970 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
25980 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20  emaining */.  . 
25990 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
259a0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
259b0 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
259c0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
259d0 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
259e0 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
259f0 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
25a00 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
25a10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
25a20 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
25a30 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72  ->nMem );.  pnEr
25a40 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  r = &p->aMem[pOp
25a50 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
25a60 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
25a70 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
25a80 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
25a90 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
25aa0 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
25ab0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d   );.  pIn1 = &p-
25ac0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
25ad0 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f    for(j=0; j<nRo
25ae0 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52  ot; j++){.    aR
25af0 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71  oot[j] = (int)sq
25b00 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
25b10 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d  e(&pIn1[j]);.  }
25b20 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b  .  aRoot[j] = 0;
25b30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25b40 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
25b50 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
25b60 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
25b70 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20  >p5))!=0 );.  z 
25b80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
25b90 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
25ba0 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
25bb0 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c  t, aRoot, nRoot,
25bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
25bf0 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  i, &nErr);.  sql
25c00 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
25c10 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  Root);.  pnErr->
25c20 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
25c30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
25c40 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
25c50 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
25c60 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
25c70 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
25c80 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
25c90 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
25ca0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
25cb0 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
25cc0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
25cd0 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
25ce0 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
25cf0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
25d00 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
25d10 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
25d20 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
25d30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
25d40 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
25d50 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
25d60 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
25d70 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
25d80 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72   * *.**.** Inser
25d90 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
25da0 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69  lue held by regi
25db0 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62  ster P2 into a b
25dc0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  oolean index.** 
25dd0 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
25de0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73   P1..**.** An as
25df0 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66  sertion fails if
25e00 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P2 is not an in
25e10 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
25e20 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20  P_RowSetAdd: {  
25e30 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
25e40 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 4d 65   Mem *pIdx;.  Me
25e50 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73 73 65 72  m *pVal;.  asser
25e60 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
25e70 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
25e80 20 29 3b 0a 20 20 70 49 64 78 20 3d 20 26 70 2d   );.  pIdx = &p-
25e90 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
25ea0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25eb0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d  2>0 && pOp->p2<=
25ec0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 56 61  p->nMem );.  pVa
25ed0 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  l = &p->aMem[pOp
25ee0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
25ef0 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20   (pVal->flags & 
25f00 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
25f10 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67   if( (pIdx->flag
25f20 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
25f30 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
25f40 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
25f50 74 28 70 49 64 78 29 3b 0a 20 20 20 20 69 66 28  t(pIdx);.    if(
25f60 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20   (pIdx->flags & 
25f70 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
25f80 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
25f90 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
25fa0 74 49 6e 73 65 72 74 28 70 49 64 78 2d 3e 75 2e  tInsert(pIdx->u.
25fb0 70 52 6f 77 53 65 74 2c 20 70 56 61 6c 2d 3e 75  pRowSet, pVal->u
25fc0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
25fd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
25fe0 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
25ff0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  * *.**.** Extrac
26000 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
26010 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
26020 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
26030 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
26040 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
26050 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
26060 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
26070 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
26080 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
26090 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
260a0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
260b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
260c0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
260d0 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74 33 20 2a   /* jump, out3 *
260e0 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20  /.  Mem *pIdx;. 
260f0 20 69 36 34 20 76 61 6c 3b 0a 20 20 61 73 73 65   i64 val;.  asse
26100 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
26110 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65   pOp->p1<=p->nMe
26120 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52  m );.  CHECK_FOR
26130 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49  _INTERRUPT;.  pI
26140 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  dx = &p->aMem[pO
26150 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
26160 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
26170 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 64 78 2d  3];.  if( (pIdx-
26180 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26190 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
261a0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
261b0 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIdx->u.pRowSet
261c0 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
261d0 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
261e0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
261f0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
26200 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
26210 49 64 78 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  Idx);.    pc = p
26220 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
26230 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
26240 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
26250 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
26260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
26270 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
26280 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
26290 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
262a0 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 76  SetInt64(pOut, v
262b0 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  al);.  }.  break
262c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
262d0 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
262e0 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67   P3 P4.**.** Reg
262f0 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
26300 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
26310 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
26320 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
26330 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
26340 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
26350 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
26360 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
26370 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
26380 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
26390 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
263a0 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
263b0 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
263c0 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
263d0 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
263e0 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
263f0 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
26400 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
26410 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
26420 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
26430 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
26440 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
26450 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
26460 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
26470 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
26480 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
26490 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
264a0 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
264b0 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
264c0 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
264d0 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
264e0 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
264f0 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
26500 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
26510 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
26520 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
26530 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
26540 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
26550 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
26560 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
26570 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
26580 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
26590 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
265a0 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
265b0 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
265c0 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
265d0 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
265e0 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
265f0 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
26600 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
26610 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
26620 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
26630 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
26640 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
26650 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
26660 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
26670 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
26680 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
26690 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
266a0 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
266b0 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
266c0 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
266d0 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
266e0 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
266f0 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
26700 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
26710 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
26720 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
26730 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26750 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
26760 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
26770 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
26780 0a 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ..  iSet = pOp->
26790 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
267a0 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
267b0 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
267c0 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
267d0 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
267e0 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
267f0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
26800 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
26810 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
26820 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
26830 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
26840 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
26850 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
26860 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
26870 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
26880 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
26890 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
268a0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
268b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
268c0 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
268d0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
268e0 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
268f0 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
26900 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
26910 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
26920 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
26930 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
26940 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Set, .          
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d       (u8)(iSet>=
26970 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a  0 ? iSet & 0xf :
26980 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20   0xff),.        
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269a0 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69         pIn3->u.i
269b0 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
269c0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
269d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
269e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
269f0 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
26a00 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
26a10 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
26a20 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
26a30 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
26a40 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
26a50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
26a60 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
26a70 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
26a80 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45   P3 P4 *.**.** E
26a90 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
26aa0 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
26ab0 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
26ac0 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
26ad0 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
26ae0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
26af0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
26b00 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
26b10 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
26b20 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
26b30 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
26b40 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
26b50 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
26b60 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
26b70 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
26b80 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
26b90 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
26ba0 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
26bb0 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
26bc0 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
26bd0 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
26be0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
26bf0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
26c00 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
26c10 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
26c20 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
26c30 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
26c40 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
26c50 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
26c60 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
26c70 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
26c80 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
26c90 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
26ca0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
26cb0 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  am..*/.case OP_P
26cc0 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
26cd0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
26ce0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
26cf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
26d00 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
26d10 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
26d20 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
26d30 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
26d40 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
26d50 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
26d60 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
26d70 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
26d80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26d90 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
26da0 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
26db0 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
26dc0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
26dd0 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
26de0 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
26df0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
26e00 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
26e10 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
26e20 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
26e30 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
26e40 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
26e50 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
26e60 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
26e70 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
26e80 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
26e90 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
26ea0 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
26eb0 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
26ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
26ed0 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
26ee0 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
26ef0 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
26f00 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
26f10 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
26f20 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
26f30 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
26f40 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
26f50 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
26f60 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
26f70 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
26f80 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
26f90 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
26fa0 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
26fb0 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
26fc0 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
26fd0 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
26fe0 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
26ff0 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
27000 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
27010 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
27020 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
27030 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
27040 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
27050 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
27060 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
27070 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
27080 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27090 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
270a0 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
270b0 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
270c0 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
270d0 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
270e0 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
270f0 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
27100 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
27110 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
27120 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
27130 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
27140 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
27150 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
27160 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
27170 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
27180 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
27190 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
271a0 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
271b0 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
271c0 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
271d0 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
271e0 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
271f0 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
27200 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
27210 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
27220 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
27230 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
27240 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
27250 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
27260 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
27270 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
27280 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
27290 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
272a0 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
272b0 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
272c0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
272d0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
272e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
272f0 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c   db, "too many l
27300 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72  evels of trigger
27310 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20   recursion");.  
27320 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
27330 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
27340 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
27350 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
27360 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
27370 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
27380 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
27390 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
273a0 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
273b0 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
273c0 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
273d0 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
273e0 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
273f0 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
27400 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
27410 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
27420 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
27430 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
27440 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
27450 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
27460 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
27470 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
27480 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
27490 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
274a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
274b0 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
274c0 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
274d0 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
274e0 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
274f0 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
27500 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
27510 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
27520 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
27530 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
27540 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
27550 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
27560 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
27570 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
27580 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
27590 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
275a0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
275b0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
275c0 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e      nByte = ROUN
275d0 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72  D8(sizeof(VdbeFr
275e0 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20  ame)).          
275f0 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a      + nMem * siz
27600 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20  eof(Mem).       
27610 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
27620 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66  m->nCsr * sizeof
27630 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a  (VdbeCursor *);.
27640 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
27650 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
27660 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
27670 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
27680 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
27690 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
276a0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
276b0 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
276c0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
276d0 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
276e0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
276f0 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
27700 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
27710 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
27720 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
27730 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
27740 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
27750 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
27760 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
27770 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
27780 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
27790 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
277a0 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
277b0 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
277c0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
277d0 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
277e0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
277f0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
27800 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
27810 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
27820 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
27830 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
27840 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
27850 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
27860 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
27870 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
27880 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
27890 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
278a0 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
278b0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
278c0 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
278d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
278e0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
278f0 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
27900 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
27910 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
27920 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
27930 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
27940 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
27950 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
27960 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
27970 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46    assert( pc==pF
27980 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
27990 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
279a0 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
279b0 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
279c0 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
279d0 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
279e0 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
279f0 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
27a00 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
27a10 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
27a20 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
27a30 3e 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61  >aMem = &VdbeFra
27a40 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31  meMem(pFrame)[-1
27a50 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  ];.  p->nMem = p
27a60 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
27a70 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
27a80 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
27a90 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
27aa0 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
27ab0 72 20 2a 2a 29 26 70 2d 3e 61 4d 65 6d 5b 70 2d  r **)&p->aMem[p-
27ac0 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
27ad0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
27ae0 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
27af0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
27b00 70 63 20 3d 20 2d 31 3b 0a 0a 20 20 62 72 65 61  pc = -1;..  brea
27b10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27b20 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
27b30 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
27b40 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
27b50 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
27b60 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
27b70 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
27b80 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
27b90 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
27ba0 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
27bb0 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
27bc0 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
27bd0 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
27be0 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
27bf0 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
27c00 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
27c10 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
27c20 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
27c30 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
27c40 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
27c50 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
27c60 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
27c70 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
27c80 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
27c90 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
27ca0 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
27cb0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
27cc0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
27cd0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
27ce0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
27cf0 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
27d00 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
27d10 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
27d20 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
27d30 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
27d40 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
27d50 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
27d60 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
27d70 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
27d80 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
27d90 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
27da0 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
27db0 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
27dc0 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
27dd0 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
27de0 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
27df0 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
27e00 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
27e10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27e20 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
27e30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27e40 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
27e50 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
27e60 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
27e70 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
27e80 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
27e90 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
27ea0 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
27eb0 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
27ec0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
27ed0 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
27ee0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
27ef0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
27f00 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
27f10 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
27f20 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
27f30 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
27f40 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
27f50 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
27f60 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
27f70 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
27f80 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
27f90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
27fa0 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
27fb0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
27fc0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
27fd0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
27fe0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
27ff0 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
28000 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
28010 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28020 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
28030 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
28040 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
28050 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
28060 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
28070 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
28080 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
28090 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
280a0 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
280b0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
280c0 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
280d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
280e0 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
280f0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
28100 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
28110 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
28120 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
28130 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
28140 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
28150 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
28160 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
28170 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
28180 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
28190 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
281a0 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
281b0 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
281c0 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
281d0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
281e0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
281f0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
28200 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
28210 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
28220 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
28230 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
28240 72 65 64 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20  redCons==0 ) pc 
28250 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
28260 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d  else{.    if( p-
28270 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
28280 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
28290 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
282a0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
282b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
282c0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a  _FOREIGN_KEY */.
282d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
282e0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
282f0 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65  NT./* Opcode: Me
28300 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  mMax P1 P2 * * *
28310 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
28320 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
28330 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
28340 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
28350 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
28360 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
28370 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
28380 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28390 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
283a0 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
283b0 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
283c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
283d0 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
283e0 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
283f0 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
28400 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
28410 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
28420 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
28430 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
28440 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
28450 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
28460 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
28470 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
28480 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
28490 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
284a0 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64   Mem *pIn1;.  Vd
284b0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
284c0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
284d0 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
284e0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
284f0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
28500 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
28510 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
28520 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
28530 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
28540 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
28550 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
28560 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
28570 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
28580 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
28590 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
285a0 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
285b0 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
285c0 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
285d0 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
285e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
285f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
28600 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
28610 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
28620 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
28630 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
28640 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
28650 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
28660 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20  reater, jump to 
28670 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  P2..**.** It is 
28680 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
28690 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
286a0 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
286b0 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
286c0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
286d0 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
286e0 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
286f0 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
28700 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
28710 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
28720 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  p, in1 */.  asse
28730 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
28740 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
28750 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
28760 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
28770 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
28780 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28790 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20  : IfNeg P1 P2 * 
287a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
287b0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
287c0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
287d0 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
287e0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
287f0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
28800 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
28810 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
28820 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
28830 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
28840 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
28850 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
28860 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
28870 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65  .*/.case OP_IfNe
28880 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  g: {        /* j
28890 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73  ump, in1 */.  as
288a0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
288b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
288c0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29  f( pIn1->u.i<0 )
288d0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
288e0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
288f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28900 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32  de: IfZero P1 P2
28910 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
28920 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
28930 69 73 74 65 72 20 50 31 20 69 73 20 65 78 61 63  ister P1 is exac
28940 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50  tly 0, jump to P
28950 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  2. .**.** It is 
28960 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
28970 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28980 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
28990 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
289a0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
289b0 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
289c0 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
289d0 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
289e0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f  /.case OP_IfZero
289f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
28a00 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73  mp, in1 */.  ass
28a10 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
28a20 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
28a30 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
28a40 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
28a50 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
28a60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28a70 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
28a80 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
28a90 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
28aa0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
28ab0 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
28ac0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
28ad0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
28ae0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
28af0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a   to the FuncDef.
28b00 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ** structure tha
28b10 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
28b20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72  function.  Use r
28b30 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73  egister.** P3 as
28b40 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
28b50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
28b60 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
28b70 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
28b80 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
28b90 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61  uccessors..*/.ca
28ba0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
28bb0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
28bc0 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  i;.  Mem *pMem;.
28bd0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73    Mem *pRec;.  s
28be0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
28bf0 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
28c00 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
28c10 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
28c20 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
28c30 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65 6d   pRec = &p->aMem
28c40 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
28c50 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
28c60 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
28c70 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
28c80 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
28c90 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61  Rec++){.    apVa
28ca0 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
28cb0 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70   storeTypeInfo(p
28cc0 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Rec, encoding);.
28cd0 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20    }.  ctx.pFunc 
28ce0 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
28cf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28d00 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
28d10 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74  =p->nMem );.  ct
28d20 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20  x.pMem = pMem = 
28d30 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
28d40 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
28d50 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
28d60 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
28d70 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  s.z = 0;.  ctx.s
28d80 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
28d90 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
28da0 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b    ctx.s.db = db;
28db0 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
28dc0 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20   0;.  ctx.pColl 
28dd0 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
28de0 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
28df0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
28e00 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
28e10 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a  ( pOp>p->aOp );.
28e20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
28e30 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
28e40 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
28e50 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
28e60 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
28e70 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
28e80 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
28e90 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78  Coll;.  }.  (ctx
28ea0 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26  .pFunc->xStep)(&
28eb0 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a  ctx, n, apVal);.
28ec0 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
28ed0 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
28ee0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
28ef0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
28f00 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
28f10 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
28f20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
28f30 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
28f40 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
28f50 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b  &ctx.s);.  break
28f60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28f70 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
28f80 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
28f90 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
28fa0 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
28fb0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
28fc0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
28fd0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
28fe0 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
28ff0 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
29000 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
29010 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
29020 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
29030 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29040 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
29050 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
29060 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
29070 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
29080 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
29090 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
290a0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
290b0 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
290c0 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
290d0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
290e0 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
290f0 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
29100 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
29110 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
29120 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
29130 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
29140 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
29150 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29160 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
29170 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
29180 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
29190 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
291a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
291b0 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
291c0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65  p->nMem );.  pMe
291d0 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
291e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
291f0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
29200 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
29210 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
29220 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
29230 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
29240 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
29250 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
29260 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
29270 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
29280 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
29290 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
292a0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
292b0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
292c0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
292d0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
292e0 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
292f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
29300 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
29310 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
29320 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
29330 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69  k;.}...#if !defi
29340 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29350 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
29360 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29370 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
29380 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
29390 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
293a0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
293b0 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
293c0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
293d0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
293e0 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
293f0 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
29400 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
29410 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
29420 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
29430 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
29440 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71  cuum: {.  if( sq
29450 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
29460 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
29470 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a  due_to_misuse; .
29480 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
29490 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
294a0 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20  Msg, db);.  if( 
294b0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
294c0 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
294d0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
294e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
294f0 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
29500 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
29510 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
29520 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
29530 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
29540 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
29550 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
29560 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
29570 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
29580 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
29590 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
295a0 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
295b0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
295c0 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
295d0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
295e0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
295f0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
29600 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
29610 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
29620 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
29630 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
29640 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29650 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
29660 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
29670 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
29680 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
29690 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
296a0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
296b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
296c0 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
296d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
296e0 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
296f0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
29700 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
29710 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
29720 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
29730 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
29740 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
29750 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
29760 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
29770 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
29780 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
29790 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
297a0 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
297b0 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
297c0 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
297d0 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
297e0 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
297f0 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
29800 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
29810 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
29820 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
29830 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
29840 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
29850 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
29860 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
29870 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
29880 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
29890 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
298a0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
298b0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
298c0 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
298d0 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
298e0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
298f0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
29900 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
29910 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
29920 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
29930 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
29940 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
29950 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
29960 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
29970 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
29980 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
29990 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
299a0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
299b0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
299c0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
299d0 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
299e0 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
299f0 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
29a00 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
29a10 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
29a20 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
29a30 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
29a40 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
29a50 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
29a60 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
29a70 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
29a80 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
29a90 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
29aa0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
29ab0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
29ac0 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
29ad0 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
29ae0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
29af0 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
29b00 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
29b10 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
29b20 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
29b30 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20  bleLock: {.  u8 
29b40 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
29b50 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28  8)pOp->p3;.  if(
29b60 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20   isWriteLock || 
29b70 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  0==(db->flags&SQ
29b80 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
29b90 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74  tted) ){.    int
29ba0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
29bb0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d      assert( p1>=
29bc0 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20  0 && p1<db->nDb 
29bd0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
29be0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
29bf0 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  1<<p1))!=0 );.  
29c00 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
29c10 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
29c20 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
29c30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
29c40 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
29c50 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
29c60 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
29c70 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
29c80 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
29c90 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
29ca0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
29cb0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
29cc0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
29cd0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
29ce0 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
29cf0 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
29d00 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
29d10 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
29d20 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
29d30 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
29d40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29d50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29d60 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
29d70 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
29d80 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
29d90 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
29da0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
29db0 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
29dc0 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
29dd0 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
29de0 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
29df0 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
29e00 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
29e10 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
29e20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
29e30 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
29e40 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
29e50 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
29e60 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
29e70 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
29e80 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
29e90 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
29ea0 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
29eb0 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
29ec0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
29ed0 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
29ee0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
29ef0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
29f00 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
29f10 69 66 28 20 70 56 54 61 62 20 29 7b 0a 20 20 20  if( pVTab ){.   
29f20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
29f30 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
29f40 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
29f50 20 70 56 54 61 62 2d 3e 70 56 74 61 62 2d 3e 7a   pVTab->pVtab->z
29f60 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 54 61  ErrMsg;.    pVTa
29f70 62 2d 3e 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  b->pVtab->zErrMs
29f80 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  g = 0;.  }.  bre
29f90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
29fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
29fb0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
29fc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29fd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
29fe0 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
29ff0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2a000 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2a010 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2a020 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2a030 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
2a040 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
2a050 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
2a060 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
2a070 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
2a080 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
2a090 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
2a0a0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
2a0b0 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
2a0c0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2a0d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2a0e0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2a0f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2a100 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2a110 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
2a120 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2a130 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
2a140 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
2a150 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
2a160 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
2a170 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
2a180 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
2a190 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
2a1a0 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
2a1b0 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
2a1c0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
2a1d0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
2a1e0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2a1f0 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
2a200 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
2a210 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2a220 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2a230 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2a240 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a250 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2a260 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
2a270 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2a280 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2a290 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2a2a0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2a2b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2a2c0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
2a2d0 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
2a2e0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
2a2f0 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
2a300 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
2a310 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
2a320 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
2a330 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
2a340 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
2a350 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
2a360 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2a370 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2a380 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2a390 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
2a3a0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2a3b0 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  ;..  pCur = 0;. 
2a3c0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30   pVtabCursor = 0
2a3d0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
2a3e0 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
2a3f0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73  ;.  pModule = (s
2a400 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
2a410 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2a420 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26    assert(pVtab &
2a430 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66  & pModule);.  if
2a440 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2a450 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
2a460 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2a470 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
2a480 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20  e->xOpen(pVtab, 
2a490 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  &pVtabCursor);. 
2a4a0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2a4b0 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
2a4c0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
2a4d0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
2a4e0 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
2a4f0 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  = 0;.  if( sqlit
2a500 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
2a510 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2a520 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28  to_misuse;.  if(
2a530 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
2a540 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
2a550 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
2a560 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
2a570 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
2a580 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
2a590 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
2a5a0 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63 75  itialise vdbe cu
2a5b0 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
2a5c0 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
2a5d0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
2a5e0 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
2a5f0 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
2a600 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
2a610 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
2a620 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75  ursor;.      pCu
2a630 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  r->pModule = pVt
2a640 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d  abCursor->pVtab-
2a650 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65  >pModule;.    }e
2a660 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
2a670 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2a680 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
2a690 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
2a6a0 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
2a6b0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2a6c0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2a6d0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2a6e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a6f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a700 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
2a710 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
2a720 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
2a730 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
2a740 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
2a750 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
2a760 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
2a770 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
2a780 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
2a790 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
2a7a0 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
2a7b0 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
2a7c0 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
2a7d0 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
2a7e0 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
2a7f0 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
2a800 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
2a810 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
2a820 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
2a830 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
2a840 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2a850 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
2a860 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
2a870 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
2a880 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
2a890 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
2a8a0 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
2a8b0 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
2a8c0 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
2a8d0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
2a8e0 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
2a8f0 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
2a900 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
2a910 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
2a920 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
2a930 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
2a940 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
2a950 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
2a960 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
2a970 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
2a980 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
2a990 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
2a9a0 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
2a9b0 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
2a9c0 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
2a9d0 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
2a9e0 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
2a9f0 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
2aa00 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
2aa10 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
2aa20 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
2aa30 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2aa40 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2aa50 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
2aa60 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2aa70 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2aa80 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
2aa90 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
2aaa0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2aab0 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2aac0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2aad0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2aae0 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
2aaf0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2ab00 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
2ab10 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  y = &p->aMem[pOp
2ab20 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
2ab30 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
2ab40 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2ab50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45 47 49 53  Op->p1];.  REGIS
2ab60 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2ab70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
2ab80 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2ab90 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74  bCursor );.  pVt
2aba0 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d  abCursor = pCur-
2abb0 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  >pVtabCursor;.  
2abc0 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72  pVtab = pVtabCur
2abd0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2abe0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2abf0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
2ac00 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
2ac10 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
2ac20 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
2ac30 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
2ac40 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
2ac50 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
2ac60 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
2ac70 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
2ac80 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
2ac90 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
2aca0 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
2acb0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
2acc0 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65  od */.  {.    re
2acd0 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67  s = 0;.    apArg
2ace0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
2acf0 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
2ad00 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
2ad10 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
2ad20 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 74  c[i+1];.      st
2ad30 6f 72 65 54 79 70 65 49 6e 66 6f 28 61 70 41 72  oreTypeInfo(apAr
2ad40 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  g[i], 0);.    }.
2ad50 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2ad60 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2ad70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ad80 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 70 2d  o_misuse;.    p-
2ad90 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2ada0 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  1;.    rc = pMod
2adb0 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
2adc0 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
2add0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
2ade0 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70  g, apArg);.    p
2adf0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2ae00 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   0;.    sqlite3D
2ae10 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
2ae20 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
2ae30 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
2ae40 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61  ErrMsg;.    pVta
2ae50 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
2ae60 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2ae70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
2ae80 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2ae90 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
2aea0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
2aeb0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
2aec0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2aed0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
2aee0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
2aef0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2af00 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
2af10 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
2af20 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2af30 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2af40 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2af50 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2af60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2af70 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2af80 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
2af90 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2afa0 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
2afb0 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
2afc0 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
2afd0 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
2afe0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
2aff0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
2b000 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
2b010 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
2b020 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
2b030 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
2b040 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2b050 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2b060 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2b070 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
2b080 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
2b090 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
2b0a0 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
2b0b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2b0c0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2b0d0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2b0e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2b0f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
2b100 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
2b110 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
2b120 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p3];.  if( pCu
2b130 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2b140 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b150 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2b160 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2b170 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2b180 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2b190 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2b1a0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2b1b0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2b1c0 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2b1d0 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2b1e0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2b1f0 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2b200 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2b210 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2b220 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2b230 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2b240 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2b250 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2b260 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2b270 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2b280 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2b290 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2b2a0 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2b2b0 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2b2c0 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2b2d0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2b2e0 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2b2f0 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2b300 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2b310 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2b320 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ull);..  if( sql
2b330 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
2b340 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2b350 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
2b360 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
2b370 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
2b380 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
2b390 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
2b3a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2b3b0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2b3c0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
2b3d0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
2b3e0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
2b3f0 20 30 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65   0;.  if( sConte
2b400 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
2b410 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
2b420 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
2b430 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
2b440 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
2b450 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67  on to the P3 reg
2b460 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64  ister. We.  ** d
2b470 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73  o this regardles
2b480 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
2b490 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63  not an error occ
2b4a0 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20  urred to ensure 
2b4b0 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  any.  ** dynamic
2b4c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73   allocation in s
2b4d0 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d  Context.s (a Mem
2b4e0 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c   struct) is  rel
2b4f0 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71  eased..  */.  sq
2b500 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2b510 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78  ncoding(&sContex
2b520 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  t.s, encoding);.
2b530 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2b540 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
2b550 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2b560 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73  emMove(pDest, &s
2b570 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50  Context.s);.  UP
2b580 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2b590 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
2b5a0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
2b5b0 28 64 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  (db) ){.    goto
2b5c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2b5d0 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20  suse;.  }.  if( 
2b5e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2b5f0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2b600 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2b610 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b620 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2b630 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2b640 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2b650 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2b660 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2b670 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2b680 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2b690 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2b6a0 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2b6b0 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2b6c0 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2b6d0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2b6e0 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2b6f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2b700 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2b710 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2b720 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2b730 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2b740 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2b750 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2b760 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2b770 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2b780 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2b790 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2b7a0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2b7b0 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2b7c0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2b7d0 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2b7e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b7f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b800 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2b810 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2b820 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2b830 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2b840 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2b850 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2b860 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2b870 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2b880 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2b890 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2b8a0 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2b8b0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2b8c0 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2b8d0 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2b8e0 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2b8f0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2b900 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2b910 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2b920 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2b930 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2b940 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2b950 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2b960 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2b970 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2b980 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2b990 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2b9a0 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2b9b0 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2b9c0 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2b9d0 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2b9e0 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2b9f0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2ba00 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
2ba10 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2ba20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ba30 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 70 2d 3e 69  o_misuse;.  p->i
2ba40 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
2ba50 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2ba60 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
2ba70 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e  abCursor);.  p->
2ba80 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
2ba90 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2baa0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2bab0 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
2bac0 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
2bad0 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
2bae0 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  sg = 0;.  if( rc
2baf0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2bb00 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2bb10 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
2bb20 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  abCursor);.  }. 
2bb30 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2bb40 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
2bb50 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2bb60 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72 65 73  use;..  if( !res
2bb70 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
2bb80 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
2bb90 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70  p to P2 */.    p
2bba0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2bbb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2bbc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2bbd0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2bbe0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2bbf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bc00 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2bc10 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
2bc20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2bc30 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2bc40 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2bc50 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2bc60 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2bc70 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
2bc80 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
2bc90 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
2bca0 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
2bcb0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
2bcc0 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
2bcd0 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
2bce0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
2bcf0 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
2bd00 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
2bd10 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2bd20 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
2bd30 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
2bd40 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2bd50 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
2bd60 6d 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  me = &p->aMem[pO
2bd70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2bd80 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  ( pVtab->pModule
2bd90 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52  ->xRename );.  R
2bda0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2bdb0 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
2bdc0 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
2bdd0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
2bde0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2bdf0 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2be00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2be10 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d  o_misuse;.  rc =
2be20 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
2be30 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
2be40 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c  pName->z);.  sql
2be50 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
2be60 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
2be70 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2be80 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
2be90 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
2bea0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
2beb0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
2bec0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2bed0 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b  isuse;..  break;
2bee0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
2bef0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2bf00 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2bf10 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
2bf20 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
2bf30 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2bf40 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2bf50 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2bf60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2bf70 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2bf80 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2bf90 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2bfa0 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
2bfb0 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
2bfc0 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
2bfd0 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
2bfe0 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
2bff0 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
2c000 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
2c010 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
2c020 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
2c030 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2c040 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
2c050 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
2c060 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
2c070 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
2c080 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
2c090 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
2c0a0 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
2c0b0 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
2c0c0 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
2c0d0 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
2c0e0 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
2c0f0 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
2c100 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
2c110 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
2c120 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
2c130 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
2c140 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
2c150 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
2c160 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2c170 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
2c180 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
2c190 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
2c1a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
2c1b0 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
2c1c0 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
2c1d0 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
2c1e0 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
2c1f0 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
2c200 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
2c210 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
2c220 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
2c230 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
2c240 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
2c250 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
2c260 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
2c270 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
2c280 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
2c290 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
2c2a0 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
2c2b0 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
2c2c0 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
2c2d0 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
2c2e0 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
2c2f0 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
2c300 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
2c310 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
2c320 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
2c330 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
2c340 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
2c350 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
2c360 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2c370 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2c380 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2c390 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72  odule;.  int nAr
2c3a0 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71  g;.  int i;.  sq
2c3b0 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64  lite_int64 rowid
2c3c0 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2c3d0 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 70  .  Mem *pX;..  p
2c3e0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2c3f0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2c400 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2c410 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2c420 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
2c430 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
2c440 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2c450 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
2c460 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
2c470 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
2c480 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
2c490 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
2c4a0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
2c4b0 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
2c4c0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2c4d0 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66      storeTypeInf
2c4e0 6f 28 70 58 2c 20 30 29 3b 0a 20 20 20 20 20 20  o(pX, 0);.      
2c4f0 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
2c500 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
2c510 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2c520 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2c530 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2c540 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63  o_misuse;.    rc
2c550 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
2c560 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
2c570 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
2c580 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
2c590 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2c5a0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
2c5b0 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
2c5c0 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
2c5d0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2c5e0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2c5f0 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
2c600 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2c610 75 73 65 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  use;.    if( rc=
2c620 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f  =SQLITE_OK && pO
2c630 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61  p->p1 ){.      a
2c640 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26  ssert( nArg>1 &&
2c650 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70   apArg[0] && (ap
2c660 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45  Arg[0]->flags&ME
2c670 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20  M_Null) );.     
2c680 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
2c690 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2c6a0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
2c6b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2c6c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2c6d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c6e0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
2c6f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2c700 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
2c710 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
2c720 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2c730 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
2c740 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
2c750 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
2c760 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
2c770 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
2c780 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
2c790 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
2c7a0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
2c7b0 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 6e 50 61  nt p1;.  int nPa
2c7c0 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50 61  ge;.  Pager *pPa
2c7d0 67 65 72 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70  ger;..  p1 = pOp
2c7e0 2d 3e 70 31 3b 20 0a 20 20 70 50 61 67 65 72 20  ->p1; .  pPager 
2c7f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
2c800 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ger(db->aDb[p1].
2c810 70 42 74 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  pBt);.  rc = sql
2c820 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f 75  ite3PagerPagecou
2c830 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61 67  nt(pPager, &nPag
2c840 65 29 3b 0a 20 20 2f 2a 20 4f 50 5f 50 61 67 65  e);.  /* OP_Page
2c850 63 6f 75 6e 74 20 69 73 20 61 6c 77 61 79 73 20  count is always 
2c860 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2c870 69 6e 20 61 20 72 65 61 64 20 74 72 61 6e 73 61  in a read transa
2c880 63 74 69 6f 6e 2e 20 20 54 68 65 0a 20 20 2a 2a  ction.  The.  **
2c890 20 70 61 67 65 20 63 6f 75 6e 74 20 68 61 73 20   page count has 
2c8a0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 75 63  already been suc
2c8b0 63 65 73 73 66 75 6c 6c 79 20 72 65 61 64 20 61  cessfully read a
2c8c0 6e 64 20 63 61 63 68 65 64 2e 20 20 53 6f 20 74  nd cached.  So t
2c8d0 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 50  he.  ** sqlite3P
2c8e0 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 29 20  agerPagecount() 
2c8f0 63 61 6c 6c 20 61 62 6f 76 65 20 63 61 6e 6e 6f  call above canno
2c900 74 20 66 61 69 6c 2e 20 2a 2f 0a 20 20 69 66 28  t fail. */.  if(
2c910 20 41 4c 57 41 59 53 28 72 63 3d 3d 53 51 4c 49   ALWAYS(rc==SQLI
2c920 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 70 4f  TE_OK) ){.    pO
2c930 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2c940 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2c950 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a  .i = nPage;.  }.
2c960 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2c970 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2c980 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20  E_OMIT_TRACE./* 
2c990 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20  Opcode: Trace * 
2c9a0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49  * * P4 *.**.** I
2c9b0 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
2c9c0 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
2c9d0 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
2c9e0 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
2c9f0 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
2ca00 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
2ca10 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
2ca20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
2ca30 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ck..*/.case OP_T
2ca40 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  race: {.  char *
2ca50 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63  zTrace;..  zTrac
2ca60 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
2ca70 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
2ca80 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72  zSql);.  if( zTr
2ca90 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64  ace ){.    if( d
2caa0 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20  b->xTrace ){.   
2cab0 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
2cac0 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 54 72  ->pTraceArg, zTr
2cad0 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64  ace);.    }.#ifd
2cae0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2caf0 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61      if( (db->fla
2cb00 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
2cb10 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20  race)!=0 ){.    
2cb20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
2cb30 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
2cb40 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
2cb50 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  .    }.#endif /*
2cb60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
2cb70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2cb80 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
2cb90 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a  de: Noop * * * *
2cba0 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68   *.**.** Do noth
2cbb0 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72  ing.  This instr
2cbc0 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20  uction is often 
2cbd0 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70  useful as a jump
2cbe0 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .** destination.
2cbf0 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  .*/./*.** The ma
2cc00 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f  gic Explain opco
2cc10 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65  de are only inse
2cc20 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69  rted when explai
2cc30 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69  n==2 (which.** i
2cc40 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68  s to say when th
2cc50 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
2cc60 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75  PLAN syntax is u
2cc70 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70  sed.).** This op
2cc80 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66  code records inf
2cc90 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
2cca0 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74  e optimizer.  It
2ccb0 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73   is the.** the s
2ccc0 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20  ame as a no-op. 
2ccd0 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76   This opcodesnev
2cce0 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20  er appears in a 
2ccf0 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e  real VM program.
2cd00 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20  .*/.default: {  
2cd10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
2cd20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f  is really OP_Noo
2cd30 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e  p and OP_Explain
2cd40 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   */.  break;.}..
2cd50 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
2cd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
2cda0 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74  * The cases of t
2cdb0 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
2cdc0 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c  ent above this l
2cdd0 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62  ine should all b
2cde0 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79  e indented.** by
2cdf0 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20   6 spaces.  But 
2ce00 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20  the left-most 6 
2ce10 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e  spaces have been
2ce20 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72   removed to impr
2ce30 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61  ove the.** reada
2ce40 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68  bility.  From th
2ce50 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e  is point on down
2ce60 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64  , the normal ind
2ce70 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61  entation rules a
2ce80 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a  re.** restored..
2ce90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ceb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ced0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20  *************/. 
2cee0 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42     }..#ifdef VDB
2cef0 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a  E_PROFILE.    {.
2cf00 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65        u64 elapse
2cf10 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  d = sqlite3Hwtim
2cf20 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20  e() - start;.   
2cf30 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b     pOp->cycles +
2cf40 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20  = elapsed;.     
2cf50 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66   pOp->cnt++;.#if
2cf60 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e   0.        fprin
2cf70 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c  tf(stdout, "%10l
2cf80 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a  lu ", elapsed);.
2cf90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2cfa0 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
2cfb0 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61  t, origPc, &p->a
2cfc0 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e  Op[origPc]);.#en
2cfd0 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  dif.    }.#endif
2cfe0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
2cff0 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73  lowing code adds
2d000 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20   nothing to the 
2d010 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61  actual functiona
2d020 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74  lity.    ** of t
2d030 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20  he program.  It 
2d040 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72  is only here for
2d050 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62   testing and deb
2d060 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f  ugging..    ** O
2d070 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
2d080 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43  , it does burn C
2d090 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20  PU cycles every 
2d0a0 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20  time through.   
2d0b0 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f   ** the evaluato
2d0c0 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63  r loop.  So we c
2d0d0 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20  an leave it out 
2d0e0 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64  when NDEBUG is d
2d0f0 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
2d100 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
2d110 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31    assert( pc>=-1
2d120 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
2d130 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2d140 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d  DEBUG.    if( p-
2d150 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  >trace ){.      
2d160 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69  if( rc!=0 ) fpri
2d170 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63  ntf(p->trace,"rc
2d180 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
2d190 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79    if( opProperty
2d1a0 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
2d1b0 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  ERELEASE ){.    
2d1c0 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2d1d0 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2d1e0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
2d1f0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70    }.      if( op
2d200 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
2d210 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20  _OUT3 ){.       
2d220 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2d230 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33  ->trace, pOp->p3
2d240 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
2d250 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f  .    }.#endif  /
2d260 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
2d270 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45  /.#endif  /* NDE
2d280 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54  BUG */.  }  /* T
2d290 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f  he end of the fo
2d2a0 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c  r(;;) loop the l
2d2b0 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63  oops through opc
2d2c0 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  odes */..  /* If
2d2d0 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
2d2e0 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74  oint, it means t
2d2f0 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73  hat execution is
2d300 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20   finished with. 
2d310 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20   ** an error of 
2d320 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a  some kind..  */.
2d330 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a  vdbe_error_halt:
2d340 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b  .  assert( rc );
2d350 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
2d360 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
2d370 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
2d380 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
2d390 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
2d3a0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
2d3b0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a   SQLITE_ERROR;..
2d3c0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
2d3d0 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
2d3e0 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
2d3f0 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
2d400 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
2d410 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
2d420 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
2d430 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
2d440 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
2d450 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  rn:.  sqlite3Btr
2d460 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76  eeMutexArrayLeav
2d470 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20  e(&p->aMutex);. 
2d480 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
2d490 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
2d4a0 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
2d4b0 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
2d4c0 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
2d4d0 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
2d4e0 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
2d4f0 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74  ig:.  sqlite3Set
2d500 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2d510 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20  sg, db, "string 
2d520 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22  or blob too big"
2d530 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2d540 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20  _TOOBIG;.  goto 
2d550 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2d560 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d570 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ere if a malloc(
2d580 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f  ) fails..  */.no
2d590 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c  _mem:.  db->mall
2d5a0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2d5b0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2d5c0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d5d0 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
2d5e0 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
2d5f0 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20  E_NOMEM;.  goto 
2d600 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2d610 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d620 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c 49 54  ere for an SQLIT
2d630 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a  E_MISUSE error..
2d640 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
2d650 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63 20 3d  o_misuse:.  rc =
2d660 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
2d670 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69    /* Fall thru i
2d680 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  nto abort_due_to
2d690 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20  _error */..  /* 
2d6a0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
2d6b0 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
2d6c0 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
2d6d0 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
2d6e0 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
2d6f0 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
2d700 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
2d710 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
2d720 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
2d730 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
2d740 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2d750 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
2d760 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
2d770 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
2d780 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
2d790 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d7a0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d7b0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
2d7c0 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
2d7d0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
2d7e0 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
2d7f0 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
2d800 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
2d810 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
2d820 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
2d830 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2d840 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
2d850 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
2d860 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
2d870 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
2d880 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
2d890 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
2d8a0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d8b0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d8c0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
2d8d0 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
2d8e0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.