/ Hex Artifact Content
Login

Artifact 03857c07b8d159eb86ff559138d2eb5317cbfe32:


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 65 73 74 20 61 20 72 65 67 69 73 74 65  * Test a registe
0f60: 72 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 65  r to see if it e
0f70: 78 63 65 65 64 73 20 74 68 65 20 63 75 72 72 65  xceeds the curre
0f80: 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62 20  nt maximum blob 
0f90: 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74 20 64  size..** If it d
0fa0: 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  oes, record the 
0fb0: 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62  new maximum blob
0fc0: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   size..*/.#if de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
0fe0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
0ff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1000: 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  IN_TEST).# defin
1010: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
1020: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
1030: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
1040: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
1050: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1060: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1070: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1080: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1090: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
10a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
10b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
10c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
10d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
10e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
10f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1100: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1110: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1120: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1130: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1140: 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20 7b  P,enc)) \.     {
1150: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a   goto no_mem; }.
1160: 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65  ./*.** An epheme
1170: 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ral string value
1180: 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74   (signified by t
1190: 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61  he MEM_Ephem fla
11a0: 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  g) contains.** a
11b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79   pointer to a dy
11c0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
11d0: 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65  ted string where
11e0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69   some other enti
11f0: 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73  ty.** is respons
1200: 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63  ible for dealloc
1210: 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e  ating that strin
1220: 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  g.  Because the 
1230: 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73  register.** does
1240: 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65   not control the
1250: 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68   string, it migh
1260: 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74  t be deleted wit
1270: 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65  hout the registe
1280: 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e  r.** knowing it.
1290: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
12a0: 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  ine converts an 
12b0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12c0: 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61   into a dynamica
12d0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  lly allocated.**
12e0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65   string that the
12f0: 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66   register itself
1300: 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f   controls.  In o
1310: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a  ther words, it.*
1320: 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45  * converts an ME
1330: 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69  M_Ephem string i
1340: 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e 20 73  nto an MEM_Dyn s
1350: 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tring..*/.#defin
1360: 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  e Deephemeralize
1370: 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50  (P) \.   if( ((P
1380: 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68  )->flags&MEM_Eph
1390: 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20  em)!=0 \.       
13a0: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
13b0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50  mMakeWriteable(P
13c0: 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ) ){ goto no_mem
13d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20 73  ;}../*.** Call s
13e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
13f0: 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74 68 65  andBlob() on the
1400: 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75 65 20   supplied value 
1410: 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a 20 50  (type Mem*).** P
1420: 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   if required..*/
1430: 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42  .#define ExpandB
1440: 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c  lob(P) (((P)->fl
1450: 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71  ags&MEM_Zero)?sq
1460: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
1470: 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a 2f 2a  ndBlob(P):0)../*
1480: 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65  .** Argument pMe
1490: 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 72 65  m points at a re
14a0: 67 69 73 74 65 72 20 74 68 61 74 20 77 69 6c 6c  gister that will
14b0: 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 61 0a   be passed to a.
14c0: 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ** user-defined 
14d0: 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74 75  function or retu
14e0: 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
14f0: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f   as the result o
1500: 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68  f a query..** Th
1510: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
1520: 74 2c 20 27 64 62 5f 65 6e 63 27 20 69 73 20 74  t, 'db_enc' is t
1530: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1540: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 64 62   used by the vdb
1550: 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69 73 74 65  e for.** registe
1560: 72 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54 68  r variables.  Th
1570: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
1580: 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61 6e  the pMem->enc an
1590: 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a 20  d pMem->type.** 
15a0: 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20 62  variables used b
15b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
15c0: 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65 73  lue_*() routines
15d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74 6f  ..*/.#define sto
15e0: 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29 20  reTypeInfo(A,B) 
15f0: 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41  _storeTypeInfo(A
1600: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 73  ).static void _s
1610: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65 6d  toreTypeInfo(Mem
1620: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1630: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1640: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1650: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1660: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1670: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1680: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1690: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
16a0: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
16b0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
16c0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16d0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
16e0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
16f0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
1700: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1710: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1720: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1730: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1740: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1750: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1760: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1770: 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69 65 73 20  *.** Properties 
1780: 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  of opcodes.  The
1790: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
17a0: 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63  ER macro is.** c
17b0: 72 65 61 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f  reated by mkopco
17c0: 64 65 68 2e 61 77 6b 20 64 75 72 69 6e 67 20 63  deh.awk during c
17d0: 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74  ompilation.  Dat
17e0: 61 20 69 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  a is obtained.**
17f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e   from the commen
1800: 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1810: 20 22 63 61 73 65 20 4f 50 5f 78 78 78 78 3a 22   "case OP_xxxx:"
1820: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a   statements in.*
1830: 2a 20 74 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a  * this file.  .*
1840: 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75  /.static const u
1850: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 70 63  nsigned char opc
1860: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20  odeProperty[] = 
1870: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
1880: 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  R;../*.** Return
1890: 20 74 72 75 65 20 69 66 20 61 6e 20 6f 70 63 6f   true if an opco
18a0: 64 65 20 68 61 73 20 61 6e 79 20 6f 66 20 74 68  de has any of th
18b0: 65 20 4f 50 46 4c 47 5f 78 78 78 20 70 72 6f 70  e OPFLG_xxx prop
18c0: 65 72 74 69 65 73 0a 2a 2a 20 73 70 65 63 69 66  erties.** specif
18d0: 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a  ied by mask..*/.
18e0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4f  int sqlite3VdbeO
18f0: 70 63 6f 64 65 48 61 73 50 72 6f 70 65 72 74 79  pcodeHasProperty
1900: 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74  (int opcode, int
1910: 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73 65 72 74   mask){.  assert
1920: 28 20 6f 70 63 6f 64 65 3e 30 20 26 26 20 6f 70  ( opcode>0 && op
1930: 63 6f 64 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66  code<(int)sizeof
1940: 28 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29  (opcodeProperty)
1950: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70   );.  return (op
1960: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63  codeProperty[opc
1970: 6f 64 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d  ode]&mask)!=0;.}
1980: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1990: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
19a0: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
19b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
19c0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
19d0: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
19e0: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
19f0: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1a00: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1a10: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
1a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a30: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
1a40: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
1a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a60: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1a70: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1a80: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1a90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aa0: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1ab0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1ac0: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
1ae0: 6e 20 64 61 74 61 62 61 73 65 20 74 68 65 20 63  n database the c
1af0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1b00: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74  , or -1 */.  int
1b10: 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 20   isBtreeCursor  
1b20: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 42     /* True for B
1b30: 2d 54 72 65 65 2e 20 20 46 61 6c 73 65 20 66 6f  -Tree.  False fo
1b40: 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f  r pseudo-table o
1b50: 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f  r vtab */.){.  /
1b60: 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72  * Find the memor
1b70: 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c  y cell that will
1b80: 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72   be used to stor
1b90: 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65  e the blob of me
1ba0: 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69 72  mory.  ** requir
1bb0: 65 64 20 66 6f 72 20 74 68 69 73 20 56 64 62 65  ed for this Vdbe
1bc0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1bd0: 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69 65  . It is convenie
1be0: 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20 2a  nt to use a .  *
1bf0: 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63 65  * vdbe memory ce
1c00: 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68 65  ll to manage the
1c10: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1c20: 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  on required for 
1c30: 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f  a.  ** VdbeCurso
1c40: 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  r structure for 
1c50: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65  the following re
1c60: 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  asons:.  **.  **
1c70: 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63     * Sometimes c
1c80: 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61 72  ursor numbers ar
1c90: 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f 75  e used for a cou
1ca0: 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ple of different
1cb0: 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f 73  .  **     purpos
1cc0: 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72 6f  es in a vdbe pro
1cd0: 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65 72  gram. The differ
1ce0: 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20 72  ent uses might r
1cf0: 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20 20  equire.  **     
1d00: 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64 20  different sized 
1d10: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d  allocations. Mem
1d20: 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69 64  ory cells provid
1d30: 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20  e growable.  ** 
1d40: 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e      allocations.
1d50: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57  .  **.  **   * W
1d60: 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c 45  hen using ENABLE
1d70: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
1d80: 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  NT, memory cell 
1d90: 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a  buffers can.  **
1da0: 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c 61       be freed la
1db0: 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71 6c  zily via the sql
1dc0: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
1dd0: 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73 0a  ory() API. This.
1de0: 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a    **     minimiz
1df0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
1e00: 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61   malloc calls ma
1e10: 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  de by the system
1e20: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f  ..  **.  ** Memo
1e30: 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75 72  ry cells for cur
1e40: 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61 74  sors are allocat
1e50: 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  ed at the top of
1e60: 20 74 68 65 20 61 64 64 72 65 73 73 0a 20 20 2a   the address.  *
1e70: 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20  * space. Memory 
1e80: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63  cell (p->nMem) c
1e90: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63 75  orresponds to cu
1ea0: 72 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66 6f  rsor 0. Space fo
1eb0: 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31 20  r.  ** cursor 1 
1ec0: 69 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d 65  is managed by me
1ed0: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1ee0: 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f  em-1), etc..  */
1ef0: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26  .  Mem *pMem = &
1f00: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d  p->aMem[p->nMem-
1f10: 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42  iCur];..  int nB
1f20: 79 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  yte;.  VdbeCurso
1f30: 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42  r *pCx = 0;.  nB
1f40: 79 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a  yte = .      siz
1f50: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20  eof(VdbeCursor) 
1f60: 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65  + .      (isBtre
1f70: 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42  eCursor?sqlite3B
1f80: 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29  treeCursorSize()
1f90: 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e  :0) + .      2*n
1fa0: 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32  Field*sizeof(u32
1fb0: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
1fc0: 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  ur<p->nCursor );
1fd0: 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
1fe0: 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c  iCur] ){.    sql
1ff0: 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
2000: 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69  or(p, p->apCsr[i
2010: 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70  Cur]);.    p->ap
2020: 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20  Csr[iCur] = 0;. 
2030: 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f   }.  if( SQLITE_
2040: 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d  OK==sqlite3VdbeM
2050: 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79  emGrow(pMem, nBy
2060: 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d  te, 0) ){.    p-
2070: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70  >apCsr[iCur] = p
2080: 43 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  Cx = (VdbeCursor
2090: 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d  *)pMem->z;.    m
20a0: 65 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30  emset(pMem->z, 0
20b0: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43  , nByte);.    pC
20c0: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
20d0: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
20e0: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20  nField;.    if( 
20f0: 6e 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20  nField ){.      
2100: 70 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33  pCx->aType = (u3
2110: 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  2 *)&pMem->z[siz
2120: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d  eof(VdbeCursor)]
2130: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2140: 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b  isBtreeCursor ){
2150: 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72  .      pCx->pCur
2160: 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a  sor = (BtCursor*
2170: 29 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65  ).          &pMe
2180: 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65  m->z[sizeof(Vdbe
2190: 43 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64  Cursor)+2*nField
21a0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20  *sizeof(u32)];. 
21b0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
21c0: 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n pCx;.}../*.** 
21d0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61  Try to convert a
21e0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75   value into a nu
21f0: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
2200: 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a  tion if we can.*
2210: 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20  * do so without 
2220: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2230: 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
2240: 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72  ords, if the str
2250: 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b  ing.** looks lik
2260: 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76  e a number, conv
2270: 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75  ert it into a nu
2280: 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65  mber.  If it doe
2290: 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69  s not.** look li
22a0: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61  ke a number, lea
22b0: 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a  ve it alone..*/.
22c0: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
22d0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
22e0: 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69  (Mem *pRec){.  i
22f0: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
2300: 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  & (MEM_Real|MEM_
2310: 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Int))==0 ){.    
2320: 69 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20  int realnum;.   
2330: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
2340: 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63  ulTerminate(pRec
2350: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
2360: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2370: 0a 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c  .         && sql
2380: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65  ite3IsNumber(pRe
2390: 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20  c->z, &realnum, 
23a0: 70 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20  pRec->enc) ){.  
23b0: 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20      i64 value;. 
23c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
23d0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
23e0: 52 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Rec, SQLITE_UTF8
23f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65  );.      if( !re
2400: 61 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33  alnum && sqlite3
2410: 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20  Atoi64(pRec->z, 
2420: 26 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20  &value) ){.     
2430: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76     pRec->u.i = v
2440: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65  alue;.        Me
2450: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65  mSetTypeFlag(pRe
2460: 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  c, MEM_Int);.   
2470: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2480: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2490: 52 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20  Realify(pRec);. 
24a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
24b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
24c0: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
24d0: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
24e0: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
24f0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
2500: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2510: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2520: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2530: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2540: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2550: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2560: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2570: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
2580: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
2590: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
25a0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
25b0: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
25c0: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
25d0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
25e0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
25f0: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
2600: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2610: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2620: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2630: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2640: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2650: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2660: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2670: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
2680: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
2690: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
26a0: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
26b0: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
26c0: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
26d0: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
26e0: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
26f0: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
2700: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2710: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2720: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2730: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2740: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2750: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2760: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2770: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
2780: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
2790: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
27a0: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
27b0: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  .  if( affinity=
27c0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
27d0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
27e0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
27f0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
2800: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2810: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2820: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2830: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2840: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2850: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2860: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2870: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2880: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2890: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
28a0: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
28b0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
28c0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
28d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28e0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
28f0: 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20   enc);.    }.   
2900: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20   pRec->flags &= 
2910: 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  ~(MEM_Real|MEM_I
2920: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
2930: 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54   affinity!=SQLIT
2940: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20  E_AFF_NONE ){.  
2950: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2960: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2970: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
2980: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
2990: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
29a0: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29b0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
29c0: 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   );.    applyNum
29d0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
29e0: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  c);.    if( pRec
29f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
2a00: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
2a10: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
2a20: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2a30: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2a40: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2a50: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2a60: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2a70: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2a80: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2a90: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2aa0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2ab0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2ac0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2ad0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2ae0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2af0: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2b00: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2b10: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2b20: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2b30: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2b40: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2b50: 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gument..**.** Th
2b60: 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d  is is an EXPERIM
2b70: 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73  ENTAL api and is
2b80: 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
2b90: 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a  ge or removal..*
2ba0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
2bb0: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
2bc0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2bd0: 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d  pVal){.  Mem *pM
2be0: 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b  em = (Mem*)pVal;
2bf0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
2c00: 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20  ffinity(pMem);. 
2c10: 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70   storeTypeInfo(p
2c20: 4d 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Mem, 0);.  retur
2c30: 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a  n pMem->type;.}.
2c40: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
2c50: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
2c60: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
2c70: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
2c80: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
2c90: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
2ca0: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
2cb0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2cc0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2cd0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2ce0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
2cf0: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
2d00: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
2d10: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
2d20: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
2d30: 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
2d40: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57  TE_DEBUG./*.** W
2d50: 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69  rite a nice stri
2d60: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
2d70: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  n of the content
2d80: 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a  s of cell pMem.*
2d90: 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42  * into buffer zB
2da0: 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e  uf, length nBuf.
2db0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2dc0: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
2dd0: 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68  nt(Mem *pMem, ch
2de0: 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61  ar *zBuf){.  cha
2df0: 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a  r *zCsr = zBuf;.
2e00: 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e    int f = pMem->
2e10: 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63  flags;..  static
2e20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
2e30: 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20  st encnames[] = 
2e40: 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22  {"(X)", "(8)", "
2e50: 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29  (16LE)", "(16BE)
2e60: 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d  "};..  if( f&MEM
2e70: 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74  _Blob ){.    int
2e80: 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a   i;.    char c;.
2e90: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
2ea0: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  Dyn ){.      c =
2eb0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
2ec0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2ed0: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
2ee0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2ef0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
2f00: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  tic ){.      c =
2f10: 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65   't';.      asse
2f20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79  rt( (f & (MEM_Dy
2f30: 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  n|MEM_Ephem))==0
2f40: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
2f50: 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20  ( f & MEM_Ephem 
2f60: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27  ){.      c = 'e'
2f70: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2f80: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
2f90: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
2fa0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2fb0: 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d    c = 's';.    }
2fc0: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
2fd0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2fe0: 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20  , "%c", c);.    
2ff0: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3000: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3010: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3020: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3030: 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  %d[", pMem->n);.
3040: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3050: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3060: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
3070: 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e  i<16 && i<pMem->
3080: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  n; i++){.      s
3090: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
30a0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58  100, zCsr, "%02X
30b0: 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a  ", ((int)pMem->z
30c0: 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20  [i] & 0xFF));.  
30d0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
30e0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
30f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
3100: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
3110: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
3120: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
3130: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
3140: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
3150: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
3160: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
3170: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
3180: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
3190: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
31a0: 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65  , "]%s", encname
31b0: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
31c0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
31d0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
31e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
31f0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
3200: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3210: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3220: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3230: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3240: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3250: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3260: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3270: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3280: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3290: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
32a0: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
32b0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
32c0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
32d0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
32e0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
32f0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3300: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3310: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3320: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3330: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3340: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3350: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3360: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3370: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3380: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3390: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
33a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
33b0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
33c0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
33d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
33e0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
33f0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3400: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3410: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3420: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3430: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3440: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3450: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3460: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3470: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3480: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3490: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
34a0: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
34b0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
34c0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
34d0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
34e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
34f0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3500: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3510: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3520: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3530: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3540: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3550: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3560: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3570: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3580: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3590: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
35a0: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
35b0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
35c0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
35d0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
35e0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
35f0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3600: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3610: 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65  nt(FILE *out, Me
3620: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3630: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
3640: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3650: 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20  out, " NULL");. 
3660: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
3670: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3680: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
3690: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
36a0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36b0: 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e   " si:%lld", p->
36c0: 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.i);.  }else if
36d0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
36e0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69  _Int ){.    fpri
36f0: 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c  ntf(out, " i:%ll
3700: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3710: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3720: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3730: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3740: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3750: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3760: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
3770: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
3780: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3790: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
37a0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37b0: 20 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20   " (rowset)");. 
37c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
37d0: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20   zBuf[200];.    
37e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
37f0: 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75  ettyPrint(p, zBu
3800: 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  f);.    fprintf(
3810: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66  out, " ");.    f
3820: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
3830: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
3840: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
3850: 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f  terTrace(FILE *o
3860: 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65  ut, int iReg, Me
3870: 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66  m *p){.  fprintf
3880: 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d  (out, "REG[%d] =
3890: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
38a0: 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20  TracePrint(out, 
38b0: 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p);.  fprintf(ou
38c0: 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  t, "\n");.}.#end
38d0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
38e0: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
38f0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3900: 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63  (R,M) if(p->trac
3910: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3920: 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65  p->trace,R,M).#e
3930: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
3940: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
3950: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
3960: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
3970: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
3980: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
3990: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
39a0: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
39b0: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
39c0: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
39d0: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
39e0: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
39f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3a00: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3a10: 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65  UPT macro define
3a20: 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20  d here looks to 
3a30: 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71  see if the.** sq
3a40: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
3a50: 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65  ) routine has be
3a60: 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69  en called.  If i
3a70: 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e  t has been, then
3a80: 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  .** processing o
3a90: 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  f the VDBE progr
3aa0: 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  am is interrupte
3ab0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  d..**.** This ma
3ac0: 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65  cro added to eve
3ad0: 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ry instruction t
3ae0: 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20  hat does a jump 
3af0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69  in order to.** i
3b00: 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e  mplement a loop.
3b10: 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64    This test used
3b20: 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20   to be on every 
3b30: 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69  single instructi
3b40: 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20  on,.** but that 
3b50: 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65  meant we more te
3b60: 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65  sting that we ne
3b70: 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74  eded.  By only t
3b80: 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c  esting the.** fl
3b90: 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72  ag on jump instr
3ba0: 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20  uctions, we get 
3bb0: 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20  a (small) speed 
3bc0: 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a  improvement..*/.
3bd0: 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f  #define CHECK_FO
3be0: 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20  R_INTERRUPT \.  
3bf0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3c00: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3c10: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3c20: 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66  terrupt;..#ifdef
3c30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74   SQLITE_DEBUG.st
3c40: 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69  atic int fileExi
3c50: 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  sts(sqlite3 *db,
3c60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
3c70: 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d  le){.  int res =
3c80: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
3c90: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66  QLITE_OK;.#ifdef
3ca0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f   SQLITE_TEST.  /
3cb0: 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72  * If we are curr
3cc0: 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f  ently testing IO
3cd0: 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f   errors, then do
3ce0: 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65   not call OsAcce
3cf0: 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73  ss() to.  ** tes
3d00: 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e  t for the presen
3d10: 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69  ce of zFile. Thi
3d20: 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79  s is because any
3d30: 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20   IO error that. 
3d40: 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20   ** occurs here 
3d50: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f  will not be repo
3d60: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
3d70: 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a  e test to fail..
3d80: 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e    */.  extern in
3d90: 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  t sqlite3_io_err
3da0: 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66  or_pending;.  if
3db0: 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  ( sqlite3_io_err
3dc0: 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a  or_pending<=0 ).
3dd0: 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
3de0: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
3df0: 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c  db->pVfs, zFile,
3e00: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45   SQLITE_ACCESS_E
3e10: 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20  XISTS, &res);.  
3e20: 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72  return (res && r
3e30: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d  c==SQLITE_OK);.}
3e40: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3e50: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3e60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3e70: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3e80: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3e90: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3ea0: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3eb0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3ec0: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3ed0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3ee0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3ef0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3f00: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3f10: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3f20: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3f30: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3f40: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3f50: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3f60: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3f70: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3f80: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3f90: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3fa0: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3fb0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3fc0: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3fd0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3fe0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3ff0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
4000: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
4010: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
4020: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4030: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4040: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4050: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4060: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4070: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4080: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
4090: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
40a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
40b0: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
40c0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
40d0: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
40e0: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
40f0: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
4100: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
4110: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
4120: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
4130: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4140: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4150: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4160: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
4170: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
4180: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4190: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
41a0: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
41b0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
41c0: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
41d0: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
41e0: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
41f0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4200: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
4210: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
4220: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
4230: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4240: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4250: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4260: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
4270: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
4280: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
4290: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
42a0: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
42b0: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
42c0: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
42d0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
42e0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
42f0: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
4300: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
4310: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
4320: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
4330: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4340: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4350: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4360: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4370: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
4380: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
4390: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
43a0: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
43b0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
43c0: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
43d0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
43e0: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
43f0: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
4400: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
4410: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4420: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
4430: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4440: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4450: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4460: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
4470: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
4480: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
4490: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
44a0: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
44b0: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
44c0: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
44d0: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
44e0: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
44f0: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
4500: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
4510: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
4520: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
4530: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4540: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4550: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4560: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4570: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4580: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4590: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
45a0: 70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pc;             
45b0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
45c0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
45d0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
45f0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4600: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4610: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4620: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4630: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4640: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4650: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4660: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e  abase */.  u8 en
4670: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4680: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4690: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
46a0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
46b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
46c0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
46d0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
46e0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
46f0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4700: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4710: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4720: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4730: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4740: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4760: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4770: 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72  */.  u8 opProper
4780: 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61  ty;.  int iCompa
4790: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
47a0: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
47b0: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
47c0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
47d0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
47e0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
47f0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
4800: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
4810: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4820: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4830: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
4840: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
4850: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
4860: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
4870: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
4880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
4890: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
48a0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
48b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
48c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
48d0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
48e0: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
48f0: 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  Ops = 0;      /*
4900: 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65   Opcodes execute
4910: 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73  d since progress
4920: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65   callback. */.#e
4930: 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45  ndif.  /*** INSE
4940: 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48  RT STACK UNION H
4950: 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65  ERE ***/..  asse
4960: 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44  rt( p->magic==VD
4970: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20  BE_MAGIC_RUN ); 
4980: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70   /* sqlite3_step
4990: 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73  () verifies this
49a0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
49b0: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
49c0: 4d 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20  MAGIC_BUSY );.  
49d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78  sqlite3VdbeMutex
49e0: 41 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20  ArrayEnter(p);. 
49f0: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
4a00: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
4a10: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4a20: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
4a30: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
4a40: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4a50: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
4a60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4a70: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
4a80: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
4a90: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
4aa0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4ab0: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
4ac0: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d  ITE_BUSY );.  p-
4ad0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4ae0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4af0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4b00: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4b10: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4b20: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4b30: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
4b40: 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  UPT;.  sqlite3Vd
4b50: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4b60: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4b70: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4b80: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4b90: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4ba0: 30 20 0a 20 20 20 26 26 20 28 28 70 2d 3e 64 62  0 .   && ((p->db
4bb0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4bc0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c  _VdbeListing) ||
4bd0: 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20   fileExists(db, 
4be0: 22 76 64 62 65 5f 65 78 70 6c 61 69 6e 22 29 29  "vdbe_explain"))
4bf0: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  .  ){.    int i;
4c00: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4c10: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4c20: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4c30: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4c40: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4c50: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4c60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4c70: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4c80: 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d 29  , i, &p->aOp[i])
4c90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
4ca0: 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c  ( fileExists(db,
4cb0: 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20 29   "vdbe_trace") )
4cc0: 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20 3d  {.    p->trace =
4cd0: 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20 73   stdout;.  }.  s
4ce0: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
4cf0: 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a  alloc();.#endif.
4d00: 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20    for(pc=p->pc; 
4d10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70  rc==SQLITE_OK; p
4d20: 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
4d30: 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d  ( pc>=0 && pc<p-
4d40: 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20  >nOp );.    if( 
4d50: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
4d60: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
4d70: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4d80: 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d  ILE.    origPc =
4d90: 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d   pc;.    start =
4da0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
4db0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70  ;.#endif.    pOp
4dc0: 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63 5d 3b 0a   = &p->aOp[pc];.
4dd0: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
4de0: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
4df0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
4e00: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
4e10: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4e20: 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
4e30: 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
4e40: 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pc==0 ){.       
4e50: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 45 78   printf("VDBE Ex
4e60: 65 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e  ecution Trace:\n
4e70: 22 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ");.        sqli
4e80: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4e90: 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p);.      }.    
4ea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4eb0: 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70  ntOp(p->trace, p
4ec0: 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20  c, pOp);.    }. 
4ed0: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d     if( p->trace=
4ee0: 3d 30 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20  =0 && pc==0 ){. 
4ef0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
4f00: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4f10: 0a 20 20 20 20 20 20 69 66 28 20 66 69 6c 65 45  .      if( fileE
4f20: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
4f30: 73 71 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20  sqltrace") ){.  
4f40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4f50: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4f60: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
4f70: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4f80: 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  oc();.    }.#end
4f90: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4fa0: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4fb0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4fc0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4fd0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4fe0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4ff0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
5000: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
5010: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
5020: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
5030: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5040: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
5050: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
5060: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
5070: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5080: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5090: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
50a0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
50b0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
50c0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
50d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50e0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
50f0: 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68  K.    /* Call th
5100: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5110: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
5120: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
5130: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
5140: 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f      ** of VDBE o
5150: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
5160: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
5170: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
5180: 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71  ion of.    ** sq
5190: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
51a0: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
51b0: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
51c0: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
51d0: 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20  led)..    ** If 
51e0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
51f0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
5200: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5210: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5220: 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72   with.    ** a r
5230: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
5240: 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a  E_ABORT..    */.
5250: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
5260: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69  gress ){.      i
5270: 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  f( db->nProgress
5280: 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70  Ops==nProgressOp
5290: 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  s ){.        int
52a0: 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20 69 66   prc;.        if
52b0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
52c0: 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
52d0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
52e0: 65 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d  e;.        prc =
52f0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
5300: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
5310: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
5320: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
5330: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
5340: 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
5350: 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20       if( prc!=0 
5360: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
5370: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
5380: 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  PT;.          go
5390: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
53a0: 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  lt;.        }.  
53b0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
53c0: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ps = 0;.      }.
53d0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
53e0: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
53f0: 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f  if..    /* Do co
5400: 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72 6f 63 65  mmon setup proce
5410: 73 73 69 6e 67 20 66 6f 72 20 61 6e 79 20 6f 70  ssing for any op
5420: 63 6f 64 65 20 74 68 61 74 20 69 73 20 6d 61 72  code that is mar
5430: 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69 74 68 20  ked.    ** with 
5440: 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c  the "out2-prerel
5450: 65 61 73 65 22 20 74 61 67 2e 20 20 53 75 63 68  ease" tag.  Such
5460: 20 6f 70 63 6f 64 65 73 20 68 61 76 65 20 61 20   opcodes have a 
5470: 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a 20 6f 75  single.    ** ou
5480: 74 70 75 74 20 77 68 69 63 68 20 69 73 20 73 70  tput which is sp
5490: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 50  ecified by the P
54a0: 32 20 70 61 72 61 6d 65 74 65 72 2e 20 20 54 68  2 parameter.  Th
54b0: 65 20 50 32 20 72 65 67 69 73 74 65 72 0a 20 20  e P2 register.  
54c0: 20 20 2a 2a 20 69 73 20 69 6e 69 74 69 61 6c 69    ** is initiali
54d0: 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a 20  zed to a NULL.. 
54e0: 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50 72 6f 70     */.    opProp
54f0: 65 72 74 79 20 3d 20 6f 70 63 6f 64 65 50 72 6f  erty = opcodePro
5500: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5510: 65 5d 3b 0a 20 20 20 20 69 66 28 20 28 6f 70 50  e];.    if( (opP
5520: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5530: 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 29  OUT2_PRERELEASE)
5540: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5550: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5560: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5570: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5580: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
5590: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
55a0: 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2];.      sqlite
55b0: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
55c0: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
55d0: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
55e0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
55f0: 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a     pOut->n = 0;.
5600: 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20      }else. .    
5610: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
5620: 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d  up for opcodes m
5630: 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f  arked with one o
5640: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
5650: 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69      ** combinati
5660: 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65  ons of propertie
5670: 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  s..    **.    **
5680: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20             in1. 
5690: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
56a0: 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20  in1 in2.    **  
56b0: 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32           in1 in2
56c0: 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20   out3.    **    
56d0: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20         in1 in3. 
56e0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72     **.    ** Var
56f0: 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e  iables pIn1, pIn
5700: 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20  2, and pIn3 are 
5710: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
5720: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20   appropriate.   
5730: 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f   ** registers fo
5740: 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61  r inputs.  Varia
5750: 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20  ble pOut points 
5760: 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  to the output re
5770: 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20  gister..    */. 
5780: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5790: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
57a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
57b0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
57c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
57d0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
57e0: 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20  );.      pIn1 = 
57f0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
5800: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5810: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5820: 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66   pIn1);.      if
5830: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5840: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5850: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5860: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5870: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5880: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5890: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d  ;.        pIn2 =
58a0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
58b0: 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  2];.        REGI
58c0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
58d0: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  p2, pIn2);.     
58e0: 20 20 20 2f 2a 20 41 73 20 63 75 72 72 65 6e 74     /* As current
58f0: 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20  ly implemented, 
5900: 69 6e 32 20 69 6d 70 6c 69 65 73 20 6f 75 74 33  in2 implies out3
5910: 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 20 72  .  There is no r
5920: 65 61 73 6f 6e 0a 20 20 20 20 20 20 20 20 2a 2a  eason.        **
5930: 20 77 68 79 20 74 68 69 73 20 68 61 73 20 74 6f   why this has to
5940: 20 62 65 2c 20 69 74 20 6a 75 73 74 20 77 6f 72   be, it just wor
5950: 6b 65 64 20 6f 75 74 20 74 68 61 74 20 77 61 79  ked out that way
5960: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
5970: 65 72 74 28 20 28 6f 70 50 72 6f 70 65 72 74 79  ert( (opProperty
5980: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
5990: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
59a0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
59b0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
59c0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
59d0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4f  em );.        pO
59e0: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
59f0: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65  p->p3];.      }e
5a00: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
5a10: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5a20: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5a30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5a40: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5a50: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
5a60: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
5a70: 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn3 = &p->aMem[
5a80: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
5a90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5aa0: 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b  (pOp->p3, pIn3);
5ab0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
5ac0: 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72  se if( (opProper
5ad0: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  ty & OPFLG_IN2)!
5ae0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5af0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5b00: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5b10: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5b20: 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20 3d 20  );.      pIn2 = 
5b30: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
5b40: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5b50: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5b60: 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73   pIn2);.    }els
5b70: 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74  e if( (opPropert
5b80: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  y & OPFLG_IN3)!=
5b90: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5ba0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5bb0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5bc0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5bd0: 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26  ;.      pIn3 = &
5be0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
5bf0: 3b 0a 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 7d 0a 0a 20 20  pIn3);.    }..  
5c20: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
5c30: 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a  pcode ){../*****
5c40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c80: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74  ********.** What
5c90: 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61   follows is a ma
5ca0: 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61  ssive switch sta
5cb0: 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63  tement where eac
5cc0: 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74  h case implement
5cd0: 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20  s a.** separate 
5ce0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
5cf0: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5d00: 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f  ne.  If we follo
5d10: 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69  w the usual.** i
5d20: 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65  ndentation conve
5d30: 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73  ntions, each cas
5d40: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5d50: 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73  nted by 6 spaces
5d60: 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69  .  But.** that i
5d70: 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65  s a lot of waste
5d80: 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c  d space on the l
5d90: 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20  eft margin.  So 
5da0: 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a  the code within.
5db0: 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74  ** the switch st
5dc0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65  atement will bre
5dd0: 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69  ak with conventi
5de0: 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d  on and be flush-
5df0: 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a  left. Another.**
5e00: 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69   big comment (si
5e10: 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e  milar to this on
5e20: 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65  e) will mark the
5e30: 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f   point in the co
5e40: 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74  de where.** we t
5e50: 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74  ransition back t
5e60: 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  o normal indenta
5e70: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
5e80: 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61  formatting of ea
5e90: 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72  ch case is impor
5ea0: 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66  tant.  The makef
5eb0: 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a  ile for SQLite.*
5ec0: 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20  * generates two 
5ed0: 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73  C files "opcodes
5ee0: 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73  .h" and "opcodes
5ef0: 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  .c" by scanning 
5f00: 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f  this.** file loo
5f10: 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74  king for lines t
5f20: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
5f30: 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20  case OP_".  The 
5f40: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a  opcodes.h files.
5f50: 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65  ** will be fille
5f60: 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20  d with #defines 
5f70: 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65  that give unique
5f80: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
5f90: 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64  to each.** opcod
5fa0: 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65  e and the opcode
5fb0: 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c  s.c file is fill
5fc0: 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79  ed with an array
5fd0: 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72   of strings wher
5fe0: 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67  e.** each string
5ff0: 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   is the symbolic
6000: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
6010: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f  rresponding opco
6020: 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63  de.  If the.** c
6030: 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ase statement is
6040: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
6050: 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  omment of the fo
6060: 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e  rm "/# same as .
6070: 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63  .. #/".** that c
6080: 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  omment is used t
6090: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
60a0: 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65  particular value
60b0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a   of the opcode..
60c0: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77  **.** Other keyw
60d0: 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d  ords in the comm
60e0: 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ent that follows
60f0: 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75   each case are u
6100: 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72  sed to.** constr
6110: 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e  uct the OPFLG_IN
6120: 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20  ITIALIZER value 
6130: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
6140: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
6150: 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69  ]..** Keywords i
6160: 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32  nclude: in1, in2
6170: 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72  , in3, out2_prer
6180: 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75  elease, out2, ou
6190: 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20  t3.  See.** the 
61a0: 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63  mkopcodeh.awk sc
61b0: 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f  ript for additio
61c0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
61d0: 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61  .**.** Documenta
61e0: 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20  tion about VDBE 
61f0: 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72  opcodes is gener
6200: 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67  ated by scanning
6210: 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f   this file.** fo
6220: 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20  r lines of that 
6230: 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a  contain "Opcode:
6240: 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e  ".  That line an
6250: 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  d all subsequent
6260: 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65  .** comment line
6270: 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68  s are used in th
6280: 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
6290: 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20  the opcode.html 
62a0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a  documentation.**
62b0: 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d   file..**.** SUM
62c0: 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  MARY:.**.**     
62d0: 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d  Formatting is im
62e0: 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70  portant to scrip
62f0: 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69  ts that scan thi
6300: 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44  s file..**     D
6310: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
6320: 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e  om the formattin
6330: 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c  g style currentl
6340: 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a  y in use..**.***
6350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20  **********/../* 
63a0: 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20  Opcode:  Goto * 
63b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
63c0: 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  n unconditional 
63d0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
63e0: 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  P2..** The next 
63f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63  instruction exec
6400: 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a  uted will be .**
6410: 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65   the one at inde
6420: 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65  x P2 from the be
6430: 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68  ginning of.** th
6440: 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61  e program..*/.ca
6450: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
6460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
6470: 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52  p */.  CHECK_FOR
6480: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63  _INTERRUPT;.  pc
6490: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
64a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
64b0: 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31  pcode:  Gosub P1
64c0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
64d0: 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
64e0: 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72  t address onto r
64f0: 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e  egister P1.** an
6500: 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61  d then jump to a
6510: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61  ddress P2..*/.ca
6520: 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20  se OP_Gosub: {  
6530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
6540: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6550: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
6560: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
6570: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
6580: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
6590: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
65a0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
65b0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
65c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
65d0: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
65e0: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
65f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6600: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
6610: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
6620: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6630: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
6640: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
6650: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
6660: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
6670: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6680: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a  register P1..*/.
6690: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
66a0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
66b0: 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
66c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
66d0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
66e0: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
66f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6700: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
6710: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53   * * * *.**.** S
6720: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
6730: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
6740: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6750: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
6760: 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20  P_Yield: {      
6770: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
6780: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
6790: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
67a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
67b0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
67c0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
67d0: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
67e0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
67f0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6800: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6810: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6820: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6830: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6840: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
6850: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
6860: 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
6870: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
6880: 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e 55  P3.  If is is NU
6890: 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69  LL then Halt usi
68a0: 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  ng.** parameter 
68b0: 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61  P1, P2, and P4 a
68c0: 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61  s if this were a
68d0: 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f   Halt instructio
68e0: 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61  n.  If the.** va
68f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
6900: 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P3 is not NULL, 
6910: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
6920: 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  e is a no-op..*/
6930: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
6940: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
6950: 6e 33 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  n3 */.  if( (pIn
6960: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
6970: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
6980: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
6990: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
69a0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
69b0: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
69c0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69  4 *.**.** Exit i
69d0: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
69e0: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
69f0: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
6a00: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
6a10: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
6a20: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
6a30: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
6a40: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
6a50: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
6a60: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
6a70: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
6a80: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
6a90: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
6aa0: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
6ab0: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
6ac0: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
6ad0: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
6ae0: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
6af0: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
6b00: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
6b10: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
6b20: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
6b30: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
6b40: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
6b50: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
6b60: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
6b70: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
6b80: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
6b90: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
6ba0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
6bb0: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
6bc0: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
6bd0: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
6be0: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
6bf0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
6c00: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
6c10: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
6c20: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
6c30: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
6c40: 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c  There is an impl
6c50: 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22  ied "Halt 0 0 0"
6c60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73   instruction ins
6c70: 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
6c80: 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72  y end of.** ever
6c90: 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61  y program.  So a
6ca0: 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c   jump past the l
6cb0: 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ast instruction 
6cc0: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  of the program.*
6cd0: 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  * is the same as
6ce0: 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e   executing Halt.
6cf0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6d00: 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  : {.  if( pOp->p
6d10: 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  1==SQLITE_OK && 
6d20: 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
6d30: 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62   /* Halt the sub
6d40: 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e  -program. Return
6d50: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
6d60: 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f  parent frame. */
6d70: 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a  .    VdbeFrame *
6d80: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
6d90: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
6da0: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
6db0: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
6dc0: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
6dd0: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
6de0: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
6df0: 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65  .    pc = sqlite
6e00: 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72  3VdbeFrameRestor
6e10: 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69  e(pFrame);.    i
6e20: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49  f( pOp->p2==OE_I
6e30: 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f  gnore ){.      /
6e40: 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63  * Instruction pc
6e50: 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72   is the OP_Progr
6e60: 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  am that invoked 
6e70: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
6e80: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
6e90: 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64  tly being halted
6ea0: 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e 73 74  . If the p2 inst
6eb0: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ruction of this 
6ec0: 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a  OP_Halt.      **
6ed0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
6ee0: 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65  set to OE_Ignore
6ef0: 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70  , then the sub-p
6f00: 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69  rogram is throwi
6f10: 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49  ng.      ** an I
6f20: 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e  GNORE exception.
6f30: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75   In this case ju
6f40: 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72 65 73  mp to the addres
6f50: 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20  s specified.    
6f60: 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f    ** as the p2 o
6f70: 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50  f the calling OP
6f80: 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20  _Program.  */.  
6f90: 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b      pc = p->aOp[
6fa0: 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  pc].p2-1;.    }.
6fb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6fc0: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
6fd0: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
6fe0: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
6ff0: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b  2;.  p->pc = pc;
7000: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
7010: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
7020: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7030: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
7040: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a  pOp->p4.z);.  }.
7050: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7060: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
7070: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7080: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
7090: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
70a0: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
70b0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
70c0: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
70d0: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
70e0: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
70f0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
7100: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
7110: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
7120: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
7130: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7140: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7150: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
7160: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
7170: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
7180: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
7190: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
71a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
71b0: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
71c0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
71d0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
71e0: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
71f0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
7210: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
7220: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7230: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7240: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
7250: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
7260: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
7270: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
7280: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a   * P2 * P4 *.**.
7290: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
72a0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
72b0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
72c0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
72d0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
72e0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
72f0: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
7300: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7310: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7320: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
7330: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
7340: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
7350: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
7360: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
7370: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7380: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
7390: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
73a0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
73b0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
73c0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
73d0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
73e0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
73f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
7400: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7410: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
7420: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
7430: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
7440: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
7450: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7460: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7470: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7480: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7490: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
74a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
74b0: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
74c0: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e   *.**.** P4 poin
74d0: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
74e0: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
74f0: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7500: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7510: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
7520: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
7530: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
7540: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
7550: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
7560: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
7570: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
7580: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7590: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
75a0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
75b0: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
75c0: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
75d0: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
75e0: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
75f0: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7600: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7610: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
7620: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
7630: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7640: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7650: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
7660: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
7670: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7680: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7690: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
76a0: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
76b0: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
76c0: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
76d0: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
76e0: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
76f0: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7700: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
7710: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
7720: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
7730: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
7740: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
7750: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
7760: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
7770: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
7780: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7790: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
77a0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
77b0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
77c0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
77d0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
77e0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
77f0: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7800: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
7810: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
7820: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
7830: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
7840: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
7850: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
7860: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
7870: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7880: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7890: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
78a0: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
78b0: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
78c0: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
78d0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  4 *.**.** The st
78e0: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
78f0: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
7900: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
7910: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7920: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
7930: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
7940: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7950: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7960: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
7970: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
7980: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
7990: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
79a0: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
79b0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
79c0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
79d0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
79e0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
79f0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7a00: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7a10: 4e 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Null * P2 * * *.
7a20: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
7a30: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
7a40: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7a50: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
7a60: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7a70: 65 61 73 65 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  ease */.  break;
7a80: 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
7a90: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a  Blob P1 P2 * P4.
7aa0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
7ab0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
7ac0: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
7ad0: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
7ae0: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
7af0: 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72 75   P2. This instru
7b00: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64  ction is not cod
7b10: 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62  ed directly.** b
7b20: 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20  y the compiler. 
7b30: 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f 6d  Instead, the com
7b40: 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65 63  piler layer spec
7b50: 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48  ifies.** an OP_H
7b60: 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77  exBlob opcode, w
7b70: 69 74 68 20 74 68 65 20 68 65 78 20 73 74 72 69  ith the hex stri
7b80: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
7b90: 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62  n of.** the blob
7ba0: 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70 63   as P4. This opc
7bb0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
7bc0: 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62  ed to an OP_Blob
7bd0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74 69  .** the first ti
7be0: 6d 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  me it is execute
7bf0: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  d..*/.case OP_Bl
7c00: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
7c10: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7c20: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7c30: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
7c40: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
7c50: 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  H );.  sqlite3Vd
7c60: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7c70: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
7c80: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
7c90: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7ca0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7cb0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7cc0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7cd0: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
7ce0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
7cf0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
7d00: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
7d10: 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 50 31  nd parameters P1
7d20: 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f 20 72  ..P1+P3-1 into r
7d30: 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32 2e 2e  egisters.** P2..
7d40: 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20 49  P2+P3-1..**.** I
7d50: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
7d60: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
7d70: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
7d80: 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e  in P4 and P3==1.
7d90: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
7da0: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
7db0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
7dc0: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
7dd0: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
7de0: 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
7df0: 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62 6c 65       /* Variable
7e00: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
7e10: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
7e20: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
7e30: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 20 20  to copy to */.  
7e40: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
7e50: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 61   /* Number of va
7e60: 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  lues left to cop
7e70: 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72  y */.  Mem *pVar
7e80: 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65  ;       /* Value
7e90: 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72   being transferr
7ea0: 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20 70 4f  ed */..  p1 = pO
7eb0: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70 32 20  p->p1 - 1;.  p2 
7ec0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20 3d  = pOp->p2;.  n =
7ed0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
7ee0: 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 2b  rt( p1>=0 && p1+
7ef0: 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  n<=p->nVar );.  
7f00: 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20 26 26  assert( p2>=1 &&
7f10: 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65 6d   p2+n-1<=p->nMem
7f20: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
7f30: 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f  p->p4.z==0 || pO
7f40: 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 0a 20 20 77  p->p3==1 );..  w
7f50: 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b  hile( n-- > 0 ){
7f60: 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  .    pVar = &p->
7f70: 61 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20  aVar[p1++];.    
7f80: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
7f90: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
7fa0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
7fb0: 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
7fc0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7fd0: 70 32 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c 69 74  p2++];.    sqlit
7fe0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
7ff0: 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a  External(pOut);.
8000: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
8010: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
8020: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
8030: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
8040: 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pVar, MEM_Static
8050: 29 3b 0a 20 20 20 20 55 50 44 41 54 45 5f 4d 41  );.    UPDATE_MA
8060: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8070: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
8090: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
80a0: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61  *.** Move the va
80b0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
80c0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65   P1..P1+P3-1 ove
80d0: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
80e0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e  ers P2..P2+P3-1.
80f0: 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e    Registers P1..
8100: 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c  P1+P1-1 are.** l
8110: 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55  eft holding a NU
8120: 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  LL.  It is an er
8130: 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72  ror for register
8140: 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50   ranges.** P1..P
8150: 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50  1+P3-1 and P2..P
8160: 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61  2+P3-1 to overla
8170: 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  p..*/.case OP_Mo
8180: 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d  ve: {.  char *zM
8190: 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64  alloc;   /* Hold
81a0: 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72  ing variable for
81b0: 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72   allocated memor
81c0: 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  y */.  int n;   
81d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
81e0: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
81f0: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
8200: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
8210: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
8220: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
8230: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
8240: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
8250: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
8260: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
8270: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
8280: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
8290: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
82a0: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
82b0: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
82c0: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
82d0: 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn1 = &p->aMem
82e0: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
82f0: 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77  p->aMem[p2];.  w
8300: 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20  hile( n-- ){.   
8310: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
8320: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  p->aMem[p->nMem]
8330: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8340: 70 49 6e 31 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70  pIn1<=&p->aMem[p
8350: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a  ->nMem] );.    z
8360: 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a  Malloc = pOut->z
8370: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74  Malloc;.    pOut
8380: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
8390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
83a0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
83b0: 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61  );.    pIn1->zMa
83c0: 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a  lloc = zMalloc;.
83d0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
83e0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
83f0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
8400: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pOut++;.  }.  br
8410: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8420: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20  e: Copy P1 P2 * 
8430: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
8440: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8450: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
8460: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
8470: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8480: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
8490: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
84a0: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
84b0: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
84c0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
84d0: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
84e0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
84f0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20  e OP_Copy: {    
8500: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
8510: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8520: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
8530: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
8540: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
8550: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
8560: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
8570: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
8580: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
8590: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
85a0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
85b0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
85c0: 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
85d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
85e0: 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
85f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8600: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
8610: 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  *.**.** Make a s
8620: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
8630: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
8640: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
8650: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
8660: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
8670: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
8680: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
8690: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
86a0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
86b0: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
86c0: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
86d0: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
86e0: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
86f0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
8700: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
8710: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
8720: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
8730: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
8740: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
8750: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
8760: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
8770: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
8780: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
8790: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
87a0: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
87b0: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
87c0: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
87d0: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
87e0: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
87f0: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
8800: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
8810: 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
8820: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
8830: 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  1);.  assert( pO
8840: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
8850: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
8860: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
8870: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
8880: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
8890: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
88a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
88b0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
88c0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
88d0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
88e0: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
88f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8900: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
8910: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
8920: 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
8930: 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31  rs P1 through P1
8940: 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20  +P2-1 contain a 
8950: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a  single row of.**
8960: 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f   results. This o
8970: 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65  pcode causes the
8980: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
8990: 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74  call to terminat
89a0: 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c  e.** with an SQL
89b0: 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63  ITE_ROW return c
89c0: 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20  ode and it sets 
89d0: 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  up the sqlite3_s
89e0: 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  tmt.** structure
89f0: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65   to provide acce
8a00: 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31  ss to the top P1
8a10: 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72   values as the r
8a20: 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f  esult.** row..*/
8a30: 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52  .case OP_ResultR
8a40: 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  ow: {.  Mem *pMe
8a50: 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73  m;.  int i;.  as
8a60: 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c  sert( p->nResCol
8a70: 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a  umn==pOp->p2 );.
8a80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8a90: 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  1>0 );.  assert(
8aa0: 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32   pOp->p1+pOp->p2
8ab0: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a  <=p->nMem+1 );..
8ac0: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
8ad0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
8ae0: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
8af0: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
8b00: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
8b10: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
8b20: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
8b30: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
8b40: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
8b50: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
8b60: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
8b70: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
8b80: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
8b90: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
8ba0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
8bb0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
8bc0: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
8bd0: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
8be0: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
8bf0: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
8c00: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8c10: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
8c20: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
8c30: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
8c40: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8c50: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
8c60: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
8c70: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
8c80: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
8c90: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
8ca0: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
8cb0: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
8cc0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
8cd0: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
8ce0: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
8cf0: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
8d00: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
8d10: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
8d20: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
8d30: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
8d40: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
8d50: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
8d60: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
8d70: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
8d80: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
8d90: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
8da0: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
8db0: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
8dc0: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
8dd0: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
8de0: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
8df0: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
8e00: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
8e10: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
8e20: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
8e30: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
8e40: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
8e50: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69  NT_RELEASE);.  i
8e60: 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
8e70: 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62  ITE_OK) ){.    b
8e80: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
8e90: 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65  Invalidate all e
8ea0: 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20  phemeral cursor 
8eb0: 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20  row caches */.  
8ec0: 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70  p->cacheCtr = (p
8ed0: 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c  ->cacheCtr + 2)|
8ee0: 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  1;..  /* Make su
8ef0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
8f00: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
8f10: 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69  w are \000 termi
8f20: 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68  nated.  ** and h
8f30: 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20  ave an assigned 
8f40: 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c  type.  The resul
8f50: 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65  ts are de-epheme
8f60: 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20  ralized as.  ** 
8f70: 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a  as side effect..
8f80: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
8f90: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 70  >pResultSet = &p
8fa0: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
8fb0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
8fc0: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
8fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
8fe0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
8ff0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65  m[i]);.    store
9000: 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69  TypeInfo(&pMem[i
9010: 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
9020: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
9030: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
9040: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
9050: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
9060: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
9070: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
9080: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
9090: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
90a0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
90b0: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
90c0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
90d0: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
90e0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
90f0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
9100: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
9110: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
9120: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
9130: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
9140: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9150: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9160: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
9170: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
9180: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
9190: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
91a0: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
91b0: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
91c0: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
91d0: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
91e0: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
91f0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
9200: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
9210: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
9220: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
9230: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
9240: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
9250: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
9260: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
9270: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
9280: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
9290: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
92a0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ;..  assert( pIn
92b0: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
92c0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
92d0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
92e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
92f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9300: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9310: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
9320: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
9330: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
9340: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
9350: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
9360: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
9370: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9380: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
9390: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
93a0: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
93b0: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
93c0: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
93d0: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
93e0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
93f0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
9400: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
9410: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
9420: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
9430: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
9440: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
9450: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
9460: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
9470: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
9480: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
9490: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
94a0: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
94b0: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
94c0: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
94d0: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
94e0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
94f0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
9500: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
9510: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
9520: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
9530: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9540: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9550: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9560: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9570: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
9580: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
9590: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
95a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
95b0: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
95c0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
95d0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
95e0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
95f0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9600: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9610: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9620: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9630: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
9640: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a  P2 P3 * *.**.**.
9650: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
9660: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9670: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9680: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9690: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
96a0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
96b0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
96c0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
96d0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
96e0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
96f0: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
9700: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9710: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
9720: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9730: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
9740: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9750: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9760: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9770: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9780: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9790: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
97a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
97b0: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
97c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
97d0: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
97e0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
97f0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9800: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9810: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9820: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9830: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
9840: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
9850: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
9860: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
9870: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9880: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
9890: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
98a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
98b0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
98c0: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
98d0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
98e0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
98f0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
9900: 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20  ger division of 
9910: 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
9920: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
9930: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9940: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
9950: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9960: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
9970: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9980: 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P2 is zero the 
9990: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
99a0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
99b0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
99c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
99d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
99e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
99f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9a00: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
9a10: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9a20: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
9a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9a40: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
9a50: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9a60: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
9a70: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
9a80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
9a90: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
9aa0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
9ab0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
9ac0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9ad0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
9ae0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9af0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
9b00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9b10: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
9b20: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
9b30: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
9b40: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
9b50: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
9b60: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
9b70: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
9b80: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9b90: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9ba0: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
9bb0: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9bc0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9bd0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9be0: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
9bf0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
9c00: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
9c10: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
9c20: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
9c30: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9c40: 0a 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ..  applyNumeric
9c50: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a  Affinity(pIn1);.
9c60: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9c70: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9c80: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
9c90: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
9ca0: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
9cb0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
9cc0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9cd0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9ce0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
9cf0: 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67  ags & pIn2->flag
9d00: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45  s & MEM_Int)==ME
9d10: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20  M_Int ){.    iA 
9d20: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
9d30: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
9d40: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
9d50: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
9d60: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
9d70: 20 20 20 20 20 20 20 69 42 20 2b 3d 20 69 41 3b         iB += iA;
9d80: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9d90: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
9da0: 72 61 63 74 3a 20 20 20 20 69 42 20 2d 3d 20 69  ract:    iB -= i
9db0: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
9dc0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
9dd0: 6c 74 69 70 6c 79 3a 20 20 20 20 69 42 20 2a 3d  ltiply:    iB *=
9de0: 20 69 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   iA;       break
9df0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9e00: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
9e10: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
9e20: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9e30: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9e40: 20 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e        /* Dividin
9e50: 67 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f  g the largest po
9e60: 73 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20  ssible negative 
9e70: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28  64-bit integer (
9e80: 31 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20  1<<63) by .     
9e90: 20 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73     ** -1 returns
9ea0: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20   an integer too 
9eb0: 6c 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69  large to store i
9ec0: 6e 20 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d  n a 64-bit data-
9ed0: 74 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20  type. On.       
9ee0: 20 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65   ** some archite
9ef0: 63 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75  ctures, the valu
9f00: 65 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28  e overflows to (
9f10: 31 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72  1<<63). On other
9f20: 73 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20  s,.        ** a 
9f30: 53 49 47 46 50 45 20 69 73 20 69 73 73 75 65 64  SIGFPE is issued
9f40: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
9f50: 73 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c  statement normal
9f60: 69 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20 20  izes this.      
9f70: 20 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f    ** behavior so
9f80: 20 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74   that all archit
9f90: 65 63 74 75 72 65 73 20 62 65 68 61 76 65 20 61  ectures behave a
9fa0: 73 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20  s if integer .  
9fb0: 20 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f        ** overflo
9fc0: 77 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20  w occurred..    
9fd0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
9fe0: 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d  f( iA==-1 && iB=
9ff0: 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
a000: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a010: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
a020: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a030: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
a040: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
a050: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a060: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a070: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a080: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a090: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
a0a0: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
a0b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a0c0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
a0d0: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
a0e0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a0f0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
a100: 73 65 7b 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  se{.    rA = sql
a110: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
a120: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
a130: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
a140: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
a150: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
a160: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
a170: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
a180: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
a190: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a1a0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
a1b0: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
a1c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a1d0: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
a1e0: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
a1f0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
a200: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
a210: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
a220: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
a230: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
a240: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
a250: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
a260: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
a270: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a280: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a290: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
a2a0: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
a2b0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a2c0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
a2d0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
a2e0: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
a2f0: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
a300: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
a310: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a320: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a330: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
a340: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
a350: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
a360: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
a370: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a380: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
a390: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
a3a0: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
a3b0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a3c0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
a3d0: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42      pOut->r = rB
a3e0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a3f0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
a400: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66  eal);.    if( (f
a410: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
a420: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
a430: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
a440: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
a450: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
a460: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
a470: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
a480: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a490: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
a4a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a4b0: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20  de: CollSeq * * 
a4c0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
a4d0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f   pointer to a Co
a4e0: 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66  llSeq struct. If
a4f0: 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   the next call t
a500: 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  o a user functio
a510: 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74  n.** or aggregat
a520: 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47  e calls sqlite3G
a530: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c  etFuncCollSeq(),
a540: 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20   this collation 
a550: 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a  sequence will.**
a560: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68   be returned. Th
a570: 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68  is is used by th
a580: 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29  e built-in min()
a590: 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c  , max() and null
a5a0: 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  if().** function
a5b0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  s..**.** The int
a5c0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
a5d0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
a5e0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
a5f0: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
a600: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
a610: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
a620: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
a630: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
a640: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
a650: 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f  ublicly, only to
a660: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
a670: 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e  defined in func.
a680: 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  c..*/.case OP_Co
a690: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
a6a0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
a6b0: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
a6c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a6d0: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
a6e0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
a6f0: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
a700: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
a710: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a720: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
a730: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
a740: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
a750: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
a760: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
a770: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
a780: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
a790: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
a7a0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
a7b0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
a7c0: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
a7d0: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
a7e0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
a7f0: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
a800: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
a810: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
a820: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
a830: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
a840: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
a850: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
a860: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
a870: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
a880: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
a890: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
a8a0: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
a8b0: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
a8c0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
a8d0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
a8e0: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
a8f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
a900: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
a910: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
a920: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
a930: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
a940: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
a950: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
a960: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
a970: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
a980: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
a990: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
a9a0: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
a9b0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
a9c0: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
a9d0: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
a9e0: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
a9f0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
aa00: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
aa10: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
aa20: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
aa30: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
aa40: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20  al || n==0 );.. 
aa50: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
aa60: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
aa70: 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65  Op->p2+n<=p->nMe
aa80: 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  m+1) );.  assert
aa90: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
aaa0: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
aab0: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72  p->p2+n );.  pAr
aac0: 67 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  g = &p->aMem[pOp
aad0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
aae0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
aaf0: 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ++){.    apVal[i
ab00: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 73 74  ] = pArg;.    st
ab10: 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 41 72 67  oreTypeInfo(pArg
ab20: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
ab30: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
ab40: 70 4f 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a  pOp->p2, pArg);.
ab50: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
ab60: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
ab70: 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70  UNCDEF || pOp->p
ab80: 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55  4type==P4_VDBEFU
ab90: 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  NC );.  if( pOp-
aba0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
abb0: 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70  DEF ){.    ctx.p
abc0: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
abd0: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56  Func;.    ctx.pV
abe0: 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d  dbeFunc = 0;.  }
abf0: 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56  else{.    ctx.pV
ac00: 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46  dbeFunc = (VdbeF
ac10: 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64  unc*)pOp->p4.pVd
ac20: 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e  beFunc;.    ctx.
ac30: 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  pFunc = ctx.pVdb
ac40: 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20  eFunc->pFunc;.  
ac50: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
ac60: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
ac70: 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
ac80: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
ac90: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 63 74 78 2e  pOp->p3];.  ctx.
aca0: 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
acb0: 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d  ll;.  ctx.s.db =
acc0: 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65   db;.  ctx.s.xDe
acd0: 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  l = 0;.  ctx.s.z
ace0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f  Malloc = 0;..  /
acf0: 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
ad00: 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
ad10: 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
ad20: 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
ad30: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
ad40: 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ctx.s so in case
ad50: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
ad60: 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20  on can use.  ** 
ad70: 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
ad80: 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
ad90: 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
ada0: 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20  ng a new one..  
adb0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
adc0: 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20  MemMove(&ctx.s, 
add0: 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  pOut);.  MemSetT
ade0: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
adf0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
ae00: 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
ae10: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
ae20: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
ae30: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
ae40: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
ae50: 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  p->aOp );.    as
ae60: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
ae70: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
ae80: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
ae90: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
aea0: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
aeb0: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
aec0: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
aed0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
aee0: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
aef0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
af00: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a 63  to_misuse;.  (*c
af10: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
af20: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
af30: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
af40: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
af50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
af60: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
af70: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
af80: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
af90: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
afa0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
afb0: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
afc0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
afd0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
afe0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
aff0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
b000: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
b010: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
b020: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
b030: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
b040: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
b050: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
b060: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
b070: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
b080: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
b090: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
b0a0: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e  .    **.    ** N
b0b0: 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52 65  ote: Maybe MemRe
b0c0: 6c 65 61 73 65 28 29 20 73 68 6f 75 6c 64 20 62  lease() should b
b0d0: 65 20 63 61 6c 6c 65 64 20 69 66 20 73 71 6c 69  e called if sqli
b0e0: 74 65 33 53 61 66 65 74 79 4f 6e 28 29 0a 20 20  te3SafetyOn().  
b0f0: 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f 20    ** fails also 
b100: 28 74 68 65 20 69 66 28 2e 2e 2e 29 20 73 74 61  (the if(...) sta
b110: 74 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20 42  tement above). B
b120: 75 74 20 69 66 20 70 65 6f 70 6c 65 20 61 72 65  ut if people are
b130: 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e 67  .    ** misusing
b140: 20 73 71 6c 69 74 65 2c 20 74 68 65 79 20 68 61   sqlite, they ha
b150: 76 65 20 62 69 67 67 65 72 20 70 72 6f 62 6c 65  ve bigger proble
b160: 6d 73 20 74 68 61 6e 20 61 20 6c 65 61 6b 65 64  ms than a leaked
b170: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
b180: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b190: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
b1a0: 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
b1b0: 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  m;.  }..  /* If 
b1c0: 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64 61  any auxiliary da
b1d0: 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  ta functions hav
b1e0: 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79  e been called by
b1f0: 20 74 68 69 73 20 75 73 65 72 20 66 75 6e 63 74   this user funct
b200: 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69  ion,.  ** immedi
b210: 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64  ately call the d
b220: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e  estructor for an
b230: 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c  y non-static val
b240: 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ues..  */.  if( 
b250: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b  ctx.pVdbeFunc ){
b260: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b270: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 63 74  DeleteAuxData(ct
b280: 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70  x.pVdbeFunc, pOp
b290: 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e  ->p1);.    pOp->
b2a0: 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63  p4.pVdbeFunc = c
b2b0: 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  tx.pVdbeFunc;.  
b2c0: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
b2d0: 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d  P4_VDBEFUNC;.  }
b2e0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
b2f0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
b300: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
b310: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
b320: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
b330: 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
b340: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
b350: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
b360: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
b370: 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20  ext(&ctx.s));.  
b380: 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
b390: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  or;.  }..  /* Co
b3a0: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
b3b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
b3c0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
b3d0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
b3e0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63  hangeEncoding(&c
b3f0: 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  tx.s, encoding);
b400: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
b410: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78  mMove(pOut, &ctx
b420: 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  .s);.  if( sqlit
b430: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
b440: 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  pOut) ){.    got
b450: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
b460: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
b470: 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
b480: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
b490: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
b4a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b4b0: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
b4c0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
b4d0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
b4e0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
b4f0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b500: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b510: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b520: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b530: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b540: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b550: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b560: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
b570: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
b580: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
b590: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
b5a0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
b5b0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
b5c0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
b5d0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b5e0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b5f0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b600: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b610: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b620: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
b630: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b640: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
b650: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
b660: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
b670: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
b680: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
b690: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
b6a0: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
b6b0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
b6c0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b6d0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b6e0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b6f0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b700: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b710: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
b720: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
b730: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b740: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b750: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b760: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
b770: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
b780: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
b790: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
b7a0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
b7b0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
b7c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b7d0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b7e0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b7f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b800: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
b810: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
b820: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b830: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
b840: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b850: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b870: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
b880: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b890: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b8a0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
b8b0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b8c0: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
b8d0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b8e0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
b8f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b900: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
b910: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b920: 2a 2f 0a 20 20 69 36 34 20 61 3b 0a 20 20 69 36  */.  i64 a;.  i6
b930: 34 20 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e  4 b;..  if( (pIn
b940: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b950: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b960: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b970: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b980: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b990: 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69  ;.  }.  a = sqli
b9a0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
b9b0: 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c  pIn2);.  b = sql
b9c0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b9d0: 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68  (pIn1);.  switch
b9e0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b9f0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74  .    case OP_Bit
ba00: 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62  And:      a &= b
ba10: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
ba20: 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20   case OP_BitOr: 
ba30: 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20        a |= b;   
ba40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
ba50: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
ba60: 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72    a <<= b;    br
ba70: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
ba80: 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  :  assert( pOp->
ba90: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74  opcode==OP_Shift
baa0: 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20  Right );.       
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bac0: 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72    a >>= b;    br
bad0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  eak;.  }.  pOut-
bae0: 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53  >u.i = a;.  MemS
baf0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
bb00: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
bb10: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bb20: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
bb30: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64  * * *.** .** Add
bb40: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
bb50: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
bb60: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
bb70: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
bb80: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
bb90: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
bba0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
bbb0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
bbc0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
bbd0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
bbf0: 6e 31 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  n1 */.  sqlite3V
bc00: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
bc10: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
bc20: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
bc30: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bc40: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
bc50: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
bc60: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
bc70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bc80: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
bc90: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
bca0: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
bcb0: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
bcc0: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
bcd0: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
bce0: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
bcf0: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
bd00: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
bd10: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
bd20: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
bd30: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
bd40: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
bd50: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
bd60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
bd70: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
bd80: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
bd90: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
bda0: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
bdb0: 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  g);.  if( (pIn1-
bdc0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
bdd0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
bde0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
bdf0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
be00: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
be10: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
be20: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
be30: 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70  se{.      pc = p
be40: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
be50: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d  }.  }else{.    M
be60: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
be70: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
be80: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
be90: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66   Opcode: RealAff
bea0: 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a  inity P1 * * * *
beb0: 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .**.** If regist
bec0: 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69  er P1 holds an i
bed0: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69  nteger convert i
bee0: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
bef0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
bf00: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
bf10: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
bf20: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
bf30: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
bf40: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
bf50: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
bf60: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
bf70: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
bf80: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
bf90: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
bfa0: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
bfb0: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
bfc0: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
bfd0: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
bfe0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
bff0: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
c000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
c010: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31  n1 */.  if( pIn1
c020: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
c030: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
c040: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
c050: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c060: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
c070: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f  LITE_OMIT_CAST./
c080: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74  * Opcode: ToText
c090: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c0a0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c0b0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c0c0: 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20   to be text..** 
c0d0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c0e0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
c0f0: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
c100: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c110: 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74  ivalent of print
c120: 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65  f().  Blob value
c130: 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20  s are unchanged 
c140: 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72  and.** are after
c150: 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74  wards simply int
c160: 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74  erpreted as text
c170: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
c180: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
c190: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
c1a0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
c1b0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
c1c0: 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20  P_ToText: {     
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c1e0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45  same as TK_TO_TE
c1f0: 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  XT, in1 */.  if(
c200: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c210: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
c220: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
c230: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
c240: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
c250: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
c260: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
c270: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
c280: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
c290: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
c2a0: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
c2b0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
c2c0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
c2d0: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
c2e0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
c2f0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c300: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
c310: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
c320: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
c330: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
c340: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
c350: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
c360: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
c370: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c380: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c390: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
c3a0: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
c3b0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
c3c0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
c3d0: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
c3e0: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
c3f0: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
c400: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
c410: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
c420: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
c430: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
c440: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c450: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c460: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c470: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c480: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c4b0: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
c4c0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c4d0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
c4e0: 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ak;.  if( (pIn1-
c4f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
c500: 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  b)==0 ){.    app
c510: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
c520: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
c530: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
c540: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
c550: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
c560: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
c570: 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ed );.    MemSet
c580: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
c590: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73  EM_Blob);.  }els
c5a0: 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  e{.    pIn1->fla
c5b0: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65  gs &= ~(MEM_Type
c5c0: 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b  Mask&~MEM_Blob);
c5d0: 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
c5e0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
c5f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c600: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
c610: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
c620: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c630: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c640: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
c650: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
c660: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
c670: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
c680: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
c690: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
c6a0: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c6b0: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
c6c0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c6d0: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
c6e0: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
c6f0: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
c700: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
c710: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c720: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c730: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c740: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c750: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c760: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
c770: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
c780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c790: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
c7a0: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  IC, in1 */.  if(
c7b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c7c0: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e  (MEM_Null|MEM_In
c7d0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
c7e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
c7f0: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
c800: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c810: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
c820: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
c830: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
c840: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
c850: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c860: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c870: 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67 65   P1 be an intege
c880: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
c890: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
c8a0: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
c8b0: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
c8c0: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
c8d0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
c8e0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
c8f0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
c900: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
c910: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c920: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
c930: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
c940: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
c950: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c960: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c970: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c980: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c990: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c9a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
c9b0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
c9c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c9d0: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
c9e0: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
c9f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
ca00: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
ca10: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
ca20: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
ca30: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
ca40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ca50: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
ca60: 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20  ToReal P1 * * * 
ca70: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
ca80: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ca90: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66  ter P1 to be a f
caa0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
cab0: 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20  mber..** If The 
cac0: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
cad0: 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63  ly an integer, c
cae0: 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66  onvert it..** If
caf0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
cb00: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
cb10: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
cb20: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
cb30: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
cb40: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
cb50: 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e  d store 0.0 if n
cb60: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
cb70: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
cb80: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
cb90: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
cba0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
cbb0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
cbc0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
cbd0: 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  oReal: {        
cbe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cbf0: 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c  e as TK_TO_REAL,
cc00: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
cc10: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
cc20: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
cc30: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
cc40: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
cc50: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
cc60: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
cc70: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
cc80: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
cc90: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43  P3 P4 P5.**.** C
cca0: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
ccb0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
ccc0: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
ccd0: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
cce0: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
ccf0: 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a  ress P2.  .**.**
cd00: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
cd10: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
cd20: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
cd30: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
cd40: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
cd50: 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
cd60: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
cd70: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
cd80: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
cd90: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
cda0: 75 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  u if either oper
cdb0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
cdc0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
cdd0: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
cde0: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
cdf0: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
ce00: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
ce10: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
ce20: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
ce30: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
ce40: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
ce50: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
ce60: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
ce70: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
ce80: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
ce90: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
cea0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
ceb0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
cec0: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
ced0: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
cee0: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
cef0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
cf00: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
cf10: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
cf20: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
cf30: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
cf40: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
cf50: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
cf60: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
cf70: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
cf80: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
cf90: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
cfa0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
cfb0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
cfc0: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
cfd0: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
cfe0: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
cff0: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
d000: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
d010: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
d020: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
d030: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
d040: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
d050: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
d060: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
d070: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
d080: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
d090: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
d0a0: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
d0b0: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
d0c0: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
d0d0: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
d0e0: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
d0f0: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
d100: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
d110: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
d120: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
d130: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
d140: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
d150: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
d160: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
d170: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
d180: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
d190: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d1a0: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
d1b0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
d1c0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
d1d0: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
d1e0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
d1f0: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
d200: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
d210: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
d220: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
d230: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
d240: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
d250: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
d260: 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  er P2..*/./* Opc
d270: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
d280: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d290: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d2a0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d2b0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d2c0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d2d0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
d2e0: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
d2f0: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
d300: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
d310: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
d320: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d330: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
d340: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
d350: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
d360: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
d370: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
d380: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
d390: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
d3a0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
d3b0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
d3c0: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
d3d0: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
d3e0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
d3f0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
d400: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
d410: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
d420: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
d430: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
d440: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
d450: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
d460: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
d470: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
d480: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
d490: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
d4a0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
d4b0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
d4c0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
d4d0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d4e0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d4f0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
d500: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
d510: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d520: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d530: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d540: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d550: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d560: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d570: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d580: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
d590: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
d5a0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
d5b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d5c0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
d5d0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
d5e0: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
d5f0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d600: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d610: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d620: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d630: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d640: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
d650: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
d660: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
d670: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
d680: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
d690: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
d6a0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d6b0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
d6c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
d6d0: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
d6e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d6f0: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
d700: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
d710: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
d720: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d730: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
d740: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
d750: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
d760: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d770: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
d780: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
d790: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
d7a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d7b0: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
d7c0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
d7d0: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
d7e0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d7f0: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
d800: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
d810: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d820: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
d830: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d840: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
d850: 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
d860: 61 72 20 61 66 66 69 6e 69 74 79 3b 0a 0a 20 20  ar affinity;..  
d870: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
d880: 61 67 73 7c 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  ags|pIn3->flags;
d890: 0a 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d 45  ..  if( flags&ME
d8a0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
d8b0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
d8c0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
d8d0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
d8e0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  ways NULL..    *
d8f0: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
d900: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
d910: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
d920: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a   is set..    */.
d930: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
d940: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
d950: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   ){.      pOut =
d960: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
d970: 32 5d 3b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74  2];.      MemSet
d980: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
d990: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
d9a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d9b0: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
d9c0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
d9d0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
d9e0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
d9f0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
da00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
da10: 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69  k;.  }..  affini
da20: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
da30: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
da40: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29    if( affinity )
da50: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
da60: 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69  ity(pIn1, affini
da70: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
da80: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
da90: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
daa0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
dab0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
dac0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
dad0: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
dae0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
daf0: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
db00: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
db10: 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  ;.  ExpandBlob(p
db20: 49 6e 31 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  In1);.  ExpandBl
db30: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 72 65 73 20  ob(pIn3);.  res 
db40: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
db50: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
db60: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
db70: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
db80: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
db90: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
dba0: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
dbb0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
dbc0: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
dbd0: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
dbe0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
dbf0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
dc00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
dc10: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
dc20: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
dc30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
dc40: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
dc50: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
dc60: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
dc70: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
dc80: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
dc90: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
dca0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
dcb0: 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
dcc0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
dcd0: 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74  >p2];.    MemSet
dce0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
dcf0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
dd00: 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
dd10: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
dd20: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
dd30: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73  .  }else if( res
dd40: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
dd50: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
dd60: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
dd70: 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
dd80: 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
dd90: 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
dda0: 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
ddb0: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
ddc0: 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72  tor to be the ar
ddd0: 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ray.** of intege
dde0: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20  rs in P4..**.** 
ddf0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
de00: 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e  is only valid un
de10: 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f  til the next OP_
de20: 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f  Permutation, OP_
de30: 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48  Compare,.** OP_H
de40: 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c  alt, or OP_Resul
de50: 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79  tRow.  Typically
de60: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
de70: 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72  ion should occur
de80: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  .** immediately 
de90: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f  prior to the OP_
dea0: 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65  Compare..*/.case
deb0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
dec0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
ded0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
dee0: 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
def0: 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
df00: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
df10: 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61  p->p4.ai;.  brea
df20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
df30: 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
df40: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  3 P4 *.**.** Com
df50: 70 61 72 65 20 74 6f 20 76 65 63 74 6f 72 73 20  pare to vectors 
df60: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
df70: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
df80: 50 33 2d 31 29 20 28 61 6c 6c 20 74 68 69 73 0a  P3-1) (all this.
df90: 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61 6e 64 20  ** one "A") and 
dfa0: 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
dfb0: 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
dfc0: 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
dfd0: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
dfe0: 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
dff0: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
e000: 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
e010: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
e020: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
e030: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
e040: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
e050: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
e060: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
e070: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
e080: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
e090: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
e0a0: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
e0b0: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
e0c0: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
e0d0: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
e0e0: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
e0f0: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
e100: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
e110: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
e120: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
e130: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
e140: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
e150: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
e160: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
e170: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
e180: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
e190: 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
e1a0: 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
e1b0: 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
e1c0: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
e1d0: 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
e1e0: 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
e1f0: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
e200: 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
e210: 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
e220: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
e230: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
e240: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
e250: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
e260: 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
e270: 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
e280: 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
e290: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
e2a0: 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
e2b0: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  1 = pOp->p1;.  a
e2c0: 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
e2d0: 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  1+n<=p->nMem+1 )
e2e0: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
e2f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e 30  ;.  assert( p2>0
e300: 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p2+n<=p->nMe
e310: 6d 2b 31 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  m+1 );.  for(i=0
e320: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
e330: 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20   idx = aPermute 
e340: 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20  ? aPermute[i] : 
e350: 69 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  i;.    REGISTER_
e360: 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 70  TRACE(p1+idx, &p
e370: 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b  ->aMem[p1+idx]);
e380: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
e390: 41 43 45 28 70 32 2b 69 64 78 2c 20 26 70 2d 3e  ACE(p2+idx, &p->
e3a0: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20  aMem[p2+idx]);. 
e3b0: 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65     assert( i<pKe
e3c0: 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b  yInfo->nField );
e3d0: 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
e3e0: 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
e3f0: 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
e400: 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
e410: 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
e420: 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
e430: 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d 5b 70  mpare(&p->aMem[p
e440: 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d 65 6d  1+idx], &p->aMem
e450: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
e460: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
e470: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
e480: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
e490: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
e4a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
e4b0: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
e4c0: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
e4d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
e4e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
e4f0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
e500: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
e510: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
e520: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
e530: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
e540: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
e550: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
e560: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
e570: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
e580: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
e590: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
e5a0: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
e5b0: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
e5c0: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
e5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e5e0: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
e5f0: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
e600: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
e610: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
e620: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
e630: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
e640: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
e650: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
e660: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
e670: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
e680: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
e690: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
e6a0: 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
e6b0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
e6c0: 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
e6d0: 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
e6e0: 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
e6f0: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
e700: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
e710: 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
e720: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
e730: 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
e740: 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
e750: 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
e760: 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
e770: 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
e780: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
e790: 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
e7a0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
e7b0: 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
e7c0: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
e7d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
e7e0: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
e7f0: 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
e800: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
e810: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
e820: 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
e830: 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
e840: 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
e850: 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
e860: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
e870: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
e880: 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
e890: 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
e8a0: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
e8b0: 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e8d0: 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
e8e0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
e8f0: 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
e900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e910: 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
e920: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
e930: 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
e940: 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
e950: 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
e960: 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
e970: 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
e980: 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
e990: 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
e9a0: 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
e9b0: 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
e9c0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
e9d0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
e9e0: 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65      v1 = 2;.  }e
e9f0: 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71  lse{.    v1 = sq
ea00: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
ea10: 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn1)!=0;.  }.
ea20: 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67    if( pIn2->flag
ea30: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
ea40: 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65      v2 = 2;.  }e
ea50: 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71  lse{.    v2 = sq
ea60: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
ea70: 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn2)!=0;.  }.
ea80: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
ea90: 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
eaa0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
eab0: 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
eac0: 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
ead0: 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
eae0: 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
eaf0: 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
eb00: 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
eb10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
eb20: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
eb30: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
eb40: 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
eb50: 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
eb60: 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
eb70: 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28 20  +v2];.  }.  if( 
eb80: 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
eb90: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
eba0: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
ebb0: 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
ebc0: 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
ebd0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
ebe0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
ebf0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ec00: 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
ec10: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
ec20: 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
ec30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
ec40: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
ec50: 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
ec60: 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
ec70: 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
ec80: 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
ec90: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
eca0: 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
ecb0: 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
ecc0: 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
ecd0: 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ecf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
ed00: 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d   in1 */.  pOut =
ed10: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
ed20: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
ed30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
ed40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ed50: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ed60: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
ed70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ed80: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21  SetInt64(pOut, !
ed90: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
eda0: 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
edb0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
edc0: 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
edd0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
ede0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
edf0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
ee00: 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
ee10: 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
ee20: 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
ee30: 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
ee40: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
ee50: 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
ee60: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
ee70: 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
ee80: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
ee90: 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
eea0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
eeb0: 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 20 2a  TK_BITNOT, in1 *
eec0: 2f 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  /.  pOut = &p->a
eed0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
eee0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
eef0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
ef00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ef10: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
ef20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
ef30: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
ef40: 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65  64(pOut, ~sqlite
ef50: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
ef60: 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1));.  }.  brea
ef70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ef80: 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
ef90: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
efa0: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
efb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
efc0: 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
efd0: 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  e is.** is consi
efe0: 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
eff0: 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
f000: 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
f010: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
f020: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
f030: 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50  ke the jump if P
f040: 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a  3 is true..*/./*
f050: 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
f060: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
f070: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
f080: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
f090: 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
f0a0: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
f0b0: 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
f0c0: 64 20 74 72 75 65 20 69 66 20 69 74 20 68 61 73  d true if it has
f0d0: 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
f0e0: 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
f0f0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
f100: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
f110: 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50  ke the jump if P
f120: 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61  3 is true..*/.ca
f130: 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
f140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
f150: 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
f160: 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
f170: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
f180: 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
f190: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
f1a0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
f1b0: 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
f1c0: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
f1d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
f1e0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
f1f0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
f200: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
f210: 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
f220: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
f230: 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
f240: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
f250: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
f260: 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
f270: 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20   }.  if( c ){.  
f280: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
f290: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f2a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
f2b0: 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
f2c0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
f2d0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
f2e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
f2f0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
f300: 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
f310: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f320: 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
f330: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28  , in1 */.  if( (
f340: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f350: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
f360: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
f370: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
f380: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
f390: 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
f3a0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
f3b0: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
f3c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f3d0: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
f3e0: 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
f3f0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
f400: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
f410: 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
f420: 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
f430: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
f440: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)==0 ){.    pc 
f450: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
f460: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
f470: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
f480: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f490: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
f4a0: 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
f4b0: 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
f4c0: 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
f4d0: 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
f4e0: 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
f4f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
f500: 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
f510: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
f520: 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
f530: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
f540: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
f550: 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
f560: 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
f570: 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
f580: 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
f590: 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
f5a0: 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
f5b0: 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
f5c0: 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
f5d0: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
f5e0: 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
f5f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
f600: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
f610: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
f620: 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
f630: 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
f640: 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
f650: 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
f660: 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
f670: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
f680: 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
f690: 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
f6a0: 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
f6b0: 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
f6c0: 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
f6d0: 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
f6e0: 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
f6f0: 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
f700: 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
f710: 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
f720: 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
f730: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
f740: 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
f750: 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
f760: 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
f770: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
f780: 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
f790: 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
f7a0: 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
f7b0: 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 63  is bit set..*/.c
f7c0: 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
f7d0: 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69  .  u32 payloadSi
f7e0: 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ze;   /* Number 
f7f0: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
f800: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
f810: 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
f820: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
f830: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
f840: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
f850: 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61          /* P1 va
f860: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
f870: 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  e */.  int p2;  
f880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
f890: 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
f8a0: 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
f8b0: 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
f8c0: 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
f8d0: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65  r */.  char *zRe
f8e0: 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  c;        /* Poi
f8f0: 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65  nter to complete
f900: 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a   record-data */.
f910: 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
f920: 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
f930: 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
f940: 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20  2 *aType;       
f950: 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c   /* aType[i] hol
f960: 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  ds the numeric t
f970: 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20  ype of the i-th 
f980: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
f990: 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
f9a0: 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
f9b0: 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
f9c0: 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
f9d0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
f9e0: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
f9f0: 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* number of fie
fa00: 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
fa10: 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  d */.  int len; 
fa20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
fa30: 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
fa40: 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
fa50: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
fa60: 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
fa70: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
fa80: 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  unter */.  char 
fa90: 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *zData;       /*
faa0: 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
fab0: 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
fac0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  d */.  Mem *pDes
fad0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
fae0: 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
faf0: 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
fb00: 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
fb10: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
fb20: 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
fb30: 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
fb40: 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20  */.  u8 *zIdx;  
fb50: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
fb60: 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a   into header */.
fb70: 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20    u8 *zEndHdr;  
fb80: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
fb90: 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
fba0: 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
fbb0: 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
fbc0: 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
fbd0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
fbe0: 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
fbf0: 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
fc00: 20 6f 66 66 73 65 74 2e 20 20 36 34 20 62 69 74   offset.  64 bit
fc10: 73 20 6e 65 65 64 65 64 20 74 6f 20 63 61 74 63  s needed to catc
fc20: 68 20 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a 20 20  h overflow */.  
fc30: 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20  int szHdr;      
fc40: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
fc50: 65 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69  e header size fi
fc60: 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20  eld at start of 
fc70: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
fc80: 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
fc90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
fca0: 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
fcb0: 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ata */.  Mem *pR
fcc0: 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
fcd0: 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
fce0: 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20   register */... 
fcf0: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
fd00: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
fd10: 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65   pC = 0;.  memse
fd20: 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
fd30: 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
fd40: 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
fd50: 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
fd60: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
fd70: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
fd80: 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61  .  pDest = &p->a
fd90: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
fda0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
fdb0: 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
fdc0: 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20  .  zRec = 0;..  
fdd0: 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65  /* This block se
fde0: 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
fdf0: 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62  payloadSize to b
fe00: 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  e the total numb
fe10: 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73  er of.  ** bytes
fe20: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   in the record..
fe30: 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69    **.  ** zRec i
fe40: 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
fe50: 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
fe60: 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
fe70: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  t is available..
fe80: 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74    ** The complet
fe90: 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73  e record text is
fea0: 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c   always availabl
feb0: 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
fec0: 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  les.  ** If the 
fed0: 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
fee0: 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   in a cursor, th
fef0: 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
ff00: 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68  d text.  ** migh
ff10: 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69  t be available i
ff20: 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20  n the  pC->aRow 
ff30: 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69  cache.  Or it mi
ff40: 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a  ght not be..  **
ff50: 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20   If the data is 
ff60: 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52  unavailable,  zR
ff70: 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ec is set to NUL
ff80: 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20  L..  **.  ** We 
ff90: 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  also compute the
ffa0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
ffb0: 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ns in the record
ffc0: 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a  .  For cursors,.
ffd0: 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20    ** the number 
ffe0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74  of columns is st
fff0: 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65  ored in the Vdbe
10000 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c  Cursor.nField el
10010 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43  ement..  */.  pC
10020 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b   = p->apCsr[p1];
10030 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
10040 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
10050 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
10060 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
10070 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
10080 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43  0 );.#endif.  pC
10090 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
100a0 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
100b0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
100c0 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
100d0 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
100e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
100f0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
10100 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
10110 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
10120 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
10130 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
10140 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
10150 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
10160 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
10170 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
10180 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
10190 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
101a0 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
101b0 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
101c0 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
101d0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
101e0 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73  ndex ){.      as
101f0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
10200 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
10210 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
10220 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
10230 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
10240 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b  &payloadSize64);
10250 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
10260 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
10270 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
10280 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
10290 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
102a0 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74  /.      /* sqlit
102b0 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
102c0 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
102d0 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
102e0 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  act the.      **
102f0 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73   payload size, s
10300 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  o it is impossib
10310 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69  le for payloadSi
10320 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20  ze64 to be.     
10330 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20   ** larger than 
10340 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20  32 bits. */.    
10350 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f    assert( (paylo
10360 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54  adSize64 & SQLIT
10370 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34  E_MAX_U32)==(u64
10380 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29  )payloadSize64 )
10390 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  ;.      payloadS
103a0 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f  ize = (u32)paylo
103b0 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65  adSize64;.    }e
103c0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
103d0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
103e0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
103f0 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20  sr) );.      rc 
10400 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
10410 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  taSize(pCrsr, &p
10420 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
10430 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
10440 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
10450 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
10460 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d  ot fail */.    }
10470 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
10480 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
10490 30 20 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20  0 ){.    pReg = 
104a0 26 70 2d 3e 61 4d 65 6d 5b 70 43 2d 3e 70 73 65  &p->aMem[pC->pse
104b0 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20  udoTableReg];.  
104c0 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
104d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
104e0 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64 53   );.    payloadS
104f0 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ize = pReg->n;. 
10500 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e     zRec = pReg->
10510 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  z;.    pC->cache
10520 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70  Status = (pOp->p
10530 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  5&OPFLAG_CLEARCA
10540 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54 41  CHE) ? CACHE_STA
10550 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74 72  LE : p->cacheCtr
10560 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61  ;.    assert( pa
10570 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20  yloadSize==0 || 
10580 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c  zRec!=0 );.  }el
10590 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69  se{.    /* Consi
105a0 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62  der the row to b
105b0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61  e NULL */.    pa
105c0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20  yloadSize = 0;. 
105d0 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c   }..  /* If payl
105e0 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68  oadSize is 0, th
105f0 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20  en just store a 
10600 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61  NULL */.  if( pa
10610 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a  yloadSize==0 ){.
10620 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73      assert( pDes
10630 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  t->flags&MEM_Nul
10640 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70  l );.    goto op
10650 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d  _column_out;.  }
10660 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
10670 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
10680 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b  IT_LENGTH]>=0 );
10690 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69  .  if( payloadSi
106a0 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
106b0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
106c0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
106d0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
106e0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   }..  nField = p
106f0 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73  C->nField;.  ass
10700 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29  ert( p2<nField )
10710 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64  ;..  /* Read and
10720 20 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65   parse the table
10730 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20   header.  Store 
10740 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
10750 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e  he parse.  ** in
10760 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  to the record he
10770 61 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64  ader cache field
10780 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e  s of the cursor.
10790 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20  .  */.  aType = 
107a0 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28  pC->aType;.  if(
107b0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
107c0 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
107d0 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70  .    aOffset = p
107e0 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65  C->aOffset;.  }e
107f0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
10800 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61 69  aType);.    avai
10810 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61  l = 0;.    pC->a
10820 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  Offset = aOffset
10830 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64   = &aType[nField
10840 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  ];.    pC->paylo
10850 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64  adSize = payload
10860 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61  Size;.    pC->ca
10870 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
10880 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a  acheCtr;..    /*
10890 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20   Figure out how 
108a0 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69  many bytes are i
108b0 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  n the header */.
108c0 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a      if( zRec ){.
108d0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52        zData = zR
108e0 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ec;.    }else{. 
108f0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49       if( pC->isI
10900 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20  ndex ){.        
10910 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
10920 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
10930 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
10940 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  l);.      }else{
10950 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
10960 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
10970 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
10980 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
10990 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49      }.      /* I
109a0 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74  f KeyFetch()/Dat
109b0 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64  aFetch() managed
109c0 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69   to get the enti
109d0 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20  re payload,.    
109e0 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61    ** save the pa
109f0 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d  yload in the pC-
10a00 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68  >aRow cache.  Th
10a10 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20  at will save us 
10a20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61  from.      ** ha
10a30 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64  ving to make add
10a40 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f  itional calls to
10a50 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65   fetch the conte
10a60 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20  nt portion of.  
10a70 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
10a80 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
10a90 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3e    assert( avail>
10aa0 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
10ab0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28  payloadSize <= (
10ac0 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20  u32)avail ){.   
10ad0 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74       zRec = zDat
10ae0 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  a;.        pC->a
10af0 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61  Row = (u8*)zData
10b00 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
10b10 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
10b20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
10b30 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f   }.    /* The fo
10b40 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69  llowing assert i
10b50 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61  s true in all ca
10b60 73 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a  ses accept when.
10b70 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62      ** the datab
10b80 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65  ase file has bee
10b90 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65  n corrupted exte
10ba0 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20  rnally..    **  
10bb0 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d    assert( zRec!=
10bc0 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c  0 || avail>=payl
10bd0 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c  oadSize || avail
10be0 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a  >=9 ); */.    sz
10bf0 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74 33  Hdr = getVarint3
10c00 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66  2((u8*)zData, of
10c10 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d  fset);..    /* M
10c20 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
10c30 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
10c40 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
10c50 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
10c60 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20  .    ** Do this 
10c70 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
10c80 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
10c90 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
10ca0 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65  **.    ** Type e
10cb0 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
10cc0 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
10cd0 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
10ce0 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
10cf0 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20  ** types use so 
10d00 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20  much data space 
10d10 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f  that there can o
10d20 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20  nly be 4096 and 
10d30 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65  32 of.    ** the
10d40 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  m, respectively.
10d50 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d    So the maximum
10d60 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72   header length r
10d70 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20  esults from a.  
10d80 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65    ** 3-byte type
10d90 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
10da0 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36   maximum of 3276
10db0 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74  8 columns plus t
10dc0 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72  hree.    ** extr
10dd0 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20  a bytes for the 
10de0 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74  header length it
10df0 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b  self.  32768*3 +
10e00 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20   3 = 98307..    
10e10 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65  */.    if( offse
10e20 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20 20  t > 98307 ){.   
10e30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
10e40 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
10e50 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
10e60 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  n_out;.    }..  
10e70 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20    /* Compute in 
10e80 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  len the number o
10e90 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
10ea0 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64 20  we need to read 
10eb0 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20  in order.    ** 
10ec0 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74 79  to get nField ty
10ed0 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66 73  pe values.  offs
10ee0 65 74 20 69 73 20 61 6e 20 75 70 70 65 72 20 62  et is an upper b
10ef0 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20 42  ound on this.  B
10f00 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64  ut.    ** nField
10f10 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69 66   might be signif
10f20 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68 61  icantly less tha
10f30 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62 65  n the true numbe
10f40 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20  r of columns.   
10f50 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c 65   ** in the table
10f60 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63 61  , and in that ca
10f70 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d  se, 5*nField+3 m
10f80 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72 20  ight be smaller 
10f90 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20  than offset..   
10fa0 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20 6d   ** We want to m
10fb0 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f  inimize len in o
10fc0 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  rder to limit th
10fd0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65  e size of the me
10fe0 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f  mory.    ** allo
10ff0 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c  cation, especial
11000 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70 74 20  ly if a corrupt 
11010 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61  database file ha
11020 73 20 63 61 75 73 65 64 20 6f 66 66 73 65 74 0a  s caused offset.
11030 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65      ** to be ove
11040 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20 69  rsized. Offset i
11050 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38 33  s limited to 983
11060 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20 39  07 above.  But 9
11070 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20 2a  8307 might.    *
11080 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20 52  * still exceed R
11090 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c  obson memory all
110a0 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f  ocation limits o
110b0 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61  n some configura
110c0 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e  tions..    ** On
110d0 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 63 61   systems that ca
110e0 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c 61  nnot tolerate la
110f0 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
11100 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35  ations, nField*5
11110 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c  +3.    ** will l
11120 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73 6d  ikely be much sm
11130 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69 65  aller since nFie
11140 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62  ld will likely b
11150 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20 20  e less than.    
11160 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54 68  ** 20 or so.  Th
11170 69 73 20 69 6e 73 75 72 65 73 20 74 68 61 74 20  is insures that 
11180 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c  Robson memory al
11190 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20  location limits 
111a0 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65  are.    ** not e
111b0 78 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f 72  xceeded even for
111c0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
111d0 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a  e files..    */.
111e0 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64      len = nField
111f0 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28 20  *5 + 3;.    if( 
11200 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73 65  len > (int)offse
11210 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f  t ) len = (int)o
11220 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54  ffset;..    /* T
11230 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72  he KeyFetch() or
11240 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f   DataFetch() abo
11250 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20  ve are fast and 
11260 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74  will get the ent
11270 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ire.    ** recor
11280 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74  d header in most
11290 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65   cases.  But the
112a0 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67  y will fail to g
112b0 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a  et the complete.
112c0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65      ** record he
112d0 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f  ader if the reco
112e0 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e  rd header does n
112f0 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67  ot fit on a sing
11300 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69  le page.    ** i
11310 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57  n the B-Tree.  W
11320 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73  hen that happens
11330 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62  , use sqlite3Vdb
11340 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
11350 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72  to.    ** acquir
11360 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  e the complete h
11370 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20  eader text..    
11380 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63  */.    if( !zRec
11390 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b   && avail<len ){
113a0 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  .      sMem.flag
113b0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65  s = 0;.      sMe
113c0 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20  m.db = 0;.      
113d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
113e0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
113f0 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e  sr, 0, len, pC->
11400 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
11410 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
11420 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11430 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11440 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
11450 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
11460 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20  em.z;.    }.    
11470 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29  zEndHdr = (u8 *)
11480 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20  &zData[len];.   
11490 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a   zIdx = (u8 *)&z
114a0 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20  Data[szHdr];..  
114b0 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65    /* Scan the he
114c0 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74 20  ader and use it 
114d0 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61  to fill in the a
114e0 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73  Type[] and aOffs
114f0 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61  et[].    ** arra
11500 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69  ys.  aType[i] wi
11510 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74  ll contain the t
11520 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ype integer for 
11530 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20  the i-th.    ** 
11540 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73  column and aOffs
11550 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  et[i] will conta
11560 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  in the offset fr
11570 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
11580 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
11590 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61  ecord to the sta
115a0 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 66  rt of the data f
115b0 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  or the i-th colu
115c0 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 66  mn.    */.    of
115d0 66 73 65 74 36 34 20 3d 20 6f 66 66 73 65 74 3b  fset64 = offset;
115e0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
115f0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20  nField; i++){.  
11600 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e      if( zIdx<zEn
11610 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20  dHdr ){.        
11620 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33  aOffset[i] = (u3
11630 32 29 6f 66 66 73 65 74 36 34 3b 0a 20 20 20 20  2)offset64;.    
11640 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56      zIdx += getV
11650 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54  arint32(zIdx, aT
11660 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ype[i]);.       
11670 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c   offset64 += sql
11680 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
11690 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b  peLen(aType[i]);
116a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
116b0 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73        /* If i is
116c0 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c   less that nFiel
116d0 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72  d, then there ar
116e0 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e  e less fields in
116f0 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a   this.        **
11700 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74   record than Set
11710 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63  NumColumns indic
11720 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20 63  ated there are c
11730 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20  olumns in the.  
11740 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20        ** table. 
11750 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20 66  Set the offset f
11760 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c  or any extra col
11770 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  umns not present
11780 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74   in.        ** t
11790 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20  he record to 0. 
117a0 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20  This tells code 
117b0 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61  below to store a
117c0 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a   NULL.        **
117d0 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65   instead of dese
117e0 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75  rializing a valu
117f0 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
11800 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
11810 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
11820 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
11830 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
11840 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
11850 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66  Mem);.    sMem.f
11860 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
11870 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68  ..    /* If we h
11880 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65  ave read more he
11890 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77  ader data than w
118a0 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  as contained in 
118b0 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20  the header,.    
118c0 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  ** or if the end
118d0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
118e0 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
118f0 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
11900 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f   the.    ** reco
11910 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e  rd, or if the en
11920 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
11930 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
11940 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64  e before the end
11950 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
11960 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20  ecord (when all 
11970 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c  fields present),
11980 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65   then we must be
11990 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a   dealing .    **
119a0 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20   with a corrupt 
119b0 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f  database..    */
119c0 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e  .    if( (zIdx >
119d0 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f 66 66   zEndHdr)|| (off
119e0 73 65 74 36 34 20 3e 20 70 61 79 6c 6f 61 64 53  set64 > payloadS
119f0 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28 7a 49  ize).     || (zI
11a00 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dx==zEndHdr && o
11a10 66 66 73 65 74 36 34 21 3d 28 75 36 34 29 70 61  ffset64!=(u64)pa
11a20 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20  yloadSize) ){.  
11a30 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
11a40 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
11a50 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11a60 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
11a70 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  }..  /* Get the 
11a80 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69  column informati
11a90 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  on. If aOffset[p
11aa0 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  2] is non-zero, 
11ab0 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72  then .  ** deser
11ac0 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65  ialize the value
11ad0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
11ae0 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
11af0 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74   is zero,.  ** t
11b00 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
11b10 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20  t enough fields 
11b20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  in the record to
11b30 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a   satisfy the.  *
11b40 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74  * request.  In t
11b50 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68  his case, set th
11b60 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20  e value NULL or 
11b70 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20  to P4 if P4 is. 
11b80 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   ** a pointer to
11b90 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20   a Mem object.. 
11ba0 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65   */.  if( aOffse
11bb0 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73  t[p2] ){.    ass
11bc0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
11bd0 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  OK );.    if( zR
11be0 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ec ){.      sqli
11bf0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
11c00 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29  eExternal(pDest)
11c10 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
11c20 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
11c30 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74   *)&zRec[aOffset
11c40 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d  [p2]], aType[p2]
11c50 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
11c60 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse{.      len =
11c70 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
11c80 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b  alTypeLen(aType[
11c90 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  p2]);.      sqli
11ca0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
11cb0 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20  sMem, pDest);.  
11cc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
11cd0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
11ce0 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
11cf0 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73  p2], len, pC->is
11d00 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
11d10 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
11d20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
11d30 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11d40 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
11d50 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
11d60 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
11d70 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
11d80 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65  u8*)zData, aType
11d90 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20  [p2], pDest);.  
11da0 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65    }.    pDest->e
11db0 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
11dc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
11dd0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
11de0 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MEM ){.      sql
11df0 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
11e00 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
11e10 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
11e20 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c  Static);.    }el
11e30 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
11e40 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
11e50 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d  EM_Null );.    }
11e60 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65  .  }..  /* If we
11e70 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
11e80 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
11e90 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
11ea0 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  n the.  ** sqlit
11eb0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
11ec0 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29  ee() call above)
11ed0 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63   then transfer c
11ee0 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20  ontrol of that. 
11ef0 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
11f00 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
11f10 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73  over to the pDes
11f20 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a  t structure..  *
11f30 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20  * This prevents 
11f40 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20  a memory copy.. 
11f50 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a   */.  if( sMem.z
11f60 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73  Malloc ){.    as
11f70 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
11f80 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
11f90 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
11fa0 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
11fb0 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  yn) );.    asser
11fc0 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
11fd0 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
11fe0 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
11ff0 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
12000 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
12010 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
12020 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
12030 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
12040 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44  MEM_Term;.    pD
12050 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b  est->z = sMem.z;
12060 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  .    pDest->zMal
12070 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
12080 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  oc;.  }..  rc = 
12090 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
120a0 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73  keWriteable(pDes
120b0 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  t);..op_column_o
120c0 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
120d0 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
120e0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
120f0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
12100 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
12110 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
12120 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
12130 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
12140 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
12150 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
12160 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
12170 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
12180 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
12190 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
121a0 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
121b0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
121c0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
121d0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
121e0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
121f0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
12200 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
12210 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
12220 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
12230 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61  ffinity: {.  cha
12240 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
12250 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
12260 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
12270 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
12280 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
12290 65 67 69 73 74 65 72 20 74 6f 20 77 68 69 63 68  egister to which
122a0 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
122b0 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  ty */.  Mem *pLa
122c0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 61  st;        /* La
122d0 73 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 77  st register to w
122e0 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66  hich to apply af
122f0 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20  finity */.  Mem 
12300 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 2f  *pRec;         /
12310 2a 20 43 75 72 72 65 6e 74 20 72 65 67 69 73 74  * Current regist
12320 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69  er */..  zAffini
12330 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
12340 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61    pData0 = &p->a
12350 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12360 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
12370 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 66 6f  pOp->p2-1];.  fo
12380 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
12390 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
123a0 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42  ++){.    ExpandB
123b0 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61  lob(pRec);.    a
123c0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
123d0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
123e0 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
123f0 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ing);.  }.  brea
12400 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12410 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
12420 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
12430 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73  Convert P2 regis
12440 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
12450 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69  ith P1 into a si
12460 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75  ngle entry.** su
12470 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61  itable for use a
12480 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
12490 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
124a0 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
124b0 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
124c0 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   The details of 
124d0 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69  the format are i
124e0 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e  rrelevant as lon
124f0 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43  g as.** the OP_C
12500 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
12510 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
12520 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66  rd later..** Ref
12530 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64  er to source cod
12540 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74  e comments for t
12550 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
12560 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d  e record.** form
12570 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  at..**.** P4 may
12580 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
12590 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
125a0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
125b0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
125c0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
125d0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
125e0 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
125f0 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
12600 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
12610 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
12620 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
12630 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
12640 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
12650 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
12660 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
12670 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
12680 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
12690 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
126a0 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
126b0 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
126c0 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  the affinity NON
126d0 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  E..*/.case OP_Ma
126e0 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38  keRecord: {.  u8
126f0 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
12700 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
12710 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
12720 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
12730 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
12740 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
12750 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
12760 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
12770 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a;             /
12780 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12790 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
127a0 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20  */.  int nHdr;  
127b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
127c0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
127d0 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
127e0 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
127f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
12800 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
12810 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
12820 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  d */.  int nZero
12830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12840 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
12850 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
12860 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
12870 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
12880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12890 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
128a0 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
128b0 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
128c0 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
128d0 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
128e0 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
128f0 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
12900 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
12910 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
12920 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
12930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
12940 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
12950 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
12960 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
12970 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
12980 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
12990 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
129a0 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
129b0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
129c0 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
129d0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
129e0 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
129f0 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
12a00 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
12a10 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
12a40 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a  n zNewRecord[] *
12a50 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
12a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
12a70 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20  ngth of a field 
12a80 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  */..  /* Assumin
12a90 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
12aa0 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
12ab0 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
12ac0 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
12ad0 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
12ae0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
12af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
12b30 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
12b40 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
12b50 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
12b60 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
12b70 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
12b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12bc0 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
12bd0 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
12be0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
12bf0 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
12c00 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
12c10 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
12c20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20  so froth..  **. 
12c30 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
12c40 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
12c50 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
12c60 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
12c70 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
12c80 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
12c90 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
12ca0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
12cb0 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
12cc0 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
12cd0 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
12ce0 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
12cf0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
12d00 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
12d10 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
12d20 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20  .  */.  nData = 
12d30 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
12d40 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
12d50 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
12d60 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20   nHdr = 0;      
12d70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12d80 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
12d90 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79 74   space */.  nByt
12da0 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  e = 0;         /
12db0 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
12dc0 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
12dd0 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f  ecord */.  nZero
12de0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
12df0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
12e00 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
12e10 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
12e20 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
12e30 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
12e40 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
12e50 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
12e60 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
12e70 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
12e80 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
12e90 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d   pData0 = &p->aM
12ea0 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
12eb0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
12ec0 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
12ed0 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
12ee0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
12ef0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
12f00 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74  at;..  /* Loop t
12f10 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
12f20 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
12f30 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
12f40 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
12f50 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
12f60 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
12f70 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
12f80 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52  d..  */.  for(pR
12f90 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
12fa0 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
12fb0 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69  .    if( zAffini
12fc0 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  ty ){.      appl
12fd0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
12fe0 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70  zAffinity[pRec-p
12ff0 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67  Data0], encoding
13000 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
13010 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d   pRec->flags&MEM
13020 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e  _Zero && pRec->n
13030 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
13040 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
13050 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
13060 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  }.    serial_typ
13070 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
13080 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
13090 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
130a0 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
130b0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
130c0 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
130d0 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
130e0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c  .    nHdr += sql
130f0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
13100 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
13110 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
13120 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
13130 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65      /* Only pure
13140 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f   zero-filled BLO
13150 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20  Bs can be input 
13160 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a  to this Opcode..
13170 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e        ** We do n
13180 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77  ot allow blobs w
13190 69 74 68 20 61 20 70 72 65 66 69 78 20 61 6e 64  ith a prefix and
131a0 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74   a zero-filled t
131b0 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a  ail. */.      nZ
131c0 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
131d0 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Zero;.    }else 
131e0 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20  if( len ){.     
131f0 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20   nZero = 0;.    
13200 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20  }.  }..  /* Add 
13210 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64  the initial head
13220 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f  er varint and to
13230 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a  tal the size */.
13240 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
13250 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
13260 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66  tLen(nHdr);.  if
13270 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
13280 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
13290 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a   ){.    nHdr++;.
132a0 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
132b0 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a  dr+nData-nZero;.
132c0 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
132d0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
132e0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
132f0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
13300 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
13310 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
13320 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
13330 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
13340 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
13350 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
13360 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
13370 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
13380 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
13390 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
133a0 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
133b0 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
133c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
133d0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
133e0 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f  VdbeMemGrow() co
133f0 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
13400 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
13410 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
13420 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
13430 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d  <pOp->p1 || pOp-
13440 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70  >p3>=pOp->p1+pOp
13450 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d  ->p2 );.  pOut =
13460 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
13470 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  3];.  if( sqlite
13480 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
13490 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
134a0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
134b0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
134c0 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
134d0 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
134e0 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
134f0 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
13500 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
13510 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65  nHdr);.  for(pRe
13520 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
13530 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
13540 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
13550 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13560 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
13570 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
13580 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
13590 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
135a0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
135b0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
135c0 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28  pe */.  }.  for(
135d0 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
135e0 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
135f0 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61  ){  /* serial da
13600 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73  ta */.    i += s
13610 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13620 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
13630 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d  i], (int)(nByte-
13640 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f  i), pRec,file_fo
13650 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  rmat);.  }.  ass
13660 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b  ert( i==nByte );
13670 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
13680 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
13690 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
136a0 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
136b0 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
136c0 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20  gs = MEM_Blob | 
136d0 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d  MEM_Dyn;.  pOut-
136e0 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
136f0 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
13700 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
13710 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
13720 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
13730 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
13740 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
13750 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
13760 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
13770 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
13780 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
13790 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
137a0 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
137b0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
137c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
137d0 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
137e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
137f0 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
13800 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
13810 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
13820 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
13830 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
13840 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
13850 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
13860 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13870 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
13880 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
13890 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
138a0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
138b0 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
138c0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
138d0 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
138e0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
138f0 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
13900 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
13910 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
13920 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
13930 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e    }else{.    nEn
13940 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  try = 0;.  }.  p
13950 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
13960 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  _Int;.  pOut->u.
13970 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
13980 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
13990 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
139a0 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
139b0 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
139c0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
139d0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
139e0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
139f0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
13a00 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
13a10 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
13a20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
13a30 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
13a40 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
13a50 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
13a60 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
13a70 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
13a80 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
13a90 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
13aa0 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
13ab0 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
13ae0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
13af0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13b10 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
13b20 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
13b30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
13b40 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
13b50 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
13b60 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
13b70 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
13b80 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
13b90 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
13ba0 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
13bb0 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
13bc0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
13bd0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
13be0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
13bf0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
13c00 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
13c10 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
13c20 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
13c30 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
13c40 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
13c50 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
13c60 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
13c70 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
13c80 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
13c90 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
13ca0 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
13cb0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
13cc0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
13cd0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
13ce0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
13cf0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
13d00 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
13d10 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
13d20 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
13d30 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
13d40 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65     if( db->write
13d50 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20  VdbeCnt>0 ){.   
13d60 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
13d70 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
13d80 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
13d90 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
13da0 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
13db0 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
13dc0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
13dd0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
13de0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
13df0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
13e00 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
13e10 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
13e20 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
13e30 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
13e40 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
13e50 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
13e60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
13e70 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
13e80 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
13e90 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
13ea0 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  e);..      /* Cr
13eb0 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
13ec0 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
13ed0 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
13ee0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
13ef0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
13f00 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
13f10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
13f20 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
13f30 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
13f40 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
13f50 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
13f60 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
13f70 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
13f80 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
13f90 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
13fa0 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
13fb0 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
13fc0 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
13fd0 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
13fe0 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
13ff0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
14000 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
14010 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14020 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
14030 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
14040 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
14050 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
14060 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
14070 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
14080 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
14090 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
140a0 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
140b0 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
140c0 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
140d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
140e0 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
140f0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14100 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
14110 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
14120 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
14130 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
14140 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
14150 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
14160 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
14170 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
14180 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
14190 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
141a0 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
141b0 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
141c0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
141d0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
141e0 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
141f0 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
14200 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
14210 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
14220 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
14230 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
14240 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
14250 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
14260 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
14270 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
14280 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
14290 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
142a0 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
142b0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
142c0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
142d0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
142e0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
142f0 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
14300 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
14310 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
14320 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  f( .        db->
14330 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 7c  writeVdbeCnt>0 |
14340 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  | (p1==SAVEPOINT
14350 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d  _ROLLBACK && db-
14360 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
14370 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
14380 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
14390 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
143a0 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
143b0 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
143c0 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
143d0 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
143e0 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74 20  ents. It is not 
143f0 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c  possible to roll
14400 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e 74  back a savepoint
14410 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68 65  .      ** if the
14420 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
14430 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74 20  e statements at 
14440 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  all..      */.  
14450 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
14460 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
14470 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22  , db, .        "
14480 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70 6f  cannot %s savepo
14490 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
144a0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
144b0 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d 3d  ",.        (p1==
144c0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
144d0 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a  CK ? "rollback":
144e0 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20 20   "release").    
144f0 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20    );.      rc = 
14500 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
14510 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
14520 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
14530 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
14540 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
14550 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
14560 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
14570 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
14580 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
14590 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
145a0 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
145b0 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
145c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
145d0 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
145e0 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
145f0 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
14600 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
14610 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66  epoint;.      if
14620 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
14630 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
14640 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
14650 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
14660 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 44 65  lite3VdbeCheckDe
14670 66 65 72 72 65 64 28 70 29 29 21 3d 53 51 4c 49  ferred(p))!=SQLI
14680 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
14690 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
146a0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
146b0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
146c0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
146d0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
146e0 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
146f0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
14700 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
14710 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
14720 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
14730 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
14740 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
14750 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
14760 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
14770 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14780 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
14790 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
147a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
147b0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
147c0 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
147d0 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
147e0 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
147f0 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66  t - 1;.        f
14800 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
14810 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
14820 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
14830 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
14840 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
14850 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
14860 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
14870 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
14880 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
14890 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
148a0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
148b0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
148c0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
148d0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
148e0 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  && (db->flags&SQ
148f0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
14900 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  es)!=0 ){.      
14910 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
14920 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
14930 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
14940 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
14950 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
14960 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 0);.        }.
14970 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
14980 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f   /* Regardless o
14990 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  f whether this i
149a0 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52  s a RELEASE or R
149b0 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79  OLLBACK, destroy
149c0 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73   all .      ** s
149d0 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64  avepoints nested
149e0 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73   inside of the s
149f0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
14a00 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20  perated on. */. 
14a10 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e       while( db->
14a20 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76  pSavepoint!=pSav
14a30 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
14a40 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61    pTmp = db->pSa
14a50 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
14a60 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
14a70 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20  = pTmp->pNext;. 
14a80 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
14a90 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
14aa0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
14ab0 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
14ac0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69  }..      /* If i
14ad0 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20  t is a RELEASE, 
14ae0 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65  then destroy the
14af0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
14b00 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20   operated on .  
14b10 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69      ** too. If i
14b20 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  t is a ROLLBACK 
14b30 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65  TO, then set the
14b40 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   number of defer
14b50 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  red .      ** co
14b60 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14b70 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ons present in t
14b80 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  he database to t
14b90 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a  he value stored.
14ba0 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68        ** when th
14bb0 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20  e savepoint was 
14bc0 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20  created.  */.   
14bd0 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
14be0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
14bf0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
14c00 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
14c10 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
14c20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
14c30 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
14c40 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
14c50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
14c60 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
14c70 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
14c80 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
14c90 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
14ca0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
14cb0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
14cc0 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  {.        db->nD
14cd0 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53  eferredCons = pS
14ce0 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
14cf0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  redCons;.      }
14d00 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
14d10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
14d20 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
14d30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
14d40 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
14d50 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
14d60 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
14d70 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
14d80 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
14d90 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
14da0 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
14db0 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
14dc0 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
14dd0 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
14de0 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
14df0 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
14e00 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
14e10 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
14e20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
14e30 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
14e40 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
14e50 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
14e60 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
14e70 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
14e80 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
14e90 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
14ea0 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
14eb0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
14ec0 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
14ed0 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20  nt turnOnAC;..  
14ee0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
14ef0 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
14f00 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
14f10 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d  p2;.  turnOnAC =
14f20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
14f30 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43  it && !db->autoC
14f40 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28  ommit;.  assert(
14f50 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
14f60 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
14f70 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
14f80 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
14f90 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
14fa0 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
14fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
14fc0 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30  >activeVdbeCnt>0
14fd0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
14fe0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
14ff0 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28  active */..  if(
15000 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f   turnOnAC && iRo
15010 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63  llback && db->ac
15020 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b  tiveVdbeCnt>1 ){
15030 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
15040 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
15050 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43  ements a ROLLBAC
15060 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  K and other VMs 
15070 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  are.    ** still
15080 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20   running, and a 
15090 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
150a0 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e  ctive, return an
150b0 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
150c0 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  g.    ** that th
150d0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
150e0 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
150f0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
15100 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15110 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
15120 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
15130 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
15140 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
15150 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
15160 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
15170 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
15180 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41  else if( turnOnA
15190 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20  C && !iRollback 
151a0 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65  && db->writeVdbe
151b0 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  Cnt>0 ){.    /* 
151c0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
151d0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
151e0 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
151f0 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
15200 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
15210 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
15220 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
15230 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
15240 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
15250 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
15260 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
15270 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
15280 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
15290 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
152a0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
152b0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
152c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
152d0 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
152e0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
152f0 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
15300 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
15310 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
15320 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
15330 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
15340 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
15350 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a  ollbackAll(db);.
15360 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
15370 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
15380 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
15390 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 44 65  lite3VdbeCheckDe
153a0 66 65 72 72 65 64 28 70 29 29 21 3d 53 51 4c 49  ferred(p))!=SQLI
153b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
153c0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
153d0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
153e0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
153f0 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
15400 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
15410 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
15420 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
15430 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
15440 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
15450 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15460 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
15470 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
15480 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
15490 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
154a0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
154b0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
154c0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
154d0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
154e0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
154f0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
15500 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
15510 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
15520 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
15530 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
15540 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
15550 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15560 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
15570 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
15580 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
15590 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
155a0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
155b0 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
155c0 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
155d0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
155e0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
155f0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
15600 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
15610 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
15620 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
15630 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
15660 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
15670 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
15680 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
15690 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
156a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
156b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
156c0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a  nsaction P1 P2 *
156d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
156e0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
156f0 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   The transaction
15700 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d   ends when a Com
15710 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a  mit or Rollback.
15720 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63  ** opcode is enc
15730 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e  ountered.  Depen
15740 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43  ding on the ON C
15750 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c  ONFLICT setting,
15760 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74   the.** transact
15770 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ion might also b
15780 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66  e rolled back if
15790 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
157a0 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  ountered..**.** 
157b0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
157c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
157d0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
157e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
157f0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
15800 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
15810 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
15820 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
15830 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
15840 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
15850 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
15860 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
15870 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
15880 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
15890 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
158a0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
158b0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
158c0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41  n is started.  A
158d0 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69   RESERVED lock i
158e0 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e  s.** obtained on
158f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
15900 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d  le when a write-
15910 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
15920 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f  tarted.  No.** o
15930 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e  ther process can
15940 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77   start another w
15950 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
15960 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e   while this tran
15970 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e  saction is.** un
15980 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e  derway.  Startin
15990 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  g a write transa
159a0 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74  ction also creat
159b0 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
159c0 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74  urnal. A.** writ
159d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  e transaction mu
159e0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
159f0 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73  fore any changes
15a00 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
15a10 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
15a20 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20    If P2 is 2 or 
15a30 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20  greater then an 
15a40 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69  EXCLUSIVE lock i
15a50 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a  s also obtained.
15a60 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a  ** on the file..
15a70 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
15a80 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
15a90 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
15aa0 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
15ab0 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
15ac0 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
15ad0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
15ae0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
15af0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
15b00 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
15b10 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
15b20 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
15b30 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
15b40 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
15b50 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
15b60 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
15b70 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
15b80 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
15b90 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
15ba0 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
15bb0 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
15bc0 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
15bd0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
15be0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
15bf0 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
15c00 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
15c10 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66  n allows the aff
15c20 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ects of this.** 
15c30 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
15c40 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
15c50 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
15c60 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
15c70 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
15c80 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
15c90 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
15ca0 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
15cb0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
15cc0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
15cd0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
15ce0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
15cf0 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  lts..**.** If P2
15d00 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
15d10 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
15d20 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
15d30 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
15d40 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
15d50 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
15d60 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
15d70 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
15d80 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
15d90 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
15da0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
15db0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
15dc0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
15dd0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
15de0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
15df0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
15e00 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
15e10 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
15e20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
15e30 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
15e40 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
15e50 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
15e60 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
15e70 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15e80 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
15e90 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
15ea0 21 3d 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  !=SQLITE_READONL
15eb0 59 20 2f 2a 20 26 26 20 72 63 21 3d 53 51 4c 49  Y /* && rc!=SQLI
15ec0 54 45 5f 42 55 53 59 20 2a 2f 20 29 7b 0a 20 20  TE_BUSY */ ){.  
15ed0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15ee0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15ef0 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
15f00 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
15f10 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
15f20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
15f30 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74  it==0 || db->act
15f40 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20  iveVdbeCnt>1) . 
15f50 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
15f60 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
15f70 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
15f80 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
15f90 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
15fa0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
15fb0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
15fc0 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
15fd0 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
15fe0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
15ff0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
16000 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
16010 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
16020 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
16030 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
16040 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
16050 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
16060 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20  Statement);..   
16070 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
16080 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
16090 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
160a0 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
160b0 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
160c0 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
160d0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
160e0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
160f0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
16100 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
16110 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
16120 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
16130 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
16140 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
16150 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
16160 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
16170 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
16180 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
16190 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
161a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
161b0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
161c0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
161d0 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
161e0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
161f0 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
16200 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
16210 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
16220 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
16230 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
16240 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
16250 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
16260 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
16270 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
16280 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
16290 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
162a0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
162b0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
162c0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
162d0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
162e0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
162f0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
16300 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
16310 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
16320 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
16330 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
16340 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
16350 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
16360 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
16370 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
16380 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
16390 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
163a0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
163b0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
163c0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
163d0 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d  Cookie;..  iDb =
163e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
163f0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
16400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
16410 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
16420 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
16430 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
16440 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
16450 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
16460 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
16470 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
16480 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
16490 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  =0 );..  sqlite3
164a0 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
164b0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
164c0 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
164d0 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e  iMeta);.  pOut->
164e0 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d  u.i = iMeta;.  M
164f0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
16500 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
16510 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16520 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
16530 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
16540 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
16550 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
16560 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
16570 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
16580 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
16590 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
165a0 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69  ase P1.  P2==1 i
165b0 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
165c0 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32  sion.  .** P2==2
165d0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
165e0 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69   format. P2==3 i
165f0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
16600 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
16610 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
16620 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
16630 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16640 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
16650 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
16660 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
16670 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
16680 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
16690 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
166a0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
166b0 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
166c0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
166d0 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
166e0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
166f0 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
16700 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
16710 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
16720 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
16730 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
16740 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
16750 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
16760 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
16770 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
16780 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
16790 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
167a0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
167b0 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  0 );.  sqlite3Vd
167c0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
167d0 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
167e0 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
167f0 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
16800 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
16810 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
16820 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
16830 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28  >pBt, pOp->p2, (
16840 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
16850 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
16860 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
16870 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
16880 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
16890 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
168a0 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
168b0 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
168c0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
168d0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
168e0 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
168f0 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
16900 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
16910 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
16920 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
16930 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
16940 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
16950 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
16960 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
16970 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
16980 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
16990 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
169a0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
169b0 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
169c0 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
169d0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
169e0 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
169f0 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
16a00 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
16a10 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
16a20 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
16a30 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
16a40 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
16a50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
16a60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
16a70 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
16a80 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
16a90 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
16aa0 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
16ab0 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
16ac0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
16ad0 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
16ae0 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
16af0 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
16b00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
16b10 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
16b20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
16b30 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
16b40 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
16b50 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
16b60 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
16b70 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
16b80 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
16b90 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
16ba0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
16bb0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
16bc0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
16bd0 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
16be0 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
16bf0 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
16c00 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
16c10 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
16c20 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
16c30 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
16c40 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
16c50 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
16c60 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
16c70 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
16c80 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
16c90 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
16ca0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
16cb0 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
16cc0 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
16cd0 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
16ce0 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
16cf0 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
16d00 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
16d10 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
16d20 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
16d30 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
16d40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
16d50 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
16d60 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
16d70 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
16d80 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
16d90 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
16da0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
16db0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
16dc0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
16dd0 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
16de0 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
16df0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
16e00 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74 61 20  else{.    iMeta 
16e10 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
16e20 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b  Meta!=pOp->p2 ){
16e30 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
16e40 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
16e50 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
16e60 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
16e70 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
16e80 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
16e90 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
16ea0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
16eb0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
16ec0 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
16ed0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
16ee0 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
16ef0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
16f00 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
16f10 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
16f20 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
16f30 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
16f40 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
16f50 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
16f60 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
16f70 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
16f80 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
16f90 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
16fa0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
16fb0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
16fc0 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
16fd0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
16fe0 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
16ff0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
17000 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
17010 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
17020 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
17030 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
17040 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
17050 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
17060 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
17070 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
17080 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
17090 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
170a0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
170b0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
170c0 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
170d0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
170e0 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
170f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
17100 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
17110 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
17120 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
17130 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
17140 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
17150 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
17160 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
17170 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
17180 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
17190 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
171a0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
171b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
171c0 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
171d0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
171e0 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
171f0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
17200 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
17210 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17220 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
17230 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17240 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
17250 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17260 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
17270 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
17280 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
17290 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
172a0 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
172b0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
172c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
172d0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
172e0 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
172f0 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
17300 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
17310 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
17320 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
17330 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
17340 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
17350 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
17360 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
17370 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
17380 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
17390 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
173a0 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
173b0 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
173c0 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
173d0 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
173e0 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
173f0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
17400 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
17410 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
17420 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
17430 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
17440 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17450 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
17460 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
17470 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
17480 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
17490 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
174a0 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
174b0 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
174c0 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
174d0 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
174e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
174f0 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
17500 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
17510 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
17520 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
17530 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
17540 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17550 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
17560 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
17570 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
17580 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
17590 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
175a0 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
175b0 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
175c0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
175d0 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
175e0 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
175f0 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
17600 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
17610 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
17620 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
17630 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
17640 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
17650 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
17660 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
17670 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
17680 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
17690 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
176a0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
176b0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
176c0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
176d0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
176e0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
176f0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
17700 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
17710 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
17720 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
17730 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
17740 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
17750 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
17760 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
17770 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
17780 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
17790 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
177a0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
177b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
177c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
177d0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
177e0 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
177f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
17800 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
17810 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
17820 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
17830 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
17840 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
17850 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
17860 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
17870 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
17880 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
17890 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
178a0 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
178b0 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
178c0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
178d0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
178e0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
178f0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
17900 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
17910 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
17920 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
17930 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
17940 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
17950 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
17960 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
17970 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
17980 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
17990 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
179a0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
179b0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
179c0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
179d0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
179e0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
179f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
17a00 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
17a10 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
17a20 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
17a30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
17a40 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
17a50 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
17a60 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
17a70 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
17a80 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
17a90 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
17aa0 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
17ab0 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
17ac0 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
17ad0 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
17ae0 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
17af0 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
17b00 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
17b10 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
17b20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
17b30 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
17b40 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  d..*/.case OP_Op
17b50 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
17b60 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69  OpenWrite: {.  i
17b70 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
17b80 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
17b90 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
17ba0 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
17bb0 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
17bc0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
17bd0 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
17be0 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
17bf0 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
17c00 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
17c10 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
17c20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
17c30 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
17c40 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
17c50 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
17c60 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  iDb))!=0 );.  pD
17c70 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
17c80 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
17c90 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
17ca0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
17cb0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
17cc0 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
17cd0 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66  Flag = 1;.    if
17ce0 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
17cf0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
17d00 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
17d10 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
17d20 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
17d30 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
17d40 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
17d50 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
17d60 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
17d70 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
17d80 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
17d90 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
17da0 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  rt( p2<=p->nMem 
17db0 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70  );.    pIn2 = &p
17dc0 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20  ->aMem[p2];.    
17dd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
17de0 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
17df0 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
17e00 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
17e10 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
17e20 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
17e30 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
17e40 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64  Table opcode and
17e50 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
17e60 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
17e70 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
17e80 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
17e90 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
17ea0 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
17eb0 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
17ec0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17ed0 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
17ee0 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
17ef0 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
17f00 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
17f10 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70  .    if( NEVER(p
17f20 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72  2<2) ) {.      r
17f30 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
17f40 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
17f50 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17f60 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
17f70 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
17f80 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
17f90 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
17fa0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
17fb0 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f  fo;.    pKeyInfo
17fc0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
17fd0 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  b);.    nField =
17fe0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
17ff0 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d+1;.  }else if(
18000 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18010 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
18020 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
18030 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
18040 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
18050 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
18060 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
18070 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31  , nField, iDb, 1
18080 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
18090 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
180a0 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
180b0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
180c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
180d0 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
180e0 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70  KeyInfo, pCur->p
180f0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
18100 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
18110 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  Info;..  /* Sinc
18120 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f  e it performs no
18130 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18140 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e  on or IO, the on
18150 6c 79 20 76 61 6c 75 65 73 20 74 68 61 74 0a 20  ly values that. 
18160 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
18170 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
18180 75 72 6e 20 61 72 65 20 53 51 4c 49 54 45 5f 45  urn are SQLITE_E
18190 4d 50 54 59 20 61 6e 64 20 53 51 4c 49 54 45 5f  MPTY and SQLITE_
181a0 4f 4b 2e 20 0a 20 20 2a 2a 20 53 51 4c 49 54 45  OK. .  ** SQLITE
181b0 5f 45 4d 50 54 59 20 69 73 20 6f 6e 6c 79 20 72  _EMPTY is only r
181c0 65 74 75 72 6e 65 64 20 77 68 65 6e 20 61 74 74  eturned when att
181d0 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
181e0 74 68 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72  the table.  ** r
181f0 6f 6f 74 65 64 20 61 74 20 70 61 67 65 20 31 20  ooted at page 1 
18200 6f 66 20 61 20 7a 65 72 6f 2d 62 79 74 65 20 64  of a zero-byte d
18210 61 74 61 62 61 73 65 2e 20 20 2a 2f 0a 20 20 61  atabase.  */.  a
18220 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
18230 45 5f 45 4d 50 54 59 20 7c 7c 20 72 63 3d 3d 53  E_EMPTY || rc==S
18240 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66  QLITE_OK );.  if
18250 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18260 54 59 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e  TY ){.    pCur->
18270 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20  pCursor = 0;.   
18280 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
18290 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 74 20 74  .  }..  /* Set t
182a0 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
182b0 54 61 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65  Table and isInde
182c0 78 20 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65  x variables. Pre
182d0 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
182e0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
182f0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
18300 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
18310 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
18320 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
18330 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
18340 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
18350 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
18360 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
18370 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
18380 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
18390 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
183a0 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
183b0 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
183c0 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43  P4_KEYINFO;.  pC
183d0 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  ur->isIndex = !p
183e0 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  Cur->isTable;.  
183f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18400 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
18410 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
18420 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
18430 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
18440 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
18450 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
18460 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
18470 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
18480 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
18490 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
184a0 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e  -only.  The tran
184b0 73 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c  sient or virtual
184c0 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
184d0 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
184e0 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
184f0 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
18500 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
18510 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18520 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
18530 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
18540 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
18550 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
18560 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
18570 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
18580 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
18590 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
185a0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
185b0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
185c0 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
185d0 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
185e0 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
185f0 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  x..**.** This op
18600 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61  code was once ca
18610 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20  lled OpenTemp.  
18620 42 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64  But that created
18630 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65  .** confusion be
18640 63 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22  cause the term "
18650 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67  temp table", mig
18660 68 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a  ht refer either.
18670 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62  ** to a TEMP tab
18680 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  le at the SQL le
18690 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62  vel, or to a tab
186a0 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20  le opened by.** 
186b0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68  this opcode.  Th
186c0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  en this opcode w
186d0 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74  as call OpenVirt
186e0 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ual.  But.** tha
186f0 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73  t created confus
18700 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f  ion with the who
18710 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  le virtual-table
18720 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f   idea..*/.case O
18730 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
18740 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
18750 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63  *pCx;.  static c
18760 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61  onst int openFla
18770 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
18780 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
18790 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
187a0 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
187b0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
187c0 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
187d0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
187e0 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
187f0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
18800 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a  _TRANSIENT_DB;..
18810 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18820 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
18830 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
18840 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
18850 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
18860 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
18870 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
18880 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63  ullRow = 1;.  rc
18890 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
188a0 61 63 74 6f 72 79 28 64 62 2c 20 30 2c 20 31 2c  actory(db, 0, 1,
188b0 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
188c0 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 2c  TEMP_CACHE_SIZE,
188d0 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20 20 20   openFlags,.    
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 26 70 43 78 2d 3e 70 42 74         &pCx->pBt
18900 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
18910 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
18920 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
18930 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
18940 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
18950 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
18960 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
18970 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
18980 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
18990 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
189a0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
189b0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
189c0 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
189d0 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61 67 20 62  _ZERODATA flag b
189e0 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65  efore.    ** ope
189f0 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72  ning it. If a tr
18a00 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73  ansient table is
18a10 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20   required, just 
18a20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61  use the.    ** a
18a30 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
18a40 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
18a50 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
18a60 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
18a70 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f     */.    if( pO
18a80 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29  p->p4.pKeyInfo )
18a90 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
18aa0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
18ab0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
18ac0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
18ad0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18ae0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
18af0 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
18b00 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20  TREE_ZERODATA); 
18b10 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
18b20 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18b30 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f      assert( pgno
18b40 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
18b50 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
18b60 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
18b70 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e  or(pCx->pBt, pgn
18b80 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20  o, 1, .         
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a         (KeyInfo*
18bb0 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d  )pOp->p4.z, pCx-
18bc0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
18bd0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
18be0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
18bf0 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78  nfo;.        pCx
18c00 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20  ->pKeyInfo->enc 
18c10 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20  = ENC(p->db);.  
18c20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
18c30 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
18c40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
18c50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18c60 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
18c70 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c   MASTER_ROOT, 1,
18c80 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72   0, pCx->pCursor
18c90 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
18ca0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d  Table = 1;.    }
18cb0 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 49 6e  .  }.  pCx->isIn
18cc0 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61  dex = !pCx->isTa
18cd0 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
18ce0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
18cf0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
18d00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
18d10 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
18d20 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
18d30 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
18d40 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
18d50 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
18d60 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
18d70 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74  hat one row in t
18d80 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
18d90 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
18da0 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
18db0 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
18dc0 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
18dd0 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
18de0 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
18df0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
18e00 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
18e10 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
18e20 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
18e30 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
18e40 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65  old the a single
18e50 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
18e60 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
18e70 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
18e80 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
18e90 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
18ea0 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
18eb0 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
18ec0 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
18ed0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
18ee0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
18ef0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
18f00 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
18f10 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
18f20 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
18f30 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
18f40 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
18f50 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
18f60 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
18f70 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
18f80 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
18f90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
18fa0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
18fb0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
18fc0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
18fd0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
18fe0 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a  Op->p3, -1, 0);.
18ff0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
19000 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
19010 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
19020 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62    pCx->pseudoTab
19030 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
19040 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
19050 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  = 1;.  pCx->isIn
19060 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  dex = 0;.  break
19070 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19080 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
19090 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
190a0 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
190b0 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
190c0 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
190d0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
190e0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
190f0 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
19100 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
19110 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19120 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
19130 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
19140 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
19150 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
19160 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
19170 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
19180 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
19190 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
191a0 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34  ekGe P1 P2 P3 P4
191b0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
191c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
191d0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
191e0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
191f0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
19200 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
19210 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
19220 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
19230 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19240 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
19250 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
19260 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
19270 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
19280 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
19290 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
192a0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
192b0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
192c0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
192d0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
192e0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
192f0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
19300 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
19310 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
19320 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
19330 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
19340 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
19350 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
19360 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
19370 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
19380 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
19390 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
193a0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
193b0 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
193c0 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
193d0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
193e0 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kGt P1 P2 P3 P4 
193f0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
19400 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19410 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19420 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19430 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
19440 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
19450 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
19460 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
19470 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
19480 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
19490 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
194a0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
194b0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
194c0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
194d0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
194e0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
194f0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
19500 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
19510 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
19520 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
19530 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
19540 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
19550 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
19560 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
19570 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
19580 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
19590 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
195a0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
195b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
195c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
195d0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
195e0 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
195f0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
19600 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33   SeekLt P1 P2 P3
19610 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P4 * .**.** If 
19620 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19630 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
19640 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
19650 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
19660 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
19670 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
19680 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
19690 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
196a0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
196b0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
196c0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
196d0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
196e0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
196f0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
19700 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19710 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
19720 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
19730 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
19740 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
19750 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
19760 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
19770 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19780 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19790 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
197a0 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
197b0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
197c0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
197d0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
197e0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
197f0 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74  Distinct, SeekGt
19800 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
19810 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
19820 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50  eekLe P1 P2 P3 P
19830 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
19840 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
19850 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
19860 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
19870 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
19880 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
19890 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
198a0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
198b0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
198c0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
198d0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
198e0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
198f0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
19900 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
19910 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
19920 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
19930 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
19940 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
19950 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
19960 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
19970 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
19980 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
19990 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
199a0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
199b0 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
199c0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
199d0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
199e0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
199f0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
19a00 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
19a10 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
19a20 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
19a30 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
19a40 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
19a50 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20  SeekLt:         
19a60 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
19a70 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20  case OP_SeekLe: 
19a80 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
19a90 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
19aa0 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20  SeekGe:         
19ab0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
19ac0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20  case OP_SeekGt: 
19ad0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
19ae0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
19af0 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
19b00 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
19b10 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
19b20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
19b30 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
19b40 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
19b50 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
19b60 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
19b70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
19b80 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
19b90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19ba0 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
19bb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
19bc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
19bd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
19be0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
19bf0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  eReg==0 );.  if(
19c00 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
19c10 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d  ){.    oc = pOp-
19c20 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d  >opcode;.    pC-
19c30 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
19c40 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
19c50 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  e ){.      /* Th
19c60 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
19c70 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
19c80 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
19c90 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
19ca0 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  .      ** blob, 
19cb0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
19cc0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
19cd0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
19ce0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a  e can do.      *
19cf0 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
19d00 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  overt it. */.   
19d10 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
19d20 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20  ffinity(pIn3);. 
19d30 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69       iKey = sqli
19d40 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
19d50 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d  pIn3);.      pC-
19d60 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
19d70 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  0;..      /* If 
19d80 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
19d90 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
19da0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
19db0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
19dc0 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
19dd0 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
19de0 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
19df0 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
19e00 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
19e10 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
19e20 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
19e30 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
19e40 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
19e50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
19e60 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
19e70 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
19e80 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
19e90 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
19ea0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  r,.          ** 
19eb0 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
19ec0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
19ed0 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
19ee0 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
19ef0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
19f00 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
19f10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
19f20 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
19f30 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74  is point, then t
19f40 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
19f50 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20   be a floating. 
19f60 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20         ** point 
19f70 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20  number. */.     
19f80 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
19f90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
19fa0 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20  al)!=0 );..     
19fb0 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41     if( iKey==SMA
19fc0 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28  LLEST_INT64 && (
19fd0 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
19fe0 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e  iKey || pIn3->r>
19ff0 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
1a000 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  /* The P3 value 
1a010 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20  is too large in 
1a020 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20  magnitude to be 
1a030 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a  expressed as an.
1a040 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74            ** int
1a050 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  eger. */.       
1a060 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
1a070 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1a080 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  r<0 ){.         
1a090 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
1a0a0 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGt || oc==OP_S
1a0b0 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20  eekGe ){.       
1a0c0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1a0d0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
1a0e0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1a0f0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1a100 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1a110 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1a120 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a130 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a140 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1a150 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d          if( oc==
1a160 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1a170 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
1a180 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1a190 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1a1a0 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1a1b0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1a1c0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a1d0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1a1e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1a200 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a210 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1a220 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1a230 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1a240 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a250 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1a260 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1a270 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1a280 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1a290 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1a2a0 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1a2b0 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1a2c0 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1a2d0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1a2e0 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1a2f0 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1a300 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a310 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1a320 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1a330 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1a340 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1a350 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1a360 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1a370 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1a380 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1a390 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1a3a0 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1a3b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1a3c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1a3d0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1a3e0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1a3f0 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1a400 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1a410 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a420 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1a430 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a440 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1a450 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1a460 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1a470 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1a480 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1a490 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1a4a0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1a4b0 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1a4c0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1a4d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1a4e0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1a4f0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1a500 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1a510 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1a520 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1a530 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1a540 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 20 20 20  (u16)nField;.   
1a550 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
1a560 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGt || oc==OP_S
1a570 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20  eekLe ){.       
1a580 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1a590 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
1a5a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a5b0 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
1a5c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 2e 61       }.      r.a
1a5d0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
1a5e0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72  Op->p3];.      r
1a5f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a600 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1a610 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  C->pCursor, &r, 
1a620 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1a630 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1a640 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a650 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a660 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1a670 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
1a680 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1a690 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
1a6a0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1a6b0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1a6c0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1a6d0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1a6e0 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
1a6f0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1a700 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
1a710 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c  oc==OP_SeekGe ||
1a720 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1a730 7b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c  {.      if( res<
1a740 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1a750 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29  oc==OP_SeekGt) )
1a760 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1a770 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1a780 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1a790 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1a7a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1a7b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a7c0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1a7d0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1a7e0 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  d = 0;.      }el
1a7f0 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
1a800 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1a810 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
1a820 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1a830 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1a840 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66  ekLe );.      if
1a850 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1a860 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1a870 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  kLt) ){.        
1a880 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a890 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
1a8a0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1a8b0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1a8c0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1a8d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a8e0 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
1a8f0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1a900 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1a910 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
1a920 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
1a930 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1a940 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
1a950 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20  k to.        ** 
1a960 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
1a970 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20  he case..       
1a980 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20   */.        res 
1a990 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1a9a0 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1a9b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1a9c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a9d0 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72  2>0 );.    if( r
1a9e0 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
1a9f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1aa00 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1aa10 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
1aa20 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67   when attempting
1aa30 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c   to open the sql
1aa40 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c  ite3_master tabl
1aa50 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61  e.    ** for rea
1aa60 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73  d access returns
1aa70 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49   SQLITE_EMPTY. I
1aa80 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61  n this case alwa
1aa90 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74  ys.    ** take t
1aaa0 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74  he jump (since t
1aab0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1aac0 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
1aad0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63  )..    */.    pc
1aae0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1aaf0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1ab00 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1ab10 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1ab20 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1ab30 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1ab40 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1ab50 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1ab60 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1ab70 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1ab80 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1ab90 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1aba0 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1abb0 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1abc0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1abd0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1abe0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1abf0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1ac00 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1ac10 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1ac20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1ac30 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1ac40 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1ac50 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1ac60 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1ac70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1ac80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1ac90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1aca0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1acb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1acc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1acd0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1ace0 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1acf0 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73  or!=0) ){.    as
1ad00 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1ad10 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  e );.    pC->nul
1ad20 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
1ad30 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1ad40 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1ad50 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
1ad60 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1ad70 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1ad80 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
1ad90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1ada0 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1adb0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a  Found P1 P2 P3 *
1adc0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65   *.**.** Registe
1add0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1ade0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1adf0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31   MakeRecord.  P1
1ae00 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a   is an index..**
1ae10 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74 68 61   If an entry tha
1ae20 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 76 61  t matches the va
1ae30 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1ae40 70 33 20 65 78 69 73 74 73 20 69 6e 20 50 31 20  p3 exists in P1 
1ae50 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
1ae60 50 32 2e 20 20 49 66 20 74 68 65 20 50 33 20 76  P2.  If the P3 v
1ae70 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
1ae80 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20 69 6e  tch any entry in
1ae90 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c 6c   P1.** then fall
1aea0 20 74 68 72 75 2e 20 20 54 68 65 20 50 31 20 63   thru.  The P1 c
1aeb0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 70 6f  ursor is left po
1aec0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1aed0 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a 20  tching entry.** 
1aee0 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1aef0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1af00 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
1af10 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 49 4e  implement the IN
1af20 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72 65 20   operator where 
1af30 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e 64  the.** left-hand
1af40 20 73 69 64 65 20 69 73 20 61 20 53 45 4c 45 43   side is a SELEC
1af50 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 31  T statement.  P1
1af60 20 6d 61 79 20 62 65 20 61 20 74 72 75 65 20 69   may be a true i
1af70 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d  ndex, or it.** m
1af80 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72 61 72  ay be a temporar
1af90 79 20 69 6e 64 65 78 20 74 68 61 74 20 68 6f 6c  y index that hol
1afa0 64 73 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ds the results o
1afb0 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a 20  f the SELECT.** 
1afc0 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54 68 69  statement.   Thi
1afd0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1afe0 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d   also used to im
1aff0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 44  plement the.** D
1b000 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
1b010 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  in SELECT statem
1b020 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ents..**.** This
1b030 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65   instruction che
1b040 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50 31 20  cks if index P1 
1b050 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63 6f 72  contains a recor
1b060 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a 20  d for which .** 
1b070 74 68 65 20 66 69 72 73 74 20 4e 20 73 65 72 69  the first N seri
1b080 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20 65 78  alized values ex
1b090 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
1b0a0 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c  N serialized val
1b0b0 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65  ues.** in the re
1b0c0 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74 65 72  cord in register
1b0d0 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69 73 20   P3, where N is 
1b0e0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
1b0f0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a 2a   of values in.**
1b100 20 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 28   the P3 record (
1b110 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 69 73  the P3 record is
1b120 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
1b130 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a 2a   P1 record). .**
1b140 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1b150 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65  tFound, IsUnique
1b160 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 2f  , NotExists.*/./
1b170 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1b180 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
1b190 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
1b1a0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1b1b0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1b1c0 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73  keRecord.  P1 is
1b1d0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20 49  .** an index.  I
1b1e0 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69 73 74  f no entry exist
1b1f0 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74  s in P1 that mat
1b200 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20 74 68  ches the blob th
1b210 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
1b220 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79 20 64  .  If an entry d
1b230 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20 66 61  oes existing, fa
1b240 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65  ll through.  The
1b250 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 0a   cursor is left.
1b260 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
1b270 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61  he entry that ma
1b280 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  tches..**.** See
1b290 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1b2a0 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75  tExists, IsUniqu
1b2b0 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1b2c0 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1b2d0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1b2e0 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1b2f0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1b300 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1b310 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65  dyExists;.  Vdbe
1b320 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1b330 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
1b340 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1b350 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
1b360 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
1b370 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
1b380 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33   + sizeof(Mem)*3
1b390 20 2b 20 37 5d 3b 0a 0a 20 20 61 6c 72 65 61 64   + 7];..  alread
1b3a0 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61  yExists = 0;.  a
1b3b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b3c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1b3d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1b3e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1b3f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1b400 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
1b410 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1b420 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73  !=0) ){..    ass
1b430 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1b440 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
1b450 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1b460 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
1b470 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
1b480 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  );.    pIdxKey =
1b490 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1b4a0 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1b4b0 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1b4c0 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20  pIn3->z,.       
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1b4f0 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
1b500 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20  aTempRec));.    
1b510 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1b520 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
1b530 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mem;.    }.    i
1b540 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1b550 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
1b560 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73    pIdxKey->flags
1b570 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45   |= UNPACKED_PRE
1b580 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d  FIX_MATCH;.    }
1b590 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1b5a0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1b5b0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1b5c0 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
1b5d0 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69   &res);.    sqli
1b5e0 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70  te3VdbeDeleteUnp
1b5f0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78  ackedRecord(pIdx
1b600 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63  Key);.    if( rc
1b610 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b620 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b630 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69  }.    alreadyExi
1b640 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a  sts = (res==0);.
1b650 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1b660 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1b670 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1b680 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1b690 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
1b6a0 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
1b6b0 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  {.    if( alread
1b6c0 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1b6d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
1b6e0 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c  lse{.    if( !al
1b6f0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1b700 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1b710 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1b720 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69  /* Opcode: IsUni
1b730 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20  que P1 P2 P3 P4 
1b740 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  *.**.** Cursor P
1b750 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  1 is open on an 
1b760 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68 61  index.  So it ha
1b770 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69 74  s no data and it
1b780 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20 0a  s key consists .
1b790 2a 2a 20 6f 66 20 61 20 72 65 63 6f 72 64 20 67  ** of a record g
1b7a0 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d  enerated by OP_M
1b7b0 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65 20  akeRecord where 
1b7c0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 69  the last field i
1b7d0 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64 20  s the .** rowid 
1b7e0 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  of the entry tha
1b7f0 74 20 74 68 65 20 69 6e 64 65 78 20 72 65 66 65  t the index refe
1b800 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rs to..**.** The
1b810 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e   P3 register con
1b820 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  tains an integer
1b830 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
1b840 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64  Call this record
1b850 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52   .** number R. R
1b860 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74 68  egister P4 is th
1b870 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65 74  e first in a set
1b880 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73   of N contiguous
1b890 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68   registers.** th
1b8a0 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e  at make up an un
1b8b0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1b8c0 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
1b8d0 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50 31  d with cursor P1
1b8e0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
1b8f0 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72  f N can be infer
1b900 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72  red from the cur
1b910 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20  sor. N includes 
1b920 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c  the rowid.** val
1b930 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74  ue appended to t
1b940 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
1b950 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73  dex record. This
1b960 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79   rowid value may
1b970 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  .** or may not b
1b980 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e  e the same as R.
1b990 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66  .**.** If any of
1b9a0 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72 73   the N registers
1b9b0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1b9c0 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74  register P4 cont
1b9d0 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76  ains a NULL.** v
1b9e0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
1b9f0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1ba00 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74  .** Otherwise, t
1ba10 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1ba20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72  checks if cursor
1ba30 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20   P1 contains an 
1ba40 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74  entry.** where t
1ba50 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66  he first (N-1) f
1ba60 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20  ields match but 
1ba70 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  the rowid value 
1ba80 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66  at the end.** of
1ba90 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79   the index entry
1baa0 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68   is not R. If th
1bab0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65  ere is no such e
1bac0 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75  ntry, control ju
1bad0 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75  mps.** to instru
1bae0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
1baf0 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f  ise, the rowid o
1bb00 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e  f the conflictin
1bb10 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79  g index.** entry
1bb20 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65   is copied to re
1bb30 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f  gister P3 and co
1bb40 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f  ntrol falls thro
1bb50 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
1bb60 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
1bb70 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1bb80 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  NotFound, NotExi
1bb90 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61  sts, Found.*/.ca
1bba0 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20  se OP_IsUnique: 
1bbb0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1bbc0 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69  , in3 */.  u16 i
1bbd0 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
1bbe0 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72  *pCx;.  BtCursor
1bbf0 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e   *pCrsr;.  u16 n
1bc00 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d  Field;.  Mem *aM
1bc10 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  em;.  UnpackedRe
1bc20 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1bc30 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1bc40 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1bc50 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1bc80 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1bc90 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1bca0 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   aMem = &p->aMem
1bcb0 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f  [pOp->p4.i];.  /
1bcc0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
1bcd0 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61  e values of para
1bce0 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34  meters P1 and P4
1bcf0 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a   are in range. *
1bd00 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1bd10 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1bd20 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1bd30 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1bd40 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1bd50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1bd60 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1bd70 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1bd80 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ;..  /* Find the
1bd90 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a   index cursor. *
1bda0 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  /.  pCx = p->apC
1bdb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1bdc0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1bdd0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1bde0 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1bdf0 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63  lt = 0;.  pCx->c
1be00 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1be10 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73  HE_STALE;.  pCrs
1be20 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  r = pCx->pCursor
1be30 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f  ;..  /* If any o
1be40 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  f the values are
1be50 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20   NULL, take the 
1be60 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c  jump. */.  nFiel
1be70 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  d = pCx->pKeyInf
1be80 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72  o->nField;.  for
1be90 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64  (ii=0; ii<nField
1bea0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ; ii++){.    if(
1beb0 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20   aMem[ii].flags 
1bec0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1bed0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bee0 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73   - 1;.      pCrs
1bef0 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65  r = 0;.      bre
1bf00 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
1bf10 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e 46  assert( (aMem[nF
1bf20 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ield].flags & ME
1bf30 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20  M_Null)==0 );.. 
1bf40 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1bf50 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65  .    /* Populate
1bf60 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63   the index searc
1bf70 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e  h key. */.    r.
1bf80 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e  pKeyInfo = pCx->
1bf90 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1bfa0 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20  nField = nField 
1bfb0 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  + 1;.    r.flags
1bfc0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1bfd0 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72  IX_SEARCH;.    r
1bfe0 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a 20  .aMem = aMem;.. 
1bff0 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68     /* Extract th
1c000 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f  e value of R fro
1c010 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a  m register P3. *
1c020 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
1c030 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1c040 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49  In3);.    R = pI
1c050 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a  n3->u.i;..    /*
1c060 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54 72   Search the B-Tr
1c070 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20  ee index. If no 
1c080 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f  conflicting reco
1c090 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d  rd is found, jum
1c0a0 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20  p.    ** to P2. 
1c0b0 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20  Otherwise, copy 
1c0c0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
1c0d0 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1c0e0 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65  ord to.    ** re
1c0f0 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66 61  gister P3 and fa
1c100 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1c110 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1c120 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d  on.  */.    rc =
1c130 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1c140 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1c150 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43  r, &r, 0, 0, &pC
1c160 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a  x->seekResult);.
1c170 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73      if( (r.flags
1c180 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   & UNPACKED_PREF
1c190 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e  IX_SEARCH) || r.
1c1a0 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20  rowid==R ){.    
1c1b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1c1c0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   1;.    }else{. 
1c1d0 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d       pIn3->u.i =
1c1e0 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   r.rowid;.    }.
1c1f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1c200 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
1c210 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
1c220 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20  *.**.** Use the 
1c230 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1c240 74 65 72 20 50 33 20 61 73 20 61 20 69 6e 74 65  ter P3 as a inte
1c250 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72  ger key.  If a r
1c260 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74  ecord .** with t
1c270 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74  hat key does not
1c280 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20   exist in table 
1c290 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70  of P1, then jump
1c2a0 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74   to P2. .** If t
1c2b0 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65  he record does e
1c2c0 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20  xist, then fall 
1c2d0 74 68 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f  thru.  The curso
1c2e0 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
1c2f0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
1c300 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
1c310 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
1c320 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1c330 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
1c340 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
1c350 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
1c360 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1c370 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
1c380 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
1c390 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
1c3a0 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
1c3b0 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
1c3c0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1c3d0 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
1c3e0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
1c3f0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
1c400 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c410 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1c420 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1c430 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1c440 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c450 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c460 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1c470 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1c480 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1c490 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1c4a0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
1c4b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c4c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1c4d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c4e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1c4f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1c500 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1c510 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1c520 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
1c530 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1c540 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  g==0 );.  pCrsr 
1c550 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
1c560 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1c570 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
1c580 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
1c590 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  .i;.    rc = sql
1c5a0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1c5b0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
1c5c0 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
1c5d0 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f  ;.    pC->lastRo
1c5e0 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1c5f0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1c600 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1c610 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  1:0;.    pC->nul
1c620 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
1c630 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c640 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
1c650 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1c660 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  eto = 0;.    if(
1c670 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20   res!=0 ){.     
1c680 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c690 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
1c6a0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1c6b0 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  d==0 );.    }.  
1c6c0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1c6d0 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b   = res;.  }else{
1c6e0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1c6f0 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74  pens when an att
1c700 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72  empt to open a r
1c710 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  ead cursor on th
1c720 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  e .    ** sqlite
1c730 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65  _master table re
1c740 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1c750 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  TY..    */.    p
1c760 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c770 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c780 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30  >rowidIsValid==0
1c790 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
1c7a0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a  Result = 0;.  }.
1c7b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c7c0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
1c7d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1c7e0 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
1c7f0 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
1c800 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
1c810 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
1c820 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
1c830 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
1c840 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
1c850 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1c860 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1c870 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1c880 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1c890 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1c8a0 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1c8b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1c8c0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1c8d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c8e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1c8f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1c900 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1c910 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
1c920 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
1c930 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1c940 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d  >seqCount++;.  M
1c950 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1c960 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1c970 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1c980 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1c990 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1c9a0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1c9b0 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1c9c0 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1c9d0 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1c9e0 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1c9f0 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1ca00 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1ca10 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1ca20 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1ca30 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1ca40 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1ca50 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1ca60 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1ca70 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1ca80 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1ca90 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1caa0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1cab0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
1cac0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
1cad0 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
1cae0 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
1caf0 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
1cb00 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1cb10 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
1cb20 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
1cb30 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
1cb40 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
1cb50 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
1cb60 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1cb70 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
1cb80 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
1cb90 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
1cba0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1cbb0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1cbc0 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
1cbd0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1cbe0 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
1cbf0 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
1cc00 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
1cc10 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
1cc20 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
1cc30 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
1cc40 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1cc50 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1cc60 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cc80 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
1cc90 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cca0 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
1ccb0 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
1ccc0 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
1ccd0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ccf0 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
1cd00 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
1cd10 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cd30 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
1cd40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1cd50 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
1cd60 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
1cd70 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1cd80 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
1cd90 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
1cda0 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
1cdb0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
1cdc0 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
1cdd0 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
1cde0 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
1cdf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ce00 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1ce10 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1ce20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1ce30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ce40 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1ce50 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
1ce60 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
1ce70 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
1ce80 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
1ce90 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
1cea0 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
1ceb0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
1cec0 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
1ced0 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
1cee0 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
1cef0 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
1cf00 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
1cf10 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
1cf20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1cf30 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
1cf40 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
1cf50 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
1cf60 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
1cf70 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
1cf80 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
1cf90 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1cfa0 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
1cfb0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
1cfc0 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
1cfd0 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
1cfe0 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
1cff0 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
1d000 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
1d010 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
1d020 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1d030 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
1d040 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
1d050 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
1d060 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
1d070 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
1d080 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
1d090 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
1d0a0 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
1d0b0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
1d0c0 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
1d0d0 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
1d0e0 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
1d0f0 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
1d100 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
1d110 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
1d120 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1d130 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1d140 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b   );.    cnt = 0;
1d150 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1d160 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
1d170 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1d180 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
1d190 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
1d1a0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
1d1b0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
1d1c0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
1d1d0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
1d1e0 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
1d1f0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
1d200 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1d210 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
1d220 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
1d230 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
1d240 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
1d250 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
1d260 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
1d270 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
1d280 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
1d290 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
1d2a0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1d2b0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1d2c0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1d2d0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1d2e0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  owid ){.      v 
1d2f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
1d300 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1d310 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1d320 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20   if( v==0 ){.   
1d330 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d340 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1d350 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1d360 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1d370 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1d380 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1d390 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d3a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1d3b0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1d3c0 20 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20        v = 1;.   
1d3d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1d3e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
1d3f0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1d400 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72  IsValid(pC->pCur
1d410 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
1d420 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d430 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
1d440 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
1d450 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
1d460 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
1d470 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c    /* Cannot fail
1d480 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65   following Btree
1d490 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20  Last() */.      
1d4a0 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52      if( v==MAX_R
1d4b0 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1d4c0 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
1d4d0 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
1d4e0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1d4f0 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20           v++;.  
1d500 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d510 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1d520 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1d530 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1d540 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1d550 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41   ){.        /* A
1d560 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1d570 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1d580 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1d590 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1d5a0 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  >0 );.        if
1d5b0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
1d5c0 20 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72           for(pFr
1d5d0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
1d5e0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
1d5f0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
1d600 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1d610 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1d620 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1d630 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1d640 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1d650 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
1d660 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
1d670 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
1d680 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
1d690 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  3];.        }els
1d6a0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
1d6b0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1d6c0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1d6d0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1d6e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1d6f0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
1d700 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d            pMem =
1d710 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1d720 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  3];.        }.. 
1d730 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
1d740 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1d750 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
1d760 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1d770 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
1d780 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1d790 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
1d7a0 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
1d7b0 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
1d7c0 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
1d7d0 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
1d7e0 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
1d7f0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1d800 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
1d810 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
1d820 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
1d830 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d840 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1d850 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1d860 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1d870 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1d880 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1d890 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1d8a0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1d8b0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1d8c0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1d8d0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1d8e0 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1d8f0 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1d900 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1d910 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1d920 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1d930 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
1d940 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
1d950 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
1d960 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
1d970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
1d990 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
1d9a0 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
1d9b0 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f    v = db->lastRo
1d9c0 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20 3d  wid;.      cnt =
1d9d0 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
1d9e0 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 30        if( cnt==0
1d9f0 20 26 26 20 28 76 26 30 78 66 66 66 66 66 66 29   && (v&0xffffff)
1da00 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==v ){.         
1da10 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65   v++;.        }e
1da20 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
1da30 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
1da40 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
1da50 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1da60 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78 66  cnt<5 ) v &= 0xf
1da70 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
1da80 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1da90 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1daa0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1dab0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
1dac0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1dad0 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
1dae0 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20  }while( cnt<100 
1daf0 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
1db00 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   && res==0 );.  
1db10 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1db20 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
1db30 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1db40 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20  SQLITE_FULL;.   
1db50 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1db60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1db70 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1db80 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1db90 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1dba0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1dbb0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1dbc0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1dbd0 41 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  ALE;.  }.  MemSe
1dbe0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1dbf0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74  MEM_Int);.  pOut
1dc00 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
1dc10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1dc20 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
1dc30 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72  3 P4 P5.**.** Wr
1dc40 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
1dc50 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
1dc60 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
1dc70 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
1dc80 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
1dc90 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
1dca0 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
1dcb0 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
1dcc0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
1dcd0 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
1dce0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
1dcf0 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
1dd00 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1dd10 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1dd20 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1dd30 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1dd40 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
1dd50 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
1dd60 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1dd70 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
1dd80 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1dd90 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1dda0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1ddb0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1ddc0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
1ddd0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
1dde0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
1ddf0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
1de00 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
1de10 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
1de20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
1de30 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1de40 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
1de50 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
1de60 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
1de70 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
1de80 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1de90 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
1dea0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1deb0 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
1dec0 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
1ded0 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
1dee0 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
1def0 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
1df00 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
1df10 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1df20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
1df30 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
1df40 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
1df50 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
1df60 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
1df70 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
1df80 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
1df90 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
1dfa0 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
1dfb0 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
1dfc0 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
1dfd0 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
1dfe0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
1dff0 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
1e000 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
1e010 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
1e020 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
1e030 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
1e040 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
1e050 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
1e060 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
1e070 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
1e080 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
1e090 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
1e0a0 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
1e0b0 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
1e0c0 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
1e0d0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
1e0e0 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
1e0f0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
1e100 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
1e110 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
1e120 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
1e130 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
1e140 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
1e150 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
1e160 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1e170 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
1e180 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
1e190 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
1e1a0 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
1e1b0 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
1e1c0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
1e1d0 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
1e1e0 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
1e1f0 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
1e200 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
1e210 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
1e220 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
1e230 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
1e240 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
1e250 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
1e260 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
1e270 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
1e280 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
1e290 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
1e2a0 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
1e2b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
1e2c0 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
1e2d0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
1e2e0 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
1e2f0 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
1e300 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
1e310 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
1e320 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
1e330 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
1e340 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
1e350 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
1e360 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
1e370 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
1e380 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
1e390 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
1e3a0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
1e3b0 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
1e3c0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
1e3d0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1e3e0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
1e3f0 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
1e400 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
1e410 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
1e420 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
1e430 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1e440 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
1e450 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
1e460 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
1e470 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
1e480 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1e490 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
1e4a0 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
1e4b0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
1e4c0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1e4d0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  Zero;        /* 
1e4e0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62  Number of zero-b
1e4f0 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a  ytes to append *
1e500 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
1e510 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
1e520 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
1e530 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
1e540 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
1e550 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1e560 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
1e570 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
1e580 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
1e590 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1e5a0 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61  Tbl; /* Table na
1e5b0 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
1e5c0 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   opdate hook */.
1e5d0 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
1e5e0 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
1e5f0 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
1e600 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
1e610 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
1e620 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 70 2d 3e  ..  pData = &p->
1e630 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
1e640 20 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d   pKey = &p->aMem
1e650 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
1e660 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e670 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1e680 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1e690 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e6a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1e6b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e6c0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1e6d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e6e0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1e6f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e700 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
1e710 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
1e720 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1e730 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
1e740 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
1e750 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1e760 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
1e770 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 70 4b  y);..  iKey = pK
1e780 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70  ey->u.i;.  if( p
1e790 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1e7a0 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
1e7b0 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f  ange++;.  if( pO
1e7c0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c  p->p5 & OPFLAG_L
1e7d0 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c  ASTROWID ) db->l
1e7e0 61 73 74 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d  astRowid = pKey-
1e7f0 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 44 61 74  >u.i;.  if( pDat
1e800 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  a->flags & MEM_N
1e810 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61  ull ){.    pData
1e820 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61  ->z = 0;.    pDa
1e830 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c  ta->n = 0;.  }el
1e840 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1e850 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
1e860 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
1e870 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52  ) );.  }.  seekR
1e880 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
1e890 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
1e8a0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
1e8b0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
1e8c0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
1e8d0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
1e8e0 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44  {.    nZero = pD
1e8f0 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
1e900 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f  }else{.    nZero
1e910 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69   = 0;.  }.  sqli
1e920 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
1e930 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
1e940 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73  or, 0);.  rc = s
1e950 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
1e960 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  t(pC->pCursor, 0
1e970 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  , iKey,.        
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74    pData->z, pDat
1e9a0 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20  a->n, nZero,.   
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9c0 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26         pOp->p5 &
1e9d0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20   OPFLAG_APPEND, 
1e9e0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
1e9f0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1ea00 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65  id = 0;.  pC->de
1ea10 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1ea20 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1ea30 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1ea40 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
1ea50 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1ea60 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
1ea70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1ea80 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
1ea90 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1eaa0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
1eab0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
1eac0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
1ead0 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
1eae0 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
1eaf0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
1eb00 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
1eb10 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
1eb20 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
1eb30 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1eb40 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
1eb50 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
1eb60 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
1eb70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
1eb80 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
1eb90 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1eba0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1ebb0 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
1ebc0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
1ebd0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
1ebe0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
1ebf0 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
1ec00 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
1ec10 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
1ec20 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
1ec30 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
1ec40 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
1ec50 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
1ec60 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
1ec70 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
1ec80 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1ec90 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
1eca0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
1ecb0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
1ecc0 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
1ecd0 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
1ece0 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
1ecf0 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
1ed00 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f  thin an Next loo
1ed10 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  p..**.** If the 
1ed20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
1ed30 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74  lag of P2 is set
1ed40 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
1ed50 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
1ed60 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
1ed70 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
1ed80 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
1ed90 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
1eda0 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
1edb0 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
1edc0 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
1edd0 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
1ede0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
1edf0 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65  n it is the name
1ee00 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
1ee10 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e  at P1 is.** poin
1ee20 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70  ting to.  The up
1ee30 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62  date hook will b
1ee40 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74  e invoked, if it
1ee50 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50   exists..** If P
1ee60 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
1ee70 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  en the P1 cursor
1ee80 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
1ee90 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73  positioned.** us
1eea0 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
1eeb0 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
1eec0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
1eed0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
1eee0 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a  : {.  i64 iKey;.
1eef0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ef00 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20  ;..  iKey = 0;. 
1ef10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1ef20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1ef30 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1ef40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1ef50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1ef60 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1ef70 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1ef80 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76  =0 );  /* Only v
1ef90 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61  alid for real ta
1efa0 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74  bles, no pseudot
1efb0 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
1efc0 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
1efd0 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1efe0 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74  d, set iKey to t
1eff0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a  he rowid of the.
1f000 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64    ** row being d
1f010 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  eleted..  */.  i
1f020 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  f( db->xUpdateCa
1f030 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1f040 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72  4.z ){.    asser
1f050 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1f060 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1f070 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1f080 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20  ;  /* lastRowid 
1f090 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20  set by previous 
1f0a0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20  OP_NotFound */. 
1f0b0 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61     iKey = pC->la
1f0c0 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20  stRowid;.  }..  
1f0d0 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65  /* The OP_Delete
1f0e0 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66   opcode always f
1f0f0 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74  ollows an OP_Not
1f100 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73  Exists or OP_Las
1f110 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c  t or.  ** OP_Col
1f120 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  umn on the same 
1f130 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e  table without an
1f140 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70  y intervening op
1f150 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20  erations that.  
1f160 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72  ** might move or
1f170 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
1f180 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63  cursor.  Hence c
1f190 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61  ursor pC is alwa
1f1a0 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a  ys pointing.  **
1f1b0 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62   to the row to b
1f1c0 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  e deleted and th
1f1d0 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  e sqlite3VdbeCur
1f1e0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72  sorMoveto() oper
1f1f0 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77  ation.  ** below
1f200 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d   is always a no-
1f210 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61  op and cannot fa
1f220 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e  il.  We will run
1f230 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75   it anyhow, thou
1f240 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72  gh,.  ** to guar
1f250 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72 65  d against future
1f260 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
1f270 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
1f280 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20    **/.  assert( 
1f290 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1f2a0 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
1f2b0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1f2c0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
1f2d0 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
1f2e0 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
1f2f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f300 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  r;..  sqlite3Btr
1f310 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeSetCachedRowid
1f320 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29  (pC->pCursor, 0)
1f330 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1f340 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e  BtreeDelete(pC->
1f350 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e  pCursor);.  pC->
1f360 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1f370 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
1f380 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
1f390 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
1f3a0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
1f3b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
1f3c0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1f3d0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
1f3e0 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
1f3f0 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62  r *zDb = db->aDb
1f400 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
1f410 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1f420 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  *zTbl = pOp->p4.
1f430 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  z;.    db->xUpda
1f440 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
1f450 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
1f460 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a  E_DELETE, zDb, z
1f470 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
1f480 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
1f490 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =0 );.  }.  if( 
1f4a0 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1f4b0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1f4c0 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b  hange++;.  break
1f4d0 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
1f4e0 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
1f4f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
1f500 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
1f510 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
1f520 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
1f530 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
1f540 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
1f550 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
1f560 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
1f570 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
1f580 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
1f590 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
1f5a0 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
1f5b0 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
1f5c0 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
1f5d0 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
1f5e0 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
1f5f0 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
1f600 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
1f610 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
1f620 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
1f630 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f640 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
1f650 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1f660 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1f670 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
1f680 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
1f690 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1f6a0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
1f6b0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
1f6c0 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
1f6d0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
1f6e0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
1f6f0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
1f700 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
1f710 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
1f720 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
1f730 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1f740 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
1f750 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
1f760 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
1f770 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
1f780 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
1f790 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
1f7a0 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
1f7b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1f7c0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1f7d0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1f7e0 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
1f7f0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
1f800 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
1f810 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
1f820 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
1f830 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
1f840 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78  e P3 register ex
1f850 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
1f860 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
1f870 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
1f880 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
1f890 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
1f8a0 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
1f8b0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
1f8c0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
1f8d0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
1f8e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1f8f0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
1f900 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
1f910 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
1f920 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
1f930 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
1f940 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20  n;.  i64 n64;.. 
1f950 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
1f960 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a  [pOp->p2];..  /*
1f970 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65   Note that RowKe
1f980 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72  y and RowData ar
1f990 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79  e really exactly
1f9a0 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75   the same instru
1f9b0 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
1f9c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f9d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f9e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1f9f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1fa00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1fa10 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f  sTable || pOp->o
1fa20 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79  pcode==OP_RowKey
1fa30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1fa40 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70  ->isIndex || pOp
1fa50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
1fa60 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
1fa70 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1fa80 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
1fa90 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1faa0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1fab0 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1fac0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1fad0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1fae0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
1faf0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1fb00 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1fb10 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
1fb20 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
1fb30 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
1fb40 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
1fb50 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
1fb60 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
1fb70 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
1fb80 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
1fb90 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
1fba0 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
1fbb0 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
1fbc0 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
1fbd0 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
1fbe0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1fbf0 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
1fc00 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
1fc10 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
1fc20 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
1fc30 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
1fc40 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
1fc50 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
1fc60 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1fc70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1fc80 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1fc90 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
1fca0 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
1fcb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1fcc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
1fcd0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
1fce0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
1fcf0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1fd00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1fd10 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
1fd20 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65   &n64);.    asse
1fd30 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1fd40 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  K );    /* True 
1fd50 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
1fd60 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
1fd70 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  bove */.    if( 
1fd80 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
1fd90 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
1fda0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
1fdb0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
1fdc0 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36  .    n = (u32)n6
1fdd0 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  4;.  }else{.    
1fde0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fdf0 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
1fe00 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &n);.    assert
1fe10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1fe20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a  );    /* DataSiz
1fe30 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
1fe40 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33  */.    if( n>(u3
1fe50 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
1fe60 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
1fe70 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
1fe80 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
1fe90 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
1fea0 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
1feb0 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  , n, 0) ){.    g
1fec0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
1fed0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20    pOut->n = n;. 
1fee0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1fef0 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pOut, MEM_Blob);
1ff00 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64  .  if( pC->isInd
1ff10 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  ex ){.    rc = s
1ff20 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70  qlite3BtreeKey(p
1ff30 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
1ff40 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->z);.  }else{. 
1ff50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ff60 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20  treeData(pCrsr, 
1ff70 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
1ff80 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
1ff90 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
1ffa0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
1ffb0 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74  lob is ever cast
1ffc0 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50   to text */.  UP
1ffd0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1ffe0 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
1fff0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20000 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
20010 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  *.**.** Store in
20020 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
20030 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
20040 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
20050 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
20060 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
20070 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
20080 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
20090 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
200a0 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
200b0 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
200c0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
200d0 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
200e0 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
200f0 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
20100 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
20110 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
20120 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
20130 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
20140 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
20150 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
20160 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
20170 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
20180 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
20190 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  4 v;.  sqlite3_v
201a0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
201b0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
201c0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
201d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
201e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
201f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20200 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20210 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20220 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
20230 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
20240 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66  leReg==0 );.  if
20250 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
20260 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69  .    /* Do nothi
20270 6e 67 20 73 6f 20 74 68 61 74 20 72 65 67 5b 50  ng so that reg[P
20280 32 5d 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 20  2] remains NULL 
20290 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  */.    break;.  
202a0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
202b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
202c0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
202d0 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
202e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
202f0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
20300 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
20310 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
20320 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
20330 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
20340 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
20350 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
20360 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
20370 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 69  >xRowid );.    i
20380 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
20390 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
203a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
203b0 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  se;.    rc = pMo
203c0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
203d0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
203e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
203f0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
20400 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
20410 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
20420 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62  rrMsg;.    pVtab
20430 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
20440 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
20450 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
20460 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
20470 69 73 75 73 65 3b 0a 23 65 6e 64 69 66 20 2f 2a  isuse;.#endif /*
20480 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
20490 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
204a0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
204b0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
204c0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
204d0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
204e0 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66  veto(pC);.    if
204f0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
20500 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20510 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69      if( pC->rowi
20520 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  dIsValid ){.    
20530 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f    v = pC->lastRo
20540 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  wid;.    }else{.
20550 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
20560 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
20570 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
20580 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
20590 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
205a0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
205b0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
205c0 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f  oveto() above */
205d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
205e0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 4d 65  t->u.i = v;.  Me
205f0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
20600 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
20610 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20620 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
20630 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
20640 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
20650 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
20660 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
20670 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
20680 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
20690 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
206a0 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
206b0 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
206c0 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
206d0 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
206e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
206f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20700 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20710 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20720 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20730 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20740 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
20750 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
20760 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
20770 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d  d = 0;.  if( pC-
20780 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  >pCursor ){.    
20790 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
207a0 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72  rCursor(pC->pCur
207b0 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  sor);.  }.  brea
207c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
207d0 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Last P1 P2 * * 
207e0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
207f0 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
20800 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
20810 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
20820 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
20830 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73  refer to the las
20840 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
20850 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
20860 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
20870 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
20880 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
20890 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
208a0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
208b0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
208c0 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
208d0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
208e0 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
208f0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
20900 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
20910 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  on..*/.case OP_L
20920 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
20930 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
20940 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
20950 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
20960 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
20970 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
20980 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20990 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
209a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
209b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
209c0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
209d0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
209e0 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
209f0 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c    res = 1;.  }el
20a00 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
20a10 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
20a20 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a  rsr, &res);.  }.
20a30 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
20a40 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64  (u8)res;.  pC->d
20a50 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
20a60 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  0;.  pC->rowidIs
20a70 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
20a80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20a90 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
20aa0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72  ( pOp->p2>0 && r
20ab0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
20ac0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
20ad0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
20ae0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
20af0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
20b00 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
20b10 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
20b20 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
20b30 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
20b40 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
20b50 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
20b60 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
20b70 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
20b80 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
20b90 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
20ba0 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
20bb0 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
20bc0 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
20bd0 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
20be0 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
20bf0 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
20c00 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
20c10 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
20c20 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
20c30 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
20c40 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
20c50 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
20c60 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
20c70 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
20c80 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
20c90 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
20ca0 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
20cb0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
20cc0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
20cd0 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
20ce0 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
20cf0 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
20d00 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
20d10 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
20d20 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
20d30 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
20d40 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
20d50 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
20d60 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
20d70 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
20d80 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b  TATUS_SORT-1]++;
20d90 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
20da0 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
20db0 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
20dc0 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
20dd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
20de0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
20df0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
20e00 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
20e10 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
20e20 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
20e30 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
20e40 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
20e50 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
20e60 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
20e70 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
20e80 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
20e90 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
20ea0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
20eb0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
20ec0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
20ed0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
20ee0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
20ef0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
20f00 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
20f10 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
20f20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
20f30 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20f40 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
20f50 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
20f60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20f70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20f80 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20f90 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20fa0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20fb0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
20fc0 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43   (pCrsr = pC->pC
20fd0 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
20fe0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20ff0 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
21000 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74  res);.    pC->at
21010 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f  First = res==0 ?
21020 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  1:0;.    pC->def
21030 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
21040 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
21050 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21060 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
21070 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
21080 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d  }else{.    res =
21090 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   1;.  }.  pC->nu
210a0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
210b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
210c0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
210d0 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
210e0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
210f0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
21100 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21110 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
21120 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
21130 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
21140 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
21150 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
21160 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
21170 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
21180 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
21190 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
211a0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
211b0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
211c0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
211d0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
211e0 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
211f0 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
21200 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
21210 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
21220 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
21230 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
21240 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
21250 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
21260 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  -table..**.** Se
21270 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
21280 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
21290 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
212a0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
212b0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
212c0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
212d0 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
212e0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
212f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
21300 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
21310 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
21320 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
21330 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
21340 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
21350 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
21360 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
21370 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
21380 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
21390 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
213a0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
213b0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
213c0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
213d0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
213e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  .*/.case OP_Prev
213f0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
21400 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
21410 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  xt: {        /* 
21420 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
21430 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21440 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
21450 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b  nt res;..  CHECK
21460 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
21470 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21480 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21490 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
214a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
214b0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
214c0 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ==0 ){.    break
214d0 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74  ;  /* See ticket
214e0 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20   #2273 */.  }.  
214f0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
21500 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
21510 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  ==0 ){.    pC->n
21520 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 20 20  ullRow = 1;.    
21530 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 73  break;.  }.  res
21540 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20   = 1;.  assert( 
21550 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
21560 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
21570 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21580 4e 65 78 74 20 3f 20 73 71 6c 69 74 65 33 42 74  Next ? sqlite3Bt
21590 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26  reeNext(pCrsr, &
215a0 72 65 73 29 20 3a 0a 20 20 20 20 20 20 20 20 20  res) :.         
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215c0 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
215d0 65 50 72 65 76 69 6f 75 73 28 70 43 72 73 72 2c  ePrevious(pCrsr,
215e0 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
215f0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
21600 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
21610 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21620 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
21630 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
21640 70 32 20 2d 20 31 3b 0a 20 20 20 20 69 66 28 20  p2 - 1;.    if( 
21650 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f  pOp->p5 ) p->aCo
21660 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d  unter[pOp->p5-1]
21670 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
21680 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
21690 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
216a0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20  +;.#endif.  }.  
216b0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
216c0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
216d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
216e0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
216f0 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  * P5.**.** Regis
21700 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 20 53  ter P2 holds a S
21710 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
21720 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
21730 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
21740 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
21750 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
21760 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
21770 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
21780 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
21790 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
217a0 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
217b0 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
217c0 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
217d0 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
217e0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
217f0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
21800 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
21810 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
21820 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
21830 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
21840 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
21850 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
21860 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  _Insert..*/.case
21870 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
21880 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
21890 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
218a0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
218b0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65  pCrsr;.  int nKe
218c0 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  y;.  const char 
218d0 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74  *zKey;..  assert
218e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
218f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
21900 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
21910 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21920 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21930 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
21940 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
21950 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
21960 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
21970 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
21980 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
21990 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
219a0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45  =0 );.    rc = E
219b0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
219c0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
219d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
219e0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
219f0 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
21a00 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
21a10 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
21a20 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
21a30 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
21a40 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
21a50 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
21a60 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21a70 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
21a80 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
21a90 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
21aa0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
21ab0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
21ac0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
21ad0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21ae0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
21af0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21b00 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
21b10 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
21b20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
21b30 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
21b40 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
21b50 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
21b60 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
21b70 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
21b80 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
21b90 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
21ba0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
21bb0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
21bc0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
21bd0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
21be0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
21bf0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
21c00 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
21c10 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
21c20 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
21c30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
21c40 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
21c50 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ->p3<=p->nMem+1 
21c60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21c70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21c80 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21c90 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21ca0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21cb0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21cc0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
21cd0 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
21ce0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
21cf0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
21d00 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
21d10 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
21d20 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
21d30 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
21d40 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  r.aMem = &p->aMe
21d50 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
21d60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21d70 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
21d80 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
21d90 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
21da0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
21db0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
21dc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21dd0 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
21de0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
21df0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
21e00 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
21e10 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21e20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
21e30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21e40 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
21e50 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
21e60 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
21e70 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
21e80 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
21e90 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
21ea0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
21eb0 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
21ec0 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
21ed0 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
21ee0 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
21ef0 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
21f00 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
21f10 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
21f20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
21f30 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
21f40 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
21f50 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
21f60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
21f70 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
21f80 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
21f90 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
21fa0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
21fb0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
21fc0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20  .  i64 rowid;.. 
21fd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21fe0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21ff0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22000 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22010 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22020 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
22030 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
22040 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
22050 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
22060 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
22070 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
22080 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 72  .    if( NEVER(r
22090 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  c) ) goto abort_
220a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
220b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
220c0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
220d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
220e0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
220f0 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  .    if( !pC->nu
22100 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72  llRow ){.      r
22110 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
22120 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73  dxRowid(db, pCrs
22130 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, &rowid);.    
22140 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
22150 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
22160 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22170 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
22180 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
22190 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
221a0 6e 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  nt);.      pOut-
221b0 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20  >u.i = rowid;.  
221c0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
221d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
221e0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
221f0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34   P5.**.** The P4
22200 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
22210 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
22220 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
22230 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
22240 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
22250 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
22260 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
22270 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
22280 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
22290 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
222a0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
222b0 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68   the ROWID on th
222c0 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
222d0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
222e0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
222f0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
22300 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
22310 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
22320 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
22330 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
22340 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
22350 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
22360 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74  P5 is non-zero t
22370 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  hen the key valu
22380 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62  e is increased b
22390 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a  y an epsilon .**
223a0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f   prior to the co
223b0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20  mparison.  This 
223c0 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20  make the opcode 
223d0 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20  work like IdxGT 
223e0 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69  except.** that i
223f0 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72  f the key from r
22400 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20  egister P3 is a 
22410 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65  prefix of the ke
22420 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c  y in the cursor,
22430 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
22440 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20  s false whereas 
22450 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65  it would be true
22460 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a   with IdxGT..*/.
22470 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
22480 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
22490 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
224a0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
224b0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
224c0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
224d0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
224e0 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
224f0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
22500 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
22510 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
22520 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
22530 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
22540 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
22550 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
22560 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
22570 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
22580 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
22590 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
225a0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
225b0 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
225c0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
225d0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
225e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
225f0 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
22600 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
22610 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
22620 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a  epsilon prior .*
22630 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  * to the compari
22640 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73  son.  This makes
22650 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
22660 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a   like IdxLE..*/.
22670 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
22680 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22690 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
226a0 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20  IdxGE: {        
226b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
226c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
226d0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
226e0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
226f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22700 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22710 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22720 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22730 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22740 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
22750 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
22760 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
22770 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22780 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22790 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
227a0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
227b0 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  >p5==1 );.    as
227c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
227d0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
227e0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
227f0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
22800 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
22810 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
22820 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
22830 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
22840 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
22850 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   | UNPACKED_IGNO
22860 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65  RE_ROWID;.    }e
22870 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  lse{.      r.fla
22880 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47  gs = UNPACKED_IG
22890 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20  NORE_ROWID;.    
228a0 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  }.    r.aMem = &
228b0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
228c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
228d0 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
228e0 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73  are(pC, &r, &res
228f0 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
22900 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
22910 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
22920 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  -res;.    }else{
22930 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
22940 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
22950 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65  dxGE );.      re
22960 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  s++;.    }.    i
22970 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20  f( res>0 ){.    
22980 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22990 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1 ;.    }.  }. 
229a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
229b0 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
229c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
229d0 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
229e0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
229f0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
22a00 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
22a10 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
22a20 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
22a30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
22a40 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
22a50 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
22a60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
22a70 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
22a80 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
22a90 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
22aa0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
22ab0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
22ac0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
22ad0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
22ae0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
22af0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
22b00 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
22b10 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
22b20 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
22b30 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
22b40 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
22b50 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
22b60 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
22b70 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
22b80 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
22b90 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
22ba0 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
22bb0 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
22bc0 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
22bd0 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
22be0 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
22bf0 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
22c00 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
22c10 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
22c20 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
22c30 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
22c40 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f  ister P2.  If no
22c50 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65   page .** moveme
22c60 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
22c70 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62  (because the tab
22c80 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
22c90 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a   was already .**
22ca0 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
22cb0 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
22cc0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
22cd0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
22ce0 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56   P2..** If AUTOV
22cf0 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
22d00 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  d then a zero is
22d10 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
22d20 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
22d30 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
22d40 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
22d50 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d  : {     /* out2-
22d60 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
22d70 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e  int iMoved;.  in
22d80 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a  t iCnt;.  Vdbe *
22d90 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62  pVdbe;.  int iDb
22da0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
22db0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
22dc0 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20  LE.  iCnt = 0;. 
22dd0 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70   for(pVdbe=db->p
22de0 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64  Vdbe; pVdbe; pVd
22df0 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78  be = pVdbe->pNex
22e00 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62  t){.    if( pVdb
22e10 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  e->magic==VDBE_M
22e20 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62  AGIC_RUN && pVdb
22e30 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c  e->inVtabMethod<
22e40 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d  2 && pVdbe->pc>=
22e50 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b  0 ){.      iCnt+
22e60 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c  +;.    }.  }.#el
22e70 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e  se.  iCnt = db->
22e80 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23  activeVdbeCnt;.#
22e90 65 6e 64 69 66 0a 20 20 69 66 28 20 69 43 6e 74  endif.  if( iCnt
22ea0 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  >1 ){.    rc = S
22eb0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
22ec0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
22ed0 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d   = OE_Abort;.  }
22ee0 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
22ef0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
22f00 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a  ert( iCnt==1 );.
22f10 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
22f20 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
22f30 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  iDb))!=0 );.    
22f40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22f50 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
22f60 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
22f70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
22f80 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
22f90 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
22fa0 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
22fb0 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
22fc0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
22fd0 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
22fe0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22ff0 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
23000 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
23010 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e  tPageMoved(&db->
23020 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64  aDb[iDb], iMoved
23030 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
23040 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
23050 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23060 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
23070 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
23080 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
23090 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
230a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
230b0 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
230c0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
230d0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
230e0 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
230f0 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
23100 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
23110 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
23120 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
23130 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
23140 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
23150 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
23160 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
23170 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
23180 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
23190 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
231a0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
231b0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
231c0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
231d0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
231e0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
231f0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
23200 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
23210 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
23220 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
23230 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
23240 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
23250 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
23260 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
23270 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
23280 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
23290 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
232a0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
232b0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
232c0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
232d0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
232e0 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
232f0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
23300 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
23310 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
23320 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
23330 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
23340 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
23350 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
23360 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
23370 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
23380 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
23390 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
233a0 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
233b0 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
233c0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
233d0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
233e0 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20  p->p2))!=0 );.  
233f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23400 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
23410 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
23420 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
23430 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
23440 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
23450 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
23460 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
23470 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
23480 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
23490 0a 20 20 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70  .      p->aMem[p
234a0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
234b0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
234c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
234d0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
234e0 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
234f0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
23500 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
23510 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
23520 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
23530 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
23540 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
23550 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
23560 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
23570 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
23580 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
23590 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
235a0 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
235b0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
235c0 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
235d0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
235e0 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
235f0 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
23600 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
23610 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
23620 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
23630 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
23640 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
23650 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
23660 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
23670 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
23680 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
23690 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
236a0 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
236b0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
236c0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
236d0 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
236e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
236f0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
23700 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
23710 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
23720 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
23730 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
23740 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
23750 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
23760 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
23770 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
23780 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
23790 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
237a0 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
237b0 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
237c0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
237d0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
237e0 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
237f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
23800 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73  rerelease */.cas
23810 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
23820 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
23830 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
23840 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
23850 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
23860 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d   *pDb;..  pgno =
23870 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
23880 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23890 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
238a0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
238b0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
238c0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
238d0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
238e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
238f0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
23900 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
23910 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
23920 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
23930 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
23940 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
23950 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41  = BTREE_LEAFDATA
23960 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20  |BTREE_INTKEY;. 
23970 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
23980 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  s = BTREE_ZERODA
23990 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  TA;.  }.  rc = s
239a0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
239b0 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
239c0 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
239d0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
239e0 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  no;.  MemSetType
239f0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
23a00 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
23a10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
23a20 65 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20  eSchema P1 P2 * 
23a30 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
23a40 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
23a50 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
23a60 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
23a70 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
23a80 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
23a90 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
23aa0 20 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20   P4.  P2 is the 
23ab0 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20  "force" flag.   
23ac0 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65  Always do.** the
23ad0 20 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69   parsing if P2 i
23ae0 73 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69  s true.  If P2 i
23af0 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68  s false, then th
23b00 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a  is routine is a.
23b10 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20  ** no-op if the 
23b20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75  schema is not cu
23b30 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20  rrently loaded. 
23b40 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
23b50 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c   if P2.** is fal
23b60 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  se, the SQLITE_M
23b70 41 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f  ASTER table is o
23b80 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68  nly parsed if th
23b90 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a  e rest of the.**
23ba0 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61   schema is alrea
23bb0 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74  dy loaded into t
23bc0 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e  he symbol table.
23bd0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23be0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
23bf0 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
23c00 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
23c10 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
23c20 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
23c30 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
23c40 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
23c50 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
23c60 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
23c70 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
23c80 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
23c90 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
23ca0 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
23cb0 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
23cc0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
23cd0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
23ce0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
23cf0 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e  ;..  /* If pOp->
23d00 70 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68  p2 is 0, then th
23d10 69 73 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69  is opcode is bei
23d20 6e 67 20 65 78 65 63 75 74 65 64 20 74 6f 20 72  ng executed to r
23d30 65 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ead a.  ** singl
23d40 65 20 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70  e row, for examp
23d50 6c 65 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65  le the row corre
23d60 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65  sponding to a ne
23d70 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65  w index.  ** cre
23d80 61 74 65 64 20 62 79 20 74 68 69 73 20 56 44 42  ated by this VDB
23d90 45 2c 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69  E, from the sqli
23da0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  te_master table.
23db0 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f   It only.  ** do
23dc0 65 73 20 74 68 69 73 20 69 66 20 74 68 65 20 63  es this if the c
23dd0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d  orresponding in-
23de0 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73  memory schema is
23df0 20 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20   currently.  ** 
23e00 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73  loaded. Otherwis
23e10 65 2c 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78  e, the new index
23e20 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20   definition can 
23e30 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a  be loaded along.
23e40 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65    ** with the re
23e50 73 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  st of the schema
23e60 20 77 68 65 6e 20 69 74 20 69 73 20 72 65 71 75   when it is requ
23e70 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ired..  **.  ** 
23e80 41 6c 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74  Although the mut
23e90 65 78 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72  ex on the BtShar
23ea0 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  ed object that c
23eb0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20  orresponds to.  
23ec0 2a 2a 20 64 61 74 61 62 61 73 65 20 69 44 62 20  ** database iDb 
23ed0 28 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f  (the database co
23ee0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c  ntaining the sql
23ef0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
23f00 0a 20 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68  .  ** read by th
23f10 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20  is instruction) 
23f20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c  is currently hel
23f30 64 2c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61  d, it is necessa
23f40 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69  ry to.  ** obtai
23f50 6e 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  n the mutexes on
23f60 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
23f70 74 61 62 61 73 65 73 20 62 65 66 6f 72 65 20 63  tabases before c
23f80 68 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20  hecking if.  ** 
23f90 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44  the schema of iD
23fa0 62 20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69  b is loaded. Thi
23fb0 73 20 69 73 20 62 65 63 61 75 73 65 2c 20 61 74  s is because, at
23fc0 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20   the start of.  
23fd0 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ** the sqlite3_e
23fe0 78 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77  xec() call below
23ff0 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e  , SQLite will in
24000 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74  voke .  ** sqlit
24010 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28  e3BtreeEnterAll(
24020 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65  ). If all mutexe
24030 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64  s are not alread
24040 79 20 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a  y held, the.  **
24050 20 69 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62   iDb mutex may b
24060 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65  e temporarily re
24070 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20  leased to avoid 
24080 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20  deadlock. If .  
24090 2a 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c  ** this happens,
240a0 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72   then some other
240b0 20 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65   thread may dele
240c0 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  te the in-memory
240d0 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66   .  ** schema of
240e0 20 64 61 74 61 62 61 73 65 20 69 44 62 20 62 65   database iDb be
240f0 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61  fore the SQL sta
24100 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65  tement runs. The
24110 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c   schema.  ** wil
24120 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65  l not be reloade
24130 64 20 62 65 63 75 61 73 65 20 74 68 65 20 64 62  d becuase the db
24140 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67  ->init.busy flag
24150 20 69 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20   is set. This.  
24160 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e  ** can result in
24170 20 61 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c   a "no such tabl
24180 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e: sqlite_master
24190 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a  " or "malformed.
241a0 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63    ** database sc
241b0 68 65 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e  hema" error bein
241c0 67 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  g returned to th
241d0 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61  e user..  */.  a
241e0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
241f0 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
24200 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
24210 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
24220 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20  eEnterAll(db);. 
24230 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20   if( pOp->p2 || 
24240 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
24250 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
24260 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a  Loaded) ){.    z
24270 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
24280 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
24290 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
242a0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
242b0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
242c0 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
242d0 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
242e0 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
242f0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
24300 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
24310 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
24320 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
24330 20 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20   WHERE %s",.    
24340 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
24350 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
24360 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
24370 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
24380 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
24390 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
243a0 65 7b 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73  e{.      (void)s
243b0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
243c0 64 62 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  db);.      asser
243d0 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
243e0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
243f0 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
24400 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
24410 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
24420 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
24430 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
24440 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
24450 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
24460 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
24470 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
24480 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
24490 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
244a0 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
244b0 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
244c0 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c  3DbFree(db, zSql
244d0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
244e0 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
244f0 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53    (void)sqlite3S
24500 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20  afetyOn(db);.   
24510 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
24520 42 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62  BtreeLeaveAll(db
24530 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
24540 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
24550 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
24560 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
24570 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
24580 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
24590 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
245a0 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
245b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
245c0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
245d0 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
245e0 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
245f0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
24600 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
24610 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
24620 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
24630 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
24640 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
24650 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
24660 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
24670 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
24680 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
24690 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
246a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
246b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
246c0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
246d0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
246e0 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
246f0 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
24700 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
24710 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
24720 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
24730 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
24740 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
24750 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
24760 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
24770 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
24780 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
24790 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
247a0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
247b0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
247c0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
247d0 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
247e0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
247f0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
24800 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
24810 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
24820 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
24830 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
24840 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
24850 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
24860 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
24870 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
24880 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
24890 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
248a0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
248b0 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
248c0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
248d0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
248e0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
248f0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
24900 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
24910 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
24920 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
24930 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
24940 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
24950 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
24960 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
24970 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
24980 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
24990 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
249a0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
249b0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
249c0 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
249d0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
249e0 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
249f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
24a00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
24a10 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
24a20 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
24a30 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
24a40 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
24a50 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
24a60 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
24a70 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
24a80 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
24a90 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
24aa0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
24ab0 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
24ac0 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
24ad0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
24ae0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
24af0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
24b00 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
24b10 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
24b20 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
24b30 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
24b40 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
24b50 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
24b60 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
24b70 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
24b80 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
24b90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
24ba0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
24bb0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
24bc0 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
24bd0 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
24be0 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
24bf0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
24c00 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
24c10 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
24c20 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
24c30 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
24c40 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
24c50 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
24c60 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
24c70 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
24c80 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
24c90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
24ca0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
24cb0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
24cc0 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
24cd0 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
24ce0 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
24cf0 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
24d00 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
24d10 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
24d20 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
24d30 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
24d40 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
24d50 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
24d60 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
24d70 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
24d80 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
24d90 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
24da0 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
24db0 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
24dc0 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
24dd0 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
24de0 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
24df0 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
24e00 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
24e10 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
24e20 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
24e30 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
24e40 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
24e50 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
24e60 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
24e70 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
24e80 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
24e90 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
24ea0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
24eb0 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
24ec0 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
24ed0 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
24ee0 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
24ef0 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
24f00 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
24f10 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
24f20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
24f30 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
24f40 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
24f50 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
24f60 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
24f70 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
24f80 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
24f90 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
24fa0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
24fb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24fc0 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
24fd0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
24fe0 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
24ff0 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
25000 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
25010 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
25020 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
25030 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
25040 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52  ining */.  .  nR
25050 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
25060 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
25070 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
25080 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25090 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
250a0 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
250b0 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
250c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
250d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
250e0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
250f0 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  Mem );.  pnErr =
25100 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
25110 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
25120 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
25130 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
25140 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
25150 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
25160 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
25170 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
25180 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
25190 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
251a0 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
251b0 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74  [j] = (int)sqlit
251c0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
251d0 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
251e0 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
251f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
25200 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
25210 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
25220 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35  sk & (1<<pOp->p5
25230 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73  ))!=0 );.  z = s
25240 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
25250 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
25260 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
25270 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20  aRoot, nRoot,.  
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
252a0 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20  int)pnErr->u.i, 
252b0 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
252c0 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f  3DbFree(db, aRoo
252d0 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69  t);.  pnErr->u.i
252e0 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69   -= nErr;.  sqli
252f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
25300 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
25310 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
25320 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
25330 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
25340 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
25350 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
25360 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
25370 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
25380 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
25390 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
253a0 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
253b0 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
253c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
253d0 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
253e0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
253f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
25400 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
25410 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
25420 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
25430 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
25440 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74  *.**.** Insert t
25450 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
25460 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65   held by registe
25470 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c  r P2 into a bool
25480 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c  ean index.** hel
25490 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  d in register P1
254a0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72  ..**.** An asser
254b0 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32  tion fails if P2
254c0 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
254d0 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  er..*/.case OP_R
254e0 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20  owSetAdd: {     
254f0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65    /* in2 */.  Me
25500 6d 20 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20 2a  m *pIdx;.  Mem *
25510 70 56 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  pVal;.  assert( 
25520 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
25530 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
25540 0a 20 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d  .  pIdx = &p->aM
25550 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
25560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
25570 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e   && pOp->p2<=p->
25580 6e 4d 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20 3d  nMem );.  pVal =
25590 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
255a0 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  2];.  assert( (p
255b0 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Val->flags & MEM
255c0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66  _Int)!=0 );.  if
255d0 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26  ( (pIdx->flags &
255e0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
255f0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
25600 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
25610 49 64 78 29 3b 0a 20 20 20 20 69 66 28 20 28 70  Idx);.    if( (p
25620 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Idx->flags & MEM
25630 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
25640 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
25650 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
25660 73 65 72 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f  sert(pIdx->u.pRo
25670 77 53 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69 29  wSet, pVal->u.i)
25680 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
25690 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52   Opcode: RowSetR
256a0 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ead P1 P2 P3 * *
256b0 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
256c0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
256d0 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69  e from boolean i
256e0 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20  ndex P1 and put 
256f0 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a  that value into.
25700 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  ** register P3. 
25710 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20   Or, if boolean 
25720 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74  index P1 is init
25730 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
25740 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
25750 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
25760 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
25770 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
25780 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
25790 20 6a 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a 20   jump, out3 */. 
257a0 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69 36   Mem *pIdx;.  i6
257b0 34 20 76 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  4 val;.  assert(
257c0 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
257d0 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
257e0 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
257f0 54 45 52 52 55 50 54 3b 0a 20 20 70 49 64 78 20  TERRUPT;.  pIdx 
25800 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
25810 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  p1];.  pOut = &p
25820 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
25830 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c  .  if( (pIdx->fl
25840 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
25850 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
25860 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49  te3RowSetNext(pI
25870 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26  dx->u.pRowSet, &
25880 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
25890 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
258a0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
258b0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
258c0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 64 78  eMemSetNull(pIdx
258d0 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  );.    pc = pOp-
258e0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
258f0 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65  {.    /* A value
25900 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d   was pulled from
25910 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
25920 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25930 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
25940 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 73  p->nMem );.    s
25950 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
25960 49 6e 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29  Int64(pOut, val)
25970 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25980 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
25990 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
259a0 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P4.**.** Regist
259b0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
259c0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
259d0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
259e0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
259f0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
25a00 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
25a10 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
25a20 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
25a30 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
25a40 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
25a50 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
25a60 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
25a70 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
25a80 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
25a90 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
25aa0 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
25ab0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
25ac0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
25ad0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
25ae0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
25af0 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
25b00 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
25b10 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
25b20 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
25b30 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
25b40 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
25b50 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
25b60 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
25b70 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
25b80 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
25b90 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
25ba0 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
25bb0 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
25bc0 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
25bd0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
25be0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
25bf0 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
25c00 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
25c10 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
25c20 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
25c30 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
25c40 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
25c50 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
25c60 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
25c70 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
25c80 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
25c90 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
25ca0 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
25cb0 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
25cc0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
25cd0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
25ce0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
25cf0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
25d00 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
25d10 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
25d20 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
25d30 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
25d40 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
25d50 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
25d60 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
25d70 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
25d80 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
25d90 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
25da0 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
25db0 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
25dc0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
25dd0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
25de0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
25df0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25e10 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
25e20 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
25e30 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
25e40 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
25e50 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
25e60 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
25e70 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
25e80 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
25e90 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
25ea0 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
25eb0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
25ec0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
25ed0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
25ee0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
25ef0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
25f00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
25f10 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
25f20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
25f30 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
25f40 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
25f50 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
25f60 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
25f70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
25f80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25f90 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
25fa0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
25fb0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
25fc0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
25fd0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
25fe0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
25ff0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
26000 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f    (u8)(iSet>=0 ?
26030 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78   iSet & 0xf : 0x
26040 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ff),.           
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a      pIn3->u.i);.
26070 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
26080 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
26090 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
260a0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
260b0 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
260c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
260d0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
260e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
260f0 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
26100 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
26110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
26120 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
26130 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
26140 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
26150 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
26160 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
26170 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
26180 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
26190 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
261a0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
261b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
261c0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
261d0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
261e0 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
261f0 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
26200 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
26210 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
26220 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
26230 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
26240 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
26250 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
26260 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
26270 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
26280 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
26290 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
262a0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
262b0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
262c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
262d0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
262e0 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
262f0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
26300 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
26310 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
26320 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
26330 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
26340 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
26350 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
26360 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
26370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
26380 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
26390 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
263a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
263b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
263c0 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
263d0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
263e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26400 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
26410 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
26420 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
26430 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26450 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
26460 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
26470 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
26480 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
26490 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
264a0 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
264b0 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
264c0 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
264d0 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
264e0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
264f0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
26500 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
26510 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
26520 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
26530 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
26540 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
26550 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
26560 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
26570 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
26580 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
26590 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
265a0 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
265b0 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
265c0 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
265d0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
265e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
265f0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
26600 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
26610 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
26620 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
26630 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
26640 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
26650 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
26660 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
26670 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
26680 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
26690 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
266a0 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
266b0 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
266c0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
266d0 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
266e0 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
266f0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
26700 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
26710 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
26720 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
26730 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
26740 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
26750 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
26760 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
26770 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
26780 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
26790 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
267a0 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
267b0 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
267c0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
267d0 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
267e0 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
267f0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
26800 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
26810 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
26820 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
26830 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
26840 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
26850 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
26860 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
26870 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
26880 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
26890 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
268a0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
268b0 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
268c0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
268d0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
268e0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
268f0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
26900 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
26910 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
26920 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
26930 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
26940 70 2d 3e 6e 46 72 61 6d 65 3e 64 62 2d 3e 61 4c  p->nFrame>db->aL
26950 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
26960 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
26970 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
26980 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
26990 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
269a0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
269b0 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
269c0 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
269d0 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
269e0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
269f0 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
26a00 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
26a10 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
26a20 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
26a30 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
26a40 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
26a50 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
26a60 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
26a70 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
26a80 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
26a90 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
26aa0 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
26ab0 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
26ac0 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
26ad0 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
26ae0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
26af0 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
26b00 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
26b10 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
26b20 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
26b30 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
26b40 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
26b50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
26b60 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
26b70 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
26b80 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
26b90 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
26ba0 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
26bb0 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
26bc0 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
26bd0 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
26be0 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
26bf0 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
26c00 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
26c10 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
26c20 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
26c30 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
26c40 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
26c50 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
26c60 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
26c70 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
26c80 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
26c90 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
26ca0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
26cb0 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
26cc0 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
26cd0 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
26ce0 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
26cf0 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20  eCursor *);.    
26d00 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
26d10 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
26d20 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
26d30 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
26d40 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
26d50 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
26d60 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
26d70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
26d80 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
26d90 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
26da0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
26db0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
26dc0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
26dd0 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
26de0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
26df0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
26e00 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
26e10 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
26e20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
26e30 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
26e40 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
26e50 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
26e60 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
26e70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
26e80 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
26e90 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
26ea0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
26eb0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
26ec0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
26ed0 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
26ee0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20  gram->token;..  
26ef0 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
26f00 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
26f10 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
26f20 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
26f30 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
26f40 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
26f50 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
26f60 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
26f70 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
26f80 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
26f90 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
26fa0 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
26fb0 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
26fc0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
26fd0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
26fe0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
26ff0 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
27000 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
27010 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
27020 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
27030 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
27040 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
27050 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
27060 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
27070 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
27080 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
27090 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
270a0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
270b0 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
270c0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
270d0 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
270e0 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
270f0 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
27100 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
27110 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
27120 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
27130 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
27140 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
27150 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
27160 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
27170 29 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  )&p->aMem[p->nMe
27180 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  m+1];.  p->aOp =
27190 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
271a0 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
271b0 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d  ram->nOp;.  pc =
271c0 20 2d 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d   -1;..  break;.}
271d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
271e0 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
271f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
27200 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
27210 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
27220 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
27230 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
27240 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
27250 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
27260 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
27270 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
27280 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
27290 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
272a0 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
272b0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
272c0 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
272d0 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
272e0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
272f0 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
27300 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
27310 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
27320 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
27330 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
27340 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
27350 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
27360 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
27370 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
27380 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
27390 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
273a0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
273b0 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
273c0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
273d0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
273e0 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
273f0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27400 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46  lease */.  VdbeF
27410 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
27420 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61  Mem *pIn;.  pFra
27430 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
27440 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
27450 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
27460 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
27470 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
27480 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
27490 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
274a0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
274b0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
274c0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
274d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
274e0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
274f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
27500 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
27510 64 65 3a 20 44 65 66 65 72 72 65 64 43 6f 6e 73  de: DeferredCons
27520 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
27530 2a 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20  * Increment the 
27540 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
27550 20 22 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74   "deferred const
27560 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 22  raint violation"
27570 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 62 79 20 50   counter.** by P
27580 31 20 28 50 31 20 6d 61 79 20 62 65 20 6e 65 67  1 (P1 may be neg
27590 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
275a0 65 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  e)..*/.case OP_D
275b0 65 66 65 72 72 65 64 43 6f 6e 73 3a 20 7b 0a 20  eferredCons: {. 
275c0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
275d0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ns += pOp->p1;. 
275e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
275f0 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
27600 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
27610 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
27620 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
27630 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
27640 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
27650 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
27660 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
27670 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
27680 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
27690 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
276a0 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
276b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
276c0 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
276d0 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
276e0 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
276f0 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
27700 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
27710 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
27720 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
27730 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
27740 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
27750 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
27760 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
27770 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
27780 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
27790 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
277a0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
277b0 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
277c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
277d0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
277e0 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  n2 */.  Mem *pIn
277f0 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  1;.  VdbeFrame *
27800 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
27810 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
27820 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
27830 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
27840 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
27850 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
27860 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
27870 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
27880 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
27890 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
278a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 73  Op->p1];.  }.  s
278b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
278c0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
278d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
278e0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
278f0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
27900 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
27910 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
27920 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
27930 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
27940 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
27950 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
27960 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
27970 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
27980 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
27990 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
279a0 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a   1 or greater, j
279b0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
279c0 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
279d0 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
279e0 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
279f0 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
27a00 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
27a10 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
27a20 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
27a30 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
27a40 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
27a50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
27a60 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
27a70 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
27a80 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
27a90 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
27aa0 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
27ab0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
27ac0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27ad0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
27ae0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
27af0 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
27b00 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
27b10 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
27b20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
27b30 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
27b40 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
27b50 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
27b60 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
27b70 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
27b80 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
27b90 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
27ba0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
27bb0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
27bc0 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
27bd0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
27be0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  */.  assert( pIn
27bf0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
27c00 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
27c10 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i<0 ){.     pc
27c20 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
27c30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27c40 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72  /* Opcode: IfZer
27c50 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
27c60 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
27c70 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
27c80 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75  is exactly 0, ju
27c90 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
27ca0 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
27cb0 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
27cc0 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
27cd0 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
27ce0 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
27cf0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
27d00 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
27d10 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
27d20 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
27d30 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  _IfZero: {      
27d40 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
27d50 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  /.  assert( pIn1
27d60 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
27d70 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
27d80 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63  .i==0 ){.     pc
27d90 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
27da0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27db0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
27dc0 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
27dd0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
27de0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
27df0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
27e00 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
27e10 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
27e20 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
27e30 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
27e40 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
27e50 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
27e60 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
27e70 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
27e80 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
27e90 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
27ea0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
27eb0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
27ec0 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
27ed0 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
27ee0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
27ef0 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
27f00 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
27f10 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
27f20 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ec;.  sqlite3_co
27f30 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
27f40 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
27f50 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  al;..  n = pOp->
27f60 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p5;.  assert( n>
27f70 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
27f80 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
27f90 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
27fa0 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
27fb0 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
27fc0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
27fd0 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
27fe0 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
27ff0 65 63 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70  ec;.    storeTyp
28000 65 49 6e 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f  eInfo(pRec, enco
28010 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78  ding);.  }.  ctx
28020 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
28030 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
28040 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
28050 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
28060 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
28070 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
28080 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
28090 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
280a0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
280b0 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
280c0 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
280d0 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
280e0 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
280f0 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
28100 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
28110 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66  .pColl = 0;.  if
28120 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61  ( ctx.pFunc->fla
28130 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
28140 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20  _NEEDCOLL ){.   
28150 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e   assert( pOp>p->
28160 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
28170 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
28180 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
28190 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
281a0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
281b0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
281c0 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
281d0 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
281e0 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
281f0 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
28200 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 63 74 78  pVal);.  if( ctx
28210 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
28220 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
28230 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
28240 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
28250 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
28260 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
28270 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  x.isError;.  }. 
28280 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
28290 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
282a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
282b0 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20  pcode: AggFinal 
282c0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
282d0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66  ** Execute the f
282e0 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
282f0 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
28300 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68  te.  P1 is.** th
28310 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
28320 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
28330 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68  cumulator for th
28340 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a  e aggregate..**.
28350 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
28360 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
28370 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66   that the step f
28380 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e  unction takes an
28390 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  d.** P4 is a poi
283a0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
283b0 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e  Def for this fun
283c0 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a  ction.  The P2.*
283d0 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  * argument is no
283e0 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f  t used by this o
283f0 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e  pcode.  It is on
28400 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61  ly there to disa
28410 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63  mbiguate.** func
28420 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74  tions that can t
28430 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62  ake varying numb
28440 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ers of arguments
28450 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67  .  The.** P4 arg
28460 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65  ument is only ne
28470 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67  eded for the deg
28480 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65  enerate case whe
28490 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
284a0 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
284b0 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
284c0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
284d0 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
284e0 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
284f0 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
28500 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
28510 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  ;.  pMem = &p->a
28520 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
28530 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
28540 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
28550 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
28560 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
28570 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
28580 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
28590 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
285a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
285b0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
285c0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
285d0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
285e0 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73  (pMem));.  }.  s
285f0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
28600 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
28610 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
28620 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
28630 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
28640 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
28650 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
28660 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
28670 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
28680 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
28690 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
286a0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
286b0 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
286c0 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
286d0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
286e0 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
286f0 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
28700 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
28710 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
28720 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
28730 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
28740 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
28750 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
28760 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
28770 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
28780 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
28790 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
287a0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
287b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
287c0 73 75 73 65 3b 20 0a 20 20 72 63 20 3d 20 73 71  suse; .  rc = sq
287d0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
287e0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b  p->zErrMsg, db);
287f0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
28800 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
28810 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
28820 69 73 75 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  isuse;.  break;.
28830 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
28840 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
28850 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
28860 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
28870 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
28880 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
28890 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
288a0 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
288b0 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
288c0 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
288d0 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
288e0 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
288f0 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
28900 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
28910 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
28920 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
28930 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
28940 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
28950 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
28960 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
28970 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
28980 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28990 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
289a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
289b0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
289c0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
289d0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
289e0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
289f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
28a00 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
28a10 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  Bt);.  if( rc==S
28a20 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
28a30 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
28a40 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
28a50 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72  ITE_OK;.  }.  br
28a60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
28a70 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65  * Opcode: Expire
28a80 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
28a90 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69  * Cause precompi
28aa0 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74  led statements t
28ab0 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  o become expired
28ac0 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61  . An expired sta
28ad0 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20  tement.** fails 
28ae0 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f  with an error co
28af0 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48  de of SQLITE_SCH
28b00 45 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65  EMA if it is eve
28b10 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28  r executed .** (
28b20 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70  via sqlite3_step
28b30 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  ())..** .** If P
28b40 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
28b50 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
28b60 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
28b70 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
28b80 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
28b90 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
28ba0 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
28bb0 74 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a  t is affected. .
28bc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
28bd0 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
28be0 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
28bf0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
28c00 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
28c10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
28c20 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
28c30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
28c40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28c50 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
28c60 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
28c70 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
28c80 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
28c90 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
28ca0 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
28cb0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
28cc0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
28cd0 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
28ce0 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
28cf0 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
28d00 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
28d10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
28d20 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
28d30 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
28d40 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
28d50 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
28d60 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
28d70 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
28d80 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
28d90 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
28da0 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
28db0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
28dc0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
28dd0 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
28de0 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
28df0 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
28e00 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
28e10 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
28e20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
28e30 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
28e40 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
28e50 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
28e60 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
28e70 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
28e80 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
28e90 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
28ea0 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
28eb0 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
28ec0 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
28ed0 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
28ee0 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
28ef0 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
28f00 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
28f10 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
28f20 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
28f30 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21 3d  ask & (1<<p1))!=
28f40 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
28f50 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
28f60 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
28f70 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
28f80 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
28f90 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
28fa0 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
28fb0 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
28fc0 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
28fd0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
28fe0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
28ff0 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
29000 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
29010 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
29020 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
29030 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
29040 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
29050 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
29060 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
29070 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
29080 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
29090 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
290a0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
290b0 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
290c0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
290d0 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
290e0 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
290f0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
29100 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
29110 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
29120 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
29130 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
29140 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
29150 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
29160 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
29170 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
29180 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
29190 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
291a0 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
291b0 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
291c0 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
291d0 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
291e0 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
291f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
29200 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
29210 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
29220 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
29230 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29240 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
29250 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
29260 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
29270 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
29280 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
29290 72 72 4d 73 67 20 3d 20 70 56 54 61 62 2d 3e 70  rrMsg = pVTab->p
292a0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
292b0 20 20 20 70 56 54 61 62 2d 3e 70 56 74 61 62 2d     pVTab->pVtab-
292c0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
292d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
292e0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
292f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
29300 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
29310 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29320 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
29330 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50  VCreate P1 * * P
29340 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
29350 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
29360 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
29370 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c  atabase P1. Call
29380 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
29390 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20  hod.** for that 
293a0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
293b0 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72  P_VCreate: {.  r
293c0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
293d0 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f  allCreate(db, pO
293e0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
293f0 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
29400 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
29410 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
29420 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
29430 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29440 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29450 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44  LE./* Opcode: VD
29460 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34  estroy P1 * * P4
29470 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
29480 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
29490 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
294a0 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c  tabase P1.  Call
294b0 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   the xDestroy me
294c0 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20  thod.** of that 
294d0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
294e0 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20  P_VDestroy: {.  
294f0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
29500 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 2;.  rc = sqli
29510 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
29520 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
29530 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d  pOp->p4.z);.  p-
29540 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
29550 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  0;.  break;.}.#e
29560 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
29570 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29580 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
29590 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
295a0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
295b0 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
295c0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
295d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
295e0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
295f0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
29600 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
29610 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
29620 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
29630 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
29640 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
29650 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
29660 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
29670 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
29680 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
29690 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
296a0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
296b0 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43  b_cursor *pVtabC
296c0 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33  ursor;.  sqlite3
296d0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
296e0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
296f0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72  pModule;..  pCur
29700 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72   = 0;.  pVtabCur
29710 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  sor = 0;.  pVtab
29720 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
29730 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
29740 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
29750 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
29760 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
29770 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65  pVtab && pModule
29780 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
29790 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
297a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
297b0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d  o_misuse;.  rc =
297c0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
297d0 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
297e0 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  sor);.  sqlite3D
297f0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
29800 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
29810 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
29820 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
29830 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66  ErrMsg = 0;.  if
29840 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
29850 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
29860 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
29870 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
29880 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
29890 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
298a0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
298b0 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
298c0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
298d0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
298e0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20    /* Initialise 
298f0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
29900 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
29910 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
29920 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
29930 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
29940 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
29950 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
29960 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
29970 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
29980 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
29990 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
299a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
299b0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
299c0 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
299d0 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
299e0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
299f0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
29a00 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
29a10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29a20 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
29a30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
29a40 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
29a50 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
29a60 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
29a70 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
29a80 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
29a90 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
29aa0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
29ab0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
29ac0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
29ad0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
29ae0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
29af0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
29b00 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
29b10 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
29b20 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
29b30 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
29b40 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
29b50 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
29b60 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
29b70 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
29b80 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
29b90 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
29ba0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
29bb0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
29bc0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
29bd0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
29be0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
29bf0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
29c00 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
29c10 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
29c20 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
29c30 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
29c40 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
29c50 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
29c60 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
29c70 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
29c80 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
29c90 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
29ca0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
29cb0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
29cc0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
29cd0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
29ce0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
29cf0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
29d00 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
29d10 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
29d20 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
29d30 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
29d40 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
29d50 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
29d60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
29d70 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
29d80 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
29d90 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
29da0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
29db0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
29dc0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
29dd0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
29de0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
29df0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
29e00 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
29e10 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
29e20 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
29e30 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
29e40 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
29e50 20 20 70 51 75 65 72 79 20 3d 20 26 70 2d 3e 61    pQuery = &p->a
29e60 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
29e70 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
29e80 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e  1];.  pCur = p->
29e90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29ea0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
29eb0 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
29ec0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
29ed0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
29ee0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
29ef0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
29f00 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  sor;.  pVtab = p
29f10 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
29f20 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
29f30 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a  Vtab->pModule;..
29f40 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e    /* Grab the in
29f50 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61  dex number and a
29f60 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a  rgc parameters *
29f70 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75  /.  assert( (pQu
29f80 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  ery->flags&MEM_I
29f90 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d  nt)!=0 && pArgc-
29fa0 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
29fb0 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74  );.  nArg = (int
29fc0 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69  )pArgc->u.i;.  i
29fd0 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75  Query = (int)pQu
29fe0 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20  ery->u.i;..  /* 
29ff0 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74  Invoke the xFilt
2a000 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b  er method */.  {
2a010 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
2a020 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
2a030 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20  rg;.    for(i = 
2a040 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
2a050 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2a060 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
2a070 20 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e       storeTypeIn
2a080 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b  fo(apArg[i], 0);
2a090 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
2a0a0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
2a0b0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2a0c0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2a0d0 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
2a0e0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  thod = 1;.    rc
2a0f0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
2a100 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c  ter(pVtabCursor,
2a110 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
2a120 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
2a130 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2a140 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73  ethod = 0;.    s
2a150 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2a160 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2a170 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
2a180 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
2a190 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
2a1a0 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  g = 0;.    if( r
2a1b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2a1c0 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64        res = pMod
2a1d0 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43  ule->xEof(pVtabC
2a1e0 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
2a1f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2a200 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
2a210 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2a220 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20 72  suse;..    if( r
2a230 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
2a240 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2a250 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e    }.  }.  pCur->
2a260 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  nullRow = 0;..  
2a270 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2a280 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2a290 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2a2a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a2b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
2a2d0 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
2a2e0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
2a2f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
2a300 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
2a310 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
2a320 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
2a330 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
2a340 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
2a350 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
2a360 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
2a370 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
2a380 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2a390 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2a3a0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2a3b0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
2a3c0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2a3d0 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
2a3e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2a3f0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2a400 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2a410 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2a420 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2a430 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2a440 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
2a450 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61  .  pDest = &p->a
2a460 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2a470 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2a480 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
2a490 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2a4a0 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
2a4b0 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2a4c0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2a4d0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2a4e0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2a4f0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2a500 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2a510 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
2a520 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
2a530 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20  f(sContext));.. 
2a540 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
2a550 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
2a560 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
2a570 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
2a580 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  ** the current c
2a590 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74  ontents to sCont
2a5a0 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ext.s so in case
2a5b0 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
2a5c0 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65  on .  ** can use
2a5d0 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
2a5e0 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
2a5f0 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
2a600 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20  ing a .  ** new 
2a610 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
2a620 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
2a630 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73  sContext.s, pDes
2a640 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
2a650 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  Flag(&sContext.s
2a660 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
2a670 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2a680 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
2a690 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2a6a0 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  use;.  rc = pMod
2a6b0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
2a6c0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  r->pVtabCursor, 
2a6d0 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
2a6e0 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  p2);.  sqlite3Db
2a6f0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
2a700 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
2a710 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
2a720 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
2a730 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
2a740 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2a750 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43  r ){.    rc = sC
2a760 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a  ontext.isError;.
2a770 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
2a780 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
2a790 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
2a7a0 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
2a7b0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
2a7c0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2a7d0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
2a7e0 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20  ror occurred to 
2a7f0 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
2a800 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
2a810 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
2a820 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
2a830 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
2a840 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2a850 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
2a860 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
2a870 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
2a880 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
2a890 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74   pDest);.  sqlit
2a8a0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
2a8b0 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
2a8c0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2a8d0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
2a8e0 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
2a8f0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
2a900 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2a910 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d  e_to_misuse;.  }
2a920 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
2a930 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
2a940 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
2a950 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2a960 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2a970 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2a980 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2a990 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a9a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2a9b0 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
2a9c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a9d0 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
2a9e0 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
2a9f0 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
2aa00 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
2aa10 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
2aa20 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
2aa30 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
2aa40 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
2aa50 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
2aa60 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
2aa70 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2aa80 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2aa90 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2aaa0 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
2aab0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
2aac0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2aad0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2aae0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2aaf0 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
2ab00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2ab10 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
2ab20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
2ab30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2ab40 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
2ab50 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
2ab60 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
2ab70 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2ab80 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
2ab90 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2aba0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2abb0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2abc0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2abd0 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
2abe0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
2abf0 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
2ac00 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
2ac10 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
2ac20 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
2ac30 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
2ac40 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
2ac50 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
2ac60 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
2ac70 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
2ac80 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
2ac90 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
2aca0 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
2acb0 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
2acc0 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
2acd0 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
2ace0 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
2acf0 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
2ad00 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
2ad10 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
2ad20 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
2ad30 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
2ad40 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  sor..  */.  if( 
2ad50 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
2ad60 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2ad70 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2ad80 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2ad90 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
2ada0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
2adb0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
2adc0 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
2add0 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  hod = 0;.  sqlit
2ade0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
2adf0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
2ae00 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
2ae10 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
2ae20 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
2ae30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ae40 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  OK ){.    res = 
2ae50 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43  pModule->xEof(pC
2ae60 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
2ae70 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
2ae80 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
2ae90 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2aea0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69  _to_misuse;..  i
2aeb0 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
2aec0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
2aed0 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
2aee0 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
2aef0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2af00 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2af10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2af20 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2af30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2af40 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2af50 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
2af60 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2af70 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2af80 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2af90 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2afa0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2afb0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
2afc0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2afd0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2afe0 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
2aff0 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
2b000 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
2b010 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
2b020 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
2b030 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
2b040 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
2b050 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
2b060 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2b070 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
2b080 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
2b090 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
2b0a0 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 70 2d 3e  ;.  pName = &p->
2b0b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b0c0 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
2b0d0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2b0e0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2b0f0 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
2b100 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
2b110 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
2b120 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66 28 20  EM_Str );.  if( 
2b130 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
2b140 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2b150 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2b160 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70  .  rc = pVtab->p
2b170 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
2b180 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
2b190 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2b1a0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2b1b0 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
2b1c0 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
2b1d0 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
2b1e0 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71  sg = 0;.  if( sq
2b1f0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
2b200 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2b210 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
2b220 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2b230 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2b240 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2b250 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
2b260 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
2b270 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2b280 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2b290 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2b2a0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2b2b0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2b2c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2b2d0 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2b2e0 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
2b2f0 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
2b300 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
2b310 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
2b320 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
2b330 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
2b340 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
2b350 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
2b360 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
2b370 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
2b380 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
2b390 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
2b3a0 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
2b3b0 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
2b3c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
2b3d0 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
2b3e0 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
2b3f0 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
2b400 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
2b410 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
2b420 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
2b430 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
2b440 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2b450 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
2b460 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
2b470 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
2b480 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
2b490 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
2b4a0 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
2b4b0 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
2b4c0 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
2b4d0 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
2b4e0 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
2b4f0 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
2b500 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
2b510 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
2b520 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
2b530 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
2b540 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
2b550 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
2b560 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
2b570 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
2b580 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
2b590 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
2b5a0 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
2b5b0 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
2b5c0 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
2b5d0 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
2b5e0 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
2b5f0 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
2b600 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
2b610 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
2b620 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
2b630 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
2b640 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
2b650 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
2b660 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2b670 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
2b680 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
2b690 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
2b6a0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
2b6b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2b6c0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2b6d0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2b6e0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2b6f0 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
2b700 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
2b710 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
2b720 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  X;..  pVtab = pO
2b730 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2b740 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2b750 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
2b760 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
2b770 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
2b780 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
2b790 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
2b7a0 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
2b7b0 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
2b7c0 61 74 65 29 20 29 7b 0a 20 20 20 20 61 70 41 72  ate) ){.    apAr
2b7d0 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
2b7e0 20 20 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b    pX = &p->aMem[
2b7f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
2b800 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
2b810 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f 72 65  ++){.      store
2b820 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b  TypeInfo(pX, 0);
2b830 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2b840 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
2b850 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2b860 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
2b870 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2b880 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2b890 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
2b8a0 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
2b8b0 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
2b8c0 72 6f 77 69 64 29 3b 0a 20 20 20 20 73 71 6c 69  rowid);.    sqli
2b8d0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
2b8e0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
2b8f0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
2b900 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  b->zErrMsg;.    
2b910 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
2b920 20 30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   0;.    if( sqli
2b930 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
2b940 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2b950 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
2b960 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2b970 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
2b980 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
2b990 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
2b9a0 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
2b9b0 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
2b9c0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
2b9d0 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
2b9e0 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61     }.    p->nCha
2b9f0 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  nge++;.  }.  bre
2ba00 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2ba10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ba20 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2ba30 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
2ba40 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
2ba50 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
2ba60 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
2ba70 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
2ba80 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
2ba90 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
2baa0 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
2bab0 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
2bac0 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
2bad0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
2bae0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2baf0 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   */.  int p1;.  
2bb00 69 6e 74 20 6e 50 61 67 65 3b 0a 20 20 50 61 67  int nPage;.  Pag
2bb10 65 72 20 2a 70 50 61 67 65 72 3b 0a 0a 20 20 70  er *pPager;..  p
2bb20 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
2bb30 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
2bb40 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61  BtreePager(db->a
2bb50 44 62 5b 70 31 5d 2e 70 42 74 29 3b 0a 20 20 72  Db[p1].pBt);.  r
2bb60 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
2bb70 50 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72  Pagecount(pPager
2bb80 2c 20 26 6e 50 61 67 65 29 3b 0a 20 20 2f 2a 20  , &nPage);.  /* 
2bb90 4f 50 5f 50 61 67 65 63 6f 75 6e 74 20 69 73 20  OP_Pagecount is 
2bba0 61 6c 77 61 79 73 20 63 61 6c 6c 65 64 20 66 72  always called fr
2bbb0 6f 6d 20 77 69 74 68 69 6e 20 61 20 72 65 61 64  om within a read
2bbc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
2bbd0 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 6f 75  he.  ** page cou
2bbe0 6e 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  nt has already b
2bbf0 65 65 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79  een successfully
2bc00 20 72 65 61 64 20 61 6e 64 20 63 61 63 68 65 64   read and cached
2bc10 2e 20 20 53 6f 20 74 68 65 0a 20 20 2a 2a 20 73  .  So the.  ** s
2bc20 71 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63  qlite3PagerPagec
2bc30 6f 75 6e 74 28 29 20 63 61 6c 6c 20 61 62 6f 76  ount() call abov
2bc40 65 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 2a  e cannot fail. *
2bc50 2f 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 72  /.  if( ALWAYS(r
2bc60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b  c==SQLITE_OK) ){
2bc70 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
2bc80 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
2bc90 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67  pOut->u.i = nPag
2bca0 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  e;.  }.  break;.
2bcb0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
2bcc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2bcd0 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
2bce0 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
2bcf0 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
2bd00 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
2bd10 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
2bd20 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
2bd30 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
2bd40 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
2bd50 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
2bd60 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
2bd70 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
2bd80 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
2bd90 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 0a   char *zTrace;..
2bda0 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
2bdb0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
2bdc0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
2bdd0 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
2bde0 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
2bdf0 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54   ){.      db->xT
2be00 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
2be10 72 67 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  rg, zTrace);.   
2be20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2be30 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
2be40 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2be50 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20  TE_SqlTrace)!=0 
2be60 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2be70 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
2be80 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
2be90 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65  Trace);.    }.#e
2bea0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
2beb0 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  EBUG */.  }.  br
2bec0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2bed0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
2bee0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2bef0 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
2bf00 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2bf10 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
2bf20 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
2bf30 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
2bf40 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
2bf50 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
2bf60 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
2bf70 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
2bf80 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
2bf90 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
2bfa0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
2bfb0 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
2bfc0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
2bfd0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
2bfe0 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
2bff0 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
2c000 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
2c010 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
2c020 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
2c030 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
2c040 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
2c050 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
2c060 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
2c070 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
2c080 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 62 72 65  Explain */.  bre
2c090 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  ak;.}../********
2c0a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c0b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c0c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c0d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c0e0 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73  *****.** The cas
2c0f0 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68  es of the switch
2c100 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
2c110 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c   this line shoul
2c120 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65  d all be indente
2c130 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73  d.** by 6 spaces
2c140 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d  .  But the left-
2c150 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61  most 6 spaces ha
2c160 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  ve been removed 
2c170 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a  to improve the.*
2c180 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20  * readability.  
2c190 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  From this point 
2c1a0 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72  on down, the nor
2c1b0 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  mal indentation 
2c1c0 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73  rules are.** res
2c1d0 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  tored..*********
2c1e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c1f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2c220 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66  ****/.    }..#if
2c230 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
2c240 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34  .    {.      u64
2c250 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74   elapsed = sqlit
2c260 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61  e3Hwtime() - sta
2c270 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63  rt;.      pOp->c
2c280 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64  ycles += elapsed
2c290 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
2c2a0 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  ++;.#if 0.      
2c2b0 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74    fprintf(stdout
2c2c0 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61  , "%10llu ", ela
2c2d0 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73  psed);.        s
2c2e0 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
2c2f0 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63  p(stdout, origPc
2c300 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63  , &p->aOp[origPc
2c310 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
2c320 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
2c330 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
2c340 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
2c350 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
2c360 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
2c370 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
2c380 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
2c390 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
2c3a0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
2c3b0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
2c3c0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
2c3d0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
2c3e0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
2c3f0 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
2c400 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
2c410 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
2c420 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
2c430 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
2c440 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
2c450 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
2c460 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
2c470 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
2c480 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
2c490 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b   if( p->trace ){
2c4a0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
2c4b0 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74 72   ) fprintf(p->tr
2c4c0 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ace,"rc=%d\n",rc
2c4d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50  );.      if( opP
2c4e0 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
2c4f0 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20  OUT2_PRERELEASE 
2c500 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
2c510 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
2c520 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  e, pOp->p2, pOut
2c530 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2c540 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20   if( opProperty 
2c550 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
2c560 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
2c570 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
2c580 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
2c590 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
2c5a0 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
2c5b0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
2c5c0 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
2c5d0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
2c5e0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
2c5f0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
2c600 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
2c610 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
2c620 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
2c630 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
2c640 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
2c650 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
2c660 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
2c670 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
2c680 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
2c690 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
2c6a0 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56  = rc;.  sqlite3V
2c6b0 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
2c6c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
2c6d0 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
2c6e0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2c6f0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
2c700 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  RROR;..  /* This
2c710 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
2c720 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
2c730 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
2c740 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
2c750 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
2c760 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
2c770 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
2c780 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
2c790 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c  be_return:.  sql
2c7a0 69 74 65 33 42 74 72 65 65 4d 75 74 65 78 41 72  ite3BtreeMutexAr
2c7b0 72 61 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75  rayLeave(&p->aMu
2c7c0 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
2c7d0 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  c;..  /* Jump to
2c7e0 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e   here if a strin
2c7f0 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72  g or blob larger
2c800 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58   than SQLITE_MAX
2c810 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20  _LENGTH.  ** is 
2c820 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a  encountered..  *
2c830 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c  /.too_big:.  sql
2c840 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2c850 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2c860 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
2c870 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
2c880 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
2c890 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
2c8a0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
2c8b0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
2c8c0 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
2c8d0 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
2c8e0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2c8f0 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65  = 1;.  sqlite3Se
2c900 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2c910 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66  Msg, db, "out of
2c920 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
2c930 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
2c940 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
2c950 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
2c960 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
2c970 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
2c980 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  error..  */.abor
2c990 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a  t_due_to_misuse:
2c9a0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d  .  rc = SQLITE_M
2c9b0 49 53 55 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c  ISUSE;.  /* Fall
2c9c0 20 74 68 72 75 20 69 6e 74 6f 20 61 62 6f 72 74   thru into abort
2c9d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f  _due_to_error */
2c9e0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2c9f0 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
2ca00 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
2ca10 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
2ca20 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
2ca30 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
2ca40 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
2ca50 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
2ca60 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
2ca70 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
2ca80 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
2ca90 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
2caa0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
2cab0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
2cac0 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
2cad0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2cae0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2caf0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2cb00 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
2cb10 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2cb20 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
2cb30 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
2cb40 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
2cb50 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
2cb60 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
2cb70 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
2cb80 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
2cb90 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
2cba0 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
2cbb0 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
2cbc0 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
2cbd0 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
2cbe0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2cbf0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2cc00 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2cc10 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
2cc20 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2cc30 61 6c 74 3b 0a 7d 0a                             alt;.}.