/ Hex Artifact Content
Login

Artifact a435ffcf6bfc7f14eb40998062ccbd7dfa482319:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 37 34 20 32 30 30 39  e.c,v 1.874 2009
0850: 2f 30 37 2f 32 34 20 31 37 3a 35 38 3a 35 33 20  /07/24 17:58:53 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08b0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08c0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08d0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08e0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08f0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0900: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
0910: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0920: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0930: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0940: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0950: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0960: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0970: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0980: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0990: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09a0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09b0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09c0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09d0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09e0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a00: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a10: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a30: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a40: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a50: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a60: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a70: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a80: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a90: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0aa0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ab0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ac0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0ad0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0ae0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0af0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b00: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b10: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b20: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b30: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b40: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b50: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b60: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b80: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0ba0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0bc0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0be0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bf0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c00: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c10: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c20: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c30: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c40: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c50: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c60: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c70: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c80: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c90: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0ca0: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0cb0: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0cc0: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0cd0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ce0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0d00: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0d10: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0d30: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d40: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d50: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d60: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d70: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d80: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d90: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0da0: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0db0: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0dc0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0dd0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0de0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0df0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0e00: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0e10: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0e20: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0e30: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e40: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e50: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e60: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e70: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e80: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0ea0: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0eb0: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0ec0: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0ed0: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ee0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0ef0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0f00: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0f10: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0f20: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0f30: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f50: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0f60: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0f70: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0f80: 79 70 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64  ype the OP_Found
0f90: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0fa0: 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73 20  ecuted. This is 
0fb0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65  used to test whe
0fc0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
0fd0: 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f  foreign key.** o
0fe0: 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  peration impleme
0ff0: 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b  nted using OP_Fk
1000: 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e  IsZero is workin
1010: 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  g. This variable
1020: 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  .** has no funct
1030: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
1040: 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  o help verify th
1050: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
1060: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  ion of the.** li
1070: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
1080: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
1090: 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
10a0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
10b0: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72  ../*.** Test a r
10c0: 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20 69  egister to see i
10d0: 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68 65  f it exceeds the
10e0: 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d   current maximum
10f0: 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49   blob size..** I
1100: 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72  f it does, recor
1110: 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75  d the new maximu
1120: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a  m blob size..*/.
1130: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1140: 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65 66  TE_TEST) && !def
1150: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1160: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23  _BUILTIN_TEST).#
1170: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1180: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20  AX_BLOBSIZE(P)  
1190: 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a  updateMaxBlobsiz
11a0: 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  e(P).#else.# def
11b0: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
11c0: 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69  LOBSIZE(P).#endi
11d0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
11e0: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
11f0: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1200: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
1210: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
1220: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
1230: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
1240: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
1250: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
1260: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1270: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1280: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1290: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
12a0: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
12b0: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
12c0: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  em; }../*.** An 
12d0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12e0: 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65   value (signifie
12f0: 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68  d by the MEM_Eph
1300: 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e  em flag) contain
1310: 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  s.** a pointer t
1320: 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20  o a dynamically 
1330: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67  allocated string
1340: 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65   where some othe
1350: 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72  r entity.** is r
1360: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
1370: 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74  eallocating that
1380: 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73   string.  Becaus
1390: 65 20 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a  e the register.*
13a0: 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72  * does not contr
13b0: 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69  ol the string, i
13c0: 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74  t might be delet
13d0: 65 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 72  ed without the r
13e0: 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69  egister.** knowi
13f0: 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ng it..**.** Thi
1400: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
1410: 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ts an ephemeral 
1420: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79  string into a dy
1430: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
1440: 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ted.** string th
1450: 61 74 20 74 68 65 20 72 65 67 69 73 74 65 72 20  at the register 
1460: 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e  itself controls.
1470: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1480: 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73  , it.** converts
1490: 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74   an MEM_Ephem st
14a0: 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d  ring into an MEM
14b0: 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  _Dyn string..*/.
14c0: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
14d0: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
14e0: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
14f0: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1500: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1510: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1520: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
1530: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  no_mem;}../*.** 
1540: 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64 62 65  Call sqlite3Vdbe
1550: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 29 20  MemExpandBlob() 
1560: 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  on the supplied 
1570: 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65 6d 2a  value (type Mem*
1580: 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75 69 72  ).** P if requir
1590: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ed..*/.#define E
15a0: 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28 28 28  xpandBlob(P) (((
15b0: 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  P)->flags&MEM_Ze
15c0: 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62 65 4d  ro)?sqlite3VdbeM
15d0: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a  emExpandBlob(P):
15e0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65  0)../*.** Argume
15f0: 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61  nt pMem points a
1600: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  t a register tha
1610: 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64  t will be passed
1620: 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65   to a.** user-de
1630: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f  fined function o
1640: 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  r returned to th
1650: 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72 65  e user as the re
1660: 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79 2e  sult of a query.
1670: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
1680: 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e   sets the pMem->
1690: 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75 73  type variable us
16a0: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
16b0: 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20  3_value_*() .** 
16c0: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69  routines..*/.voi
16d0: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
16e0: 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a 70  StoreType(Mem *p
16f0: 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67  Mem){.  int flag
1700: 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  s = pMem->flags;
1710: 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  .  if( flags & M
1720: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1740: 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65  TE_NULL;.  }.  e
1750: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1760: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
1770: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1780: 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a  TE_INTEGER;.  }.
1790: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
17a0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
17b0: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
17c0: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20  SQLITE_FLOAT;.  
17d0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
17e0: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a  gs & MEM_Str ){.
17f0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1800: 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20   SQLITE_TEXT;.  
1810: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d  }else{.    pMem-
1820: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42  >type = SQLITE_B
1830: 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  LOB;.  }.}../*.*
1840: 2a 20 50 72 6f 70 65 72 74 69 65 73 20 6f 66 20  * Properties of 
1850: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 4f 50  opcodes.  The OP
1860: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
1870: 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63 72 65 61  macro is.** crea
1880: 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f 64 65 68  ted by mkopcodeh
1890: 2e 61 77 6b 20 64 75 72 69 6e 67 20 63 6f 6d 70  .awk during comp
18a0: 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74 61 20 69  ilation.  Data i
18b0: 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72  s obtained.** fr
18c0: 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20  om the comments 
18d0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 22 63  following the "c
18e0: 61 73 65 20 4f 50 5f 78 78 78 78 3a 22 20 73 74  ase OP_xxxx:" st
18f0: 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 74  atements in.** t
1900: 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73  his file.  .*/.s
1910: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
1920: 67 6e 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65  gned char opcode
1930: 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46  Property[] = OPF
1940: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a  LG_INITIALIZER;.
1950: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1960: 75 65 20 69 66 20 61 6e 20 6f 70 63 6f 64 65 20  ue if an opcode 
1970: 68 61 73 20 61 6e 79 20 6f 66 20 74 68 65 20 4f  has any of the O
1980: 50 46 4c 47 5f 78 78 78 20 70 72 6f 70 65 72 74  PFLG_xxx propert
1990: 69 65 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64  ies.** specified
19a0: 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74   by mask..*/.int
19b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 63 6f   sqlite3VdbeOpco
19c0: 64 65 48 61 73 50 72 6f 70 65 72 74 79 28 69 6e  deHasProperty(in
19d0: 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61  t opcode, int ma
19e0: 73 6b 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6f  sk){.  assert( o
19f0: 70 63 6f 64 65 3e 30 20 26 26 20 6f 70 63 6f 64  pcode>0 && opcod
1a00: 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66 28 6f 70  e<(int)sizeof(op
1a10: 63 6f 64 65 50 72 6f 70 65 72 74 79 29 20 29 3b  codeProperty) );
1a20: 0a 20 20 72 65 74 75 72 6e 20 28 6f 70 63 6f 64  .  return (opcod
1a30: 65 50 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64 65  eProperty[opcode
1a40: 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f  ]&mask)!=0;.}../
1a50: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64  *.** Allocate Vd
1a60: 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  beCursor number 
1a70: 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20  iCur.  Return a 
1a80: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20  pointer to it.  
1a90: 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69  Return NULL.** i
1aa0: 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20  f we run out of 
1ab0: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69  memory..*/.stati
1ac0: 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c  c VdbeCursor *al
1ad0: 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20  locateCursor(.  
1ae0: 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20  Vdbe *p,        
1af0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72        /* The vir
1b00: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a  tual machine */.
1b10: 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20    int iCur,     
1b20: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1b30: 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65   of the new Vdbe
1b40: 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  Cursor */.  int 
1b50: 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20  nField,         
1b60: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
1b70: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62  ields in the tab
1b80: 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  le or index */. 
1b90: 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20   int iDb,       
1ba0: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 64         /* When d
1bb0: 61 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73  atabase the curs
1bc0: 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f  or belongs to, o
1bd0: 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73  r -1 */.  int is
1be0: 42 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20  BtreeCursor     
1bf0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72  /* True for B-Tr
1c00: 65 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70  ee.  False for p
1c10: 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76  seudo-table or v
1c20: 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  tab */.){.  /* F
1c30: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1c40: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1c50: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1c60: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1c70: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1c80: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1c90: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1ca0: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1cb0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1cc0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1cd0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1ce0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1cf0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1d00: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1d10: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1d20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1d30: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1d40: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1d50: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1d60: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1d70: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1d80: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1d90: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1da0: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1db0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1dc0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1dd0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1de0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1df0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1e00: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1e10: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1e20: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1e30: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1e40: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1e50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1e60: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1e70: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1e80: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1e90: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1ea0: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1eb0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1ec0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1ed0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1ee0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1ef0: 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20   **.  ** Memory 
1f00: 63 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72  cells for cursor
1f10: 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20  s are allocated 
1f20: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
1f30: 65 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73  e address.  ** s
1f40: 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  pace. Memory cel
1f50: 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72  l (p->nMem) corr
1f60: 65 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f  esponds to curso
1f70: 72 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20  r 0. Space for. 
1f80: 20 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20   ** cursor 1 is 
1f90: 6d 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72  managed by memor
1fa0: 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d  y cell (p->nMem-
1fb0: 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20  1), etc..  */.  
1fc0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e  Mem *pMem = &p->
1fd0: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75  aMem[p->nMem-iCu
1fe0: 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65  r];..  int nByte
1ff0: 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2000: 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65  pCx = 0;.  nByte
2010: 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65 6f 66   = .      sizeof
2020: 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b 20 0a  (VdbeCursor) + .
2030: 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43 75        (isBtreeCu
2040: 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72 65  rsor?sqlite3Btre
2050: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
2060: 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69 65   + .      2*nFie
2070: 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b 0a  ld*sizeof(u32);.
2080: 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c  .  assert( iCur<
2090: 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20a0: 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  if( p->apCsr[iCu
20b0: 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  r] ){.    sqlite
20c0: 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
20d0: 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  p, p->apCsr[iCur
20e0: 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72  ]);.    p->apCsr
20f0: 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a  [iCur] = 0;.  }.
2100: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2110: 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47  =sqlite3VdbeMemG
2120: 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c  row(pMem, nByte,
2130: 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70   0) ){.    p->ap
2140: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
2150: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
2160: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
2170: 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e  et(pMem->z, 0, n
2180: 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78 2d 3e  Byte);.    pCx->
2190: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
21a0: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
21b0: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69  eld;.    if( nFi
21c0: 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78  eld ){.      pCx
21d0: 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a  ->aType = (u32 *
21e0: 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65 6f 66  )&pMem->z[sizeof
21f0: 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b 0a 20  (VdbeCursor)];. 
2200: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 73 42     }.    if( isB
2210: 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20 20  treeCursor ){.  
2220: 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f 72      pCx->pCursor
2230: 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20   = (BtCursor*). 
2240: 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e           &pMem->
2250: 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  z[sizeof(VdbeCur
2260: 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69  sor)+2*nField*si
2270: 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20  zeof(u32)];.    
2280: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  }.  }.  return p
2290: 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79  Cx;.}../*.** Try
22a0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61   to convert a va
22b0: 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72  lue into a numer
22c0: 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ic representatio
22d0: 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64  n if we can.** d
22e0: 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73  o so without los
22f0: 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
2300: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2310: 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67  s, if the string
2320: 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61  .** looks like a
2330: 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74   number, convert
2340: 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65   it into a numbe
2350: 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  r.  If it does n
2360: 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20  ot.** look like 
2370: 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20  a number, leave 
2380: 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61  it alone..*/.sta
2390: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75  tic void applyNu
23a0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65  mericAffinity(Me
23b0: 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66 28 20  m *pRec){.  if( 
23c0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28  (pRec->flags & (
23d0: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
23e0: 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  ))==0 ){.    int
23f0: 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20 73 71   realnum;.    sq
2400: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
2410: 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29 3b 0a  erminate(pRec);.
2420: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2430: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a 20 20  lags&MEM_Str).  
2440: 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65         && sqlite
2450: 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63 2d 3e  3IsNumber(pRec->
2460: 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70 52 65  z, &realnum, pRe
2470: 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20 20 20  c->enc) ){.     
2480: 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 20 20   i64 value;.    
2490: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
24a0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52 65 63  ngeEncoding(pRec
24b0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
24c0: 20 20 20 20 20 20 69 66 28 20 21 72 65 61 6c 6e        if( !realn
24d0: 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f  um && sqlite3Ato
24e0: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 76 61  i64(pRec->z, &va
24f0: 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20  lue) ){.        
2500: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61 6c 75  pRec->u.i = valu
2510: 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  e;.        MemSe
2520: 74 54 79 70 65 46 6c 61 67 28 70 52 65 63 2c 20  tTypeFlag(pRec, 
2530: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20  MEM_Int);.      
2540: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
2550: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
2560: 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20 20 20  lify(pRec);.    
2570: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a    }.    }.  }.}.
2580: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e  ./*.** Processin
2590: 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62  g is determine b
25a0: 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
25b0: 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20  arameter:.**.** 
25c0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
25d0: 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  ER:.** SQLITE_AF
25e0: 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54  F_REAL:.** SQLIT
25f0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a  E_AFF_NUMERIC:.*
2600: 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76  *    Try to conv
2610: 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69  ert pRec to an i
2620: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2630: 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20  ation or a .**  
2640: 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74    floating-point
2650: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2660: 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  if an integer re
2670: 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  presentation.** 
2680: 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62     is not possib
2690: 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  le.  Note that t
26a0: 68 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  he integer repre
26b0: 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20  sentation is.** 
26c0: 20 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72     always prefer
26d0: 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65  red, even if the
26e0: 20 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41   affinity is REA
26f0: 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20  L, because.**   
2700: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2710: 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f  esentation is mo
2720: 72 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65  re space efficie
2730: 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a  nt on disk..**.*
2740: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
2750: 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74  T:.**    Convert
2760: 20 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20   pRec to a text 
2770: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a  representation..
2780: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2790: 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d  _NONE:.**    No-
27a0: 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63  op.  pRec is unc
27b0: 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  hanged..*/.stati
27c0: 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69  c void applyAffi
27d0: 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65  nity(.  Mem *pRe
27e0: 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c,          /* T
27f0: 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c  he value to appl
2800: 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f  y affinity to */
2810: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
2820: 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66  ,      /* The af
2830: 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
2840: 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63  lied */.  u8 enc
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2860: 20 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65   Use this text e
2870: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20  ncoding */.){.  
2880: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2890: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
28a0: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
28b0: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
28c0: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
28d0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
28e0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
28f0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2900: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2910: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2920: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2930: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2940: 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  sentation..    *
2950: 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52  /.    if( 0==(pR
2960: 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74  ec->flags&MEM_St
2970: 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61  r) && (pRec->fla
2980: 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  gs&(MEM_Real|MEM
2990: 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20  _Int)) ){.      
29a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
29b0: 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e  ringify(pRec, en
29c0: 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52  c);.    }.    pR
29d0: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  ec->flags &= ~(M
29e0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29  EM_Real|MEM_Int)
29f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  ;.  }else if( af
2a00: 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41  finity!=SQLITE_A
2a10: 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61  FF_NONE ){.    a
2a20: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2a30: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
2a40: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
2a50: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
2a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
2a70: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2a80: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
2a90: 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  .    applyNumeri
2aa0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  cAffinity(pRec);
2ab0: 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
2ac0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
2ad0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2ae0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
2af0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d  ity(pRec);.    }
2b00: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  .  }.}../*.** Tr
2b10: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  y to convert the
2b20: 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74   type of a funct
2b30: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20  ion argument or 
2b40: 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a  a result column.
2b50: 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ** into a numeri
2b60: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2b70: 2e 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e  .  Use either IN
2b80: 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68  TEGER or REAL wh
2b90: 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70  ichever.** is ap
2ba0: 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20  propriate.  But 
2bb0: 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76  only do the conv
2bc0: 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20  ersion if it is 
2bd0: 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74  possible without
2be0: 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  .** loss of info
2bf0: 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75  rmation and retu
2c00: 72 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74  rn the revised t
2c10: 79 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  ype of the argum
2c20: 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ent..**.** This 
2c30: 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45 4e 54  is an EXPERIMENT
2c40: 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20 73 75  AL api and is su
2c50: 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20  bject to change 
2c60: 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f 0a 69  or removal..*/.i
2c70: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c80: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c90: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2ca0: 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20  l){.  Mem *pMem 
2cb0: 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20  = (Mem*)pVal;.  
2cc0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cd0: 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20 73 71  nity(pMem);.  sq
2ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2cf0: 65 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 72  eType(pMem);.  r
2d00: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2d10: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2d20: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2d30: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2d40: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2d50: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2d60: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2d70: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2d80: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2d90: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2da0: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2db0: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2dc0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2dd0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2de0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2df0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2e00: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2e10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2e20: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2e30: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2e40: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2e50: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2e60: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2e70: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2e80: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2e90: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2ea0: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2eb0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2ec0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2ed0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2ee0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2ef0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2f00: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2f10: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2f20: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2f30: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2f40: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2f50: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2f60: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2f70: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2f80: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2f90: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2fa0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2fb0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2fc0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2fd0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2fe0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2ff0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3000: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3010: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3020: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3030: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3040: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3050: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3060: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3070: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3080: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
3090: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
30a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
30b0: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
30c0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
30d0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
30e0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
30f0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3100: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3110: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3120: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3130: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
3140: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3150: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3160: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3170: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3180: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
3190: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
31a0: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
31b0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
31c0: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
31d0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
31e0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
31f0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3200: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3210: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3220: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3230: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
3240: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
3250: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3260: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3270: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
3280: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3290: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
32a0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
32b0: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
32c0: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
32d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
32e0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
32f0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
3300: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
3310: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3320: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3330: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
3340: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
3350: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
3360: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
3370: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
3380: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3390: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
33a0: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
33b0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
33c0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
33d0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
33e0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
33f0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
3400: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
3410: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3420: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3430: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3440: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3450: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3460: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
3470: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3480: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3490: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
34a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
34b0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
34c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
34d0: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
34e0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
34f0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
3500: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
3510: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3520: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3530: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3540: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3550: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3560: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
3570: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
3580: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
3590: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
35a0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
35b0: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
35c0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
35d0: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
35e0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
35f0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
3600: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3610: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
3620: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3630: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3640: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3650: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3660: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
3670: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
3680: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3690: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
36a0: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
36b0: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
36c0: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
36d0: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
36e0: 65 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74  ePrint(FILE *out
36f0: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28  , Mem *p){.  if(
3700: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3710: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69  Null ){.    fpri
3720: 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22  ntf(out, " NULL"
3730: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3740: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3750: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3760: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3770: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3780: 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c  out, " si:%lld",
3790: 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73   p->u.i);.  }els
37a0: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
37b0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
37c0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69  fprintf(out, " i
37d0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
37e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
37f0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
3800: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
3810: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3820: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3830: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
3840: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
3850: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3860: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3870: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3880: 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29 22  out, " (rowset)"
3890: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
38a0: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
38b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
38c0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c  emPrettyPrint(p,
38d0: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72 69   zBuf);.    fpri
38e0: 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a 20  ntf(out, " ");. 
38f0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3900: 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d  "%s", zBuf);.  }
3910: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
3920: 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49 4c  egisterTrace(FIL
3930: 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65 67  E *out, int iReg
3940: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70 72  , Mem *p){.  fpr
3950: 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b 25  intf(out, "REG[%
3960: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
3970: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 6f   memTracePrint(o
3980: 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e 74  ut, p);.  fprint
3990: 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a  f(out, "\n");.}.
39a0: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
39b0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
39c0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
39d0: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d 3e  RACE(R,M) if(p->
39e0: 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  trace)registerTr
39f0: 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c 4d  ace(p->trace,R,M
3a00: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
3a10: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3a20: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
3a30: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
3a40: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
3a50: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
3a60: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
3a70: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
3a80: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
3a90: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
3aa0: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
3ab0: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
3ac0: 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ..#endif../*.** 
3ad0: 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  The CHECK_FOR_IN
3ae0: 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64 65  TERRUPT macro de
3af0: 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b 73  fined here looks
3b00: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a 2a   to see if the.*
3b10: 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  * sqlite3_interr
3b20: 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68 61  upt() routine ha
3b30: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20 20  s been called.  
3b40: 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c 20  If it has been, 
3b50: 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73 69  then.** processi
3b60: 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20 70  ng of the VDBE p
3b70: 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72 72  rogram is interr
3b80: 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  upted..**.** Thi
3b90: 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74 6f  s macro added to
3ba0: 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74 69   every instructi
3bb0: 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20 6a  on that does a j
3bc0: 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ump in order to.
3bd0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 6c  ** implement a l
3be0: 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74 20  oop.  This test 
3bf0: 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65 76  used to be on ev
3c00: 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74 72  ery single instr
3c10: 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74  uction,.** but t
3c20: 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f 72  hat meant we mor
3c30: 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 77  e testing that w
3c40: 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f 6e  e needed.  By on
3c50: 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a 2a  ly testing the.*
3c60: 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20 69  * flag on jump i
3c70: 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65 20  nstructions, we 
3c80: 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73 70  get a (small) sp
3c90: 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74 2e  eed improvement.
3ca0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45 43  .*/.#define CHEC
3cb0: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20  K_FOR_INTERRUPT 
3cc0: 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  \.   if( db->u1.
3cd0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
3ce0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
3cf0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 23 69  o_interrupt;..#i
3d00: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3d10: 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  G.static int fil
3d20: 65 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 20  eExists(sqlite3 
3d30: 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
3d40: 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74 20 72  *zFile){.  int r
3d50: 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63  es = 0;.  int rc
3d60: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69   = SQLITE_OK;.#i
3d70: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
3d80: 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72 65 20  .  /* If we are 
3d90: 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74 69 6e  currently testin
3da0: 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74 68 65  g IO errors, the
3db0: 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f 73  n do not call Os
3dc0: 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20 2a 2a  Access() to.  **
3dd0: 20 74 65 73 74 20 66 6f 72 20 74 68 65 20 70 72   test for the pr
3de0: 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c 65 2e  esence of zFile.
3df0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
3e00: 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20 74 68   any IO error th
3e10: 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73 20 68  at.  ** occurs h
3e20: 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ere will not be 
3e30: 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73 69 6e  reported, causin
3e40: 67 20 74 68 65 20 74 65 73 74 20 74 6f 20 66 61  g the test to fa
3e50: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74 65 72  il..  */.  exter
3e60: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6f  n int sqlite3_io
3e70: 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a  _error_pending;.
3e80: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6f    if( sqlite3_io
3e90: 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d  _error_pending<=
3ea0: 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20 72  0 ).#endif.    r
3eb0: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
3ec0: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 46  ess(db->pVfs, zF
3ed0: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ile, SQLITE_ACCE
3ee0: 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65 73 29  SS_EXISTS, &res)
3ef0: 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65 73 20  ;.  return (res 
3f00: 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
3f10: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  );.}.#endif..#if
3f20: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3f30: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3f40: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3f50: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3f60: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3f70: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f80: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f90: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3fa0: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3fb0: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3fc0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3fd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3fe0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3ff0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
4000: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
4010: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
4020: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4030: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4040: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4050: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4060: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4070: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4080: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4090: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
40a0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
40b0: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
40c0: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
40d0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
40e0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
40f0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
4100: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
4110: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
4120: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4130: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4140: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4150: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4160: 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a  n then return..*
4170: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65  *.** sqlite3Vdbe
4180: 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74  MakeReady() must
4190: 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72   be called befor
41a0: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  e this routine i
41b0: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c  n order to.** cl
41c0: 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20  ose the program 
41d0: 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f  with a final OP_
41e0: 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20  Halt and to set 
41f0: 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73  up the callbacks
4200: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f  .** and the erro
4210: 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65  r message pointe
4220: 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65  r..**.** Wheneve
4230: 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c  r a row or resul
4240: 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  t data is availa
4250: 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ble, this routin
4260: 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a  e will either.**
4270: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75   invoke the resu
4280: 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  lt callback (if 
4290: 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72  there is one) or
42a0: 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20   return with.** 
42b0: 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a  SQLITE_ROW..**.*
42c0: 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20  * If an attempt 
42d0: 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20  is made to open 
42e0: 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73  a locked databas
42f0: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
4300: 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74  tine.** will eit
4310: 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62  her invoke the b
4320: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  usy callback (if
4330: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
4340: 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74  r it will.** ret
4350: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
4360: 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  .**.** If an err
4370: 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72  or occurs, an er
4380: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 77  ror message is w
4390: 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79  ritten to memory
43a0: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
43b0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
43c0: 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73  () and p->zErrMs
43d0: 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69  g is made to poi
43e0: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72  nt to that memor
43f0: 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  y..** The error 
4400: 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20 69  code is stored i
4410: 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73  n p->rc and this
4420: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
4430: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4440: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c  *.** If the call
4450: 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e  back ever return
4460: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
4470: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69   the program exi
4480: 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ts.** immediatel
4490: 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62  y.  There will b
44a0: 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  e no error messa
44b0: 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63  ge but the p->rc
44c0: 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74   field is.** set
44d0: 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54   to SQLITE_ABORT
44e0: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
44f0: 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  e will return SQ
4500: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
4510: 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  * A memory alloc
4520: 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73  ation error caus
4530: 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73  es p->rc to be s
4540: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d  et to SQLITE_NOM
4550: 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72  EM and this.** r
4560: 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e  outine to return
4570: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4580: 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c  *.** Other fatal
4590: 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53   errors return S
45a0: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
45b0: 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72 6f  ** After this ro
45c0: 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68  utine has finish
45d0: 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46  ed, sqlite3VdbeF
45e0: 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64  inalize() should
45f0: 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63   be.** used to c
4600: 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73  lean up the mess
4610: 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20 62   that was left b
4620: 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ehind..*/.int sq
4630: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4640: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4660: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4670: 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20 20 20  int pc;         
4680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
4690: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
46a0: 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  r */.  Op *pOp; 
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
46d0: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
46e0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
46f0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4700: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4710: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4720: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4730: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4740: 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43  8 encoding = ENC
4750: 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  (db);     /* The
4760: 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
4770: 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  ng */.  Mem *pIn
4780: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
4790: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
47a0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
47b0: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
47c0: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
47d0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
47e0: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4800: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
4810: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
4820: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4830: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
4840: 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70 50 72  and */.  u8 opPr
4850: 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20 69 43  operty;.  int iC
4860: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
4870: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4880: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4890: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
48a0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
48b0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
48c0: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
48d0: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
48e0: 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56  pare */.#ifdef V
48f0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
4900: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4910: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4920: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4930: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4940: 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20  /.  int origPc; 
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4960: 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * Program counte
4970: 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  r at start of op
4980: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  code */.#endif.#
4990: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
49a0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
49b0: 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f 67  BACK.  int nProg
49c0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
49d0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
49e0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
49f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4a00: 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20  /.#endif.  /*** 
4a10: 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49  INSERT STACK UNI
4a20: 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20  ON HERE ***/..  
4a30: 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63  assert( p->magic
4a40: 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
4a50: 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f   );  /* sqlite3_
4a60: 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20  step() verifies 
4a70: 74 68 69 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  this */.  assert
4a80: 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c  ( db->magic==SQL
4a90: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29  ITE_MAGIC_BUSY )
4aa0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
4ab0: 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70  utexArrayEnter(p
4ac0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  );.  if( p->rc==
4ad0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
4ae0: 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
4af0: 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ens if a malloc(
4b00: 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20  ) inside a call 
4b10: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  to sqlite3_colum
4b20: 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20  n_text() or.    
4b30: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ** sqlite3_colum
4b40: 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65  n_text16() faile
4b50: 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  d.  */.    goto 
4b60: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73  no_mem;.  }.  as
4b70: 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c  sert( p->rc==SQL
4b80: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
4b90: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4ba0: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4bb0: 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _OK;.  assert( p
4bc0: 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a  ->explain==0 );.
4bd0: 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20    p->pResultSet 
4be0: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
4bf0: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
4c00: 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
4c10: 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74  TERRUPT;.  sqlit
4c20: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4c30: 28 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  (p);.#ifdef SQLI
4c40: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4c50: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4c60: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4c70: 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70  pc==0 .   && ((p
4c80: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4c90: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4ca0: 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28  ) || fileExists(
4cb0: 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69  db, "vdbe_explai
4cc0: 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e  n")).  ){.    in
4cd0: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
4ce0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4cf0: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4d00: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d10: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4d20: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4d30: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4d40: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4d50: 64 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70  dout, i, &p->aOp
4d60: 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  [i]);.    }.  }.
4d70: 20 20 69 66 28 20 66 69 6c 65 45 78 69 73 74 73    if( fileExists
4d80: 28 64 62 2c 20 22 76 64 62 65 5f 74 72 61 63 65  (db, "vdbe_trace
4d90: 22 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61  ") ){.    p->tra
4da0: 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d  ce = stdout;.  }
4db0: 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  .  sqlite3EndBen
4dc0: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e  ignMalloc();.#en
4dd0: 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e  dif.  for(pc=p->
4de0: 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  pc; rc==SQLITE_O
4df0: 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73  K; pc++){.    as
4e00: 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70  sert( pc>=0 && p
4e10: 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20  c<p->nOp );.    
4e20: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
4e30: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
4e40: 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f  em;.#ifdef VDBE_
4e50: 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67  PROFILE.    orig
4e60: 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61  Pc = pc;.    sta
4e70: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4e80: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4e90: 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70   pOp = &p->aOp[p
4ea0: 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  c];..    /* Only
4eb0: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
4ec0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
4ed0: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
4ee0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4ef0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d  DEBUG.    if( p-
4f00: 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  >trace ){.      
4f10: 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20  if( pc==0 ){.   
4f20: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
4f30: 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63  E Execution Trac
4f40: 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  e:\n");.        
4f50: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4f60: 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a  Sql(p);.      }.
4f70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4f80: 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63  ePrintOp(p->trac
4f90: 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20  e, pc, pOp);.   
4fa0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72   }.    if( p->tr
4fb0: 61 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20  ace==0 && pc==0 
4fc0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4fd0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4fe0: 63 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66  c();.      if( f
4ff0: 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76  ileExists(db, "v
5000: 64 62 65 5f 73 71 6c 74 72 61 63 65 22 29 20 29  dbe_sqltrace") )
5010: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5020: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
5030: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5040: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
5050: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a  Malloc();.    }.
5060: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20  #endif.      .. 
5070: 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73     /* Check to s
5080: 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f  ee if we need to
5090: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
50a0: 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e  errupt.  This on
50b0: 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a  ly happens.    *
50c0: 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73  * if we have a s
50d0: 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c  pecial test buil
50e0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
50f0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
5100: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5110: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29  errupt_count>0 )
5120: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
5130: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d  interrupt_count-
5140: 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  -;.      if( sql
5150: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5160: 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ount==0 ){.     
5170: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5180: 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20  rupt(db);.      
5190: 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  }.    }.#endif..
51a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
51b0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
51c0: 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c  LBACK.    /* Cal
51d0: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
51e0: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
51f0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
5200: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
5210: 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44  ber.    ** of VD
5220: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
5230: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
5240: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5250: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a  ocation of.    *
5260: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  * sqlite3VdbeExe
5270: 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73  c() or since las
5280: 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72  t time the progr
5290: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  ess callback was
52a0: 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a   called)..    **
52b0: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
52c0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
52d0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
52e0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
52f0: 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a  hine with.    **
5300: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a return code S
5310: 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20  QLITE_ABORT..   
5320: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
5330: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
5340: 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67     if( db->nProg
5350: 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65  ressOps==nProgre
5360: 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20  ssOps ){.       
5370: 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20   int prc;.      
5380: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
5390: 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
53a0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
53b0: 69 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 70  isuse;.        p
53c0: 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73  rc =db->xProgres
53d0: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
53e0: 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  rg);.        if(
53f0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
5400: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
5410: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
5420: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
5430: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5440: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5450: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
5460: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5470: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5480: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
5490: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
54a0: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
54b0: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
54c0: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44  #endif..    /* D
54d0: 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70  o common setup p
54e0: 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 6e  rocessing for an
54f0: 79 20 6f 70 63 6f 64 65 20 74 68 61 74 20 69 73  y opcode that is
5500: 20 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77   marked.    ** w
5510: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
5520: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2e 20 20  erelease" tag.  
5530: 53 75 63 68 20 6f 70 63 6f 64 65 73 20 68 61 76  Such opcodes hav
5540: 65 20 61 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a  e a single.    *
5550: 2a 20 6f 75 74 70 75 74 20 77 68 69 63 68 20 69  * output which i
5560: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
5570: 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 2e  he P2 parameter.
5580: 20 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65    The P2 registe
5590: 72 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e 69 74  r.    ** is init
55a0: 69 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c  ialized to a NUL
55b0: 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70  L..    */.    op
55c0: 50 72 6f 70 65 72 74 79 20 3d 20 6f 70 63 6f 64  Property = opcod
55d0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
55e0: 70 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66 28 20  pcode];.    if( 
55f0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5600: 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
5610: 41 53 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ASE)!=0 ){.     
5620: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5630: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5640: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5650: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f  nMem );.      pO
5660: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
5670: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 73 71  p->p2];.      sq
5680: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
5690: 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74  aseExternal(pOut
56a0: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
56b0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
56c0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d  .      pOut->n =
56d0: 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 0a 20 0a   0;.    }else. .
56e0: 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e      /* Do common
56f0: 20 73 65 74 75 70 20 66 6f 72 20 6f 70 63 6f 64   setup for opcod
5700: 65 73 20 6d 61 72 6b 65 64 20 77 69 74 68 20 6f  es marked with o
5710: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
5720: 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d 62 69  ing.    ** combi
5730: 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f 70 65  nations of prope
5740: 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a 20 20  rties..    **.  
5750: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
5760: 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  n1.    **       
5770: 20 20 20 20 69 6e 31 20 69 6e 32 0a 20 20 20 20      in1 in2.    
5780: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5790: 20 69 6e 32 20 6f 75 74 33 0a 20 20 20 20 2a 2a   in2 out3.    **
57a0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 20 69             in1 i
57b0: 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n3.    **.    **
57c0: 20 56 61 72 69 61 62 6c 65 73 20 70 49 6e 31 2c   Variables pIn1,
57d0: 20 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e 33 20   pIn2, and pIn3 
57e0: 61 72 65 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e  are made to poin
57f0: 74 20 74 6f 20 61 70 70 72 6f 70 72 69 61 74 65  t to appropriate
5800: 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72  .    ** register
5810: 73 20 66 6f 72 20 69 6e 70 75 74 73 2e 20 20 56  s for inputs.  V
5820: 61 72 69 61 62 6c 65 20 70 4f 75 74 20 70 6f 69  ariable pOut poi
5830: 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74 70 75  nts to the outpu
5840: 74 20 72 65 67 69 73 74 65 72 2e 0a 20 20 20 20  t register..    
5850: 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f 70 50 72  */.    if( (opPr
5860: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5870: 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N1)!=0 ){.      
5880: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5890: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
58a0: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  t( pOp->p1<=p->n
58b0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e  Mem );.      pIn
58c0: 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  1 = &p->aMem[pOp
58d0: 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52 45 47  ->p1];.      REG
58e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
58f0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20  >p1, pIn1);.    
5900: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5910: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  y & OPFLG_IN2)!=
5920: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
5930: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5940: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5950: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
5960: 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 49  em );.        pI
5970: 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n2 = &p->aMem[pO
5980: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20  p->p2];.        
5990: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
59a0: 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20  Op->p2, pIn2);. 
59b0: 20 20 20 20 20 20 20 2f 2a 20 41 73 20 63 75 72         /* As cur
59c0: 72 65 6e 74 6c 79 20 69 6d 70 6c 65 6d 65 6e 74  rently implement
59d0: 65 64 2c 20 69 6e 32 20 69 6d 70 6c 69 65 73 20  ed, in2 implies 
59e0: 6f 75 74 33 2e 20 20 54 68 65 72 65 20 69 73 20  out3.  There is 
59f0: 6e 6f 20 72 65 61 73 6f 6e 0a 20 20 20 20 20 20  no reason.      
5a00: 20 20 2a 2a 20 77 68 79 20 74 68 69 73 20 68 61    ** why this ha
5a10: 73 20 74 6f 20 62 65 2c 20 69 74 20 6a 75 73 74  s to be, it just
5a20: 20 77 6f 72 6b 65 64 20 6f 75 74 20 74 68 61 74   worked out that
5a30: 20 77 61 79 2e 20 2a 2f 0a 20 20 20 20 20 20 20   way. */.       
5a40: 20 61 73 73 65 72 74 28 20 28 6f 70 50 72 6f 70   assert( (opProp
5a50: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
5a60: 33 29 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  3)!=0 );.       
5a70: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5a80: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5a90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
5aa0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5ab0: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
5ac0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
5ad0: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50    }else if( (opP
5ae0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5af0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
5b00: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5b10: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p3>0 );.        
5b20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5b30: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5b40: 20 20 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61      pIn3 = &p->a
5b50: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
5b60: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5b70: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49  RACE(pOp->p3, pI
5b80: 6e 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n3);.      }.   
5b90: 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72   }else if( (opPr
5ba0: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5bb0: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5bc0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5bd0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5be0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
5bf0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e  Mem );.      pIn
5c00: 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  2 = &p->aMem[pOp
5c10: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47  ->p2];.      REG
5c20: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5c30: 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  >p2, pIn2);.    
5c40: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
5c50: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5c60: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
5c70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5c80: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5c90: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
5ca0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33  em );.      pIn3
5cb0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5cc0: 3e 70 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49  >p3];.      REGI
5cd0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5ce0: 70 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d  p3, pIn3);.    }
5cf0: 0a 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ..    switch( pO
5d00: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
5d10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5d60: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5d70: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5d80: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5d90: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5da0: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5db0: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5dc0: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5dd0: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5de0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
5df0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
5e00: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
5e10: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
5e20: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
5e30: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5e40: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5e50: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5e60: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5e70: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5e80: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5e90: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5ea0: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5eb0: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5ec0: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5ed0: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5ee0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
5ef0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
5f00: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
5f10: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5f20: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5f30: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5f40: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5f50: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5f60: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5f70: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5f80: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5f90: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5fa0: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5fb0: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5fc0: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5fd0: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5fe0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
5ff0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
6000: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
6010: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
6020: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
6030: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
6040: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
6050: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
6060: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
6070: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
6080: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
6090: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
60a0: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
60b0: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
60c0: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
60d0: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
60e0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
60f0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
6100: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
6110: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
6120: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
6130: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
6140: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
6150: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
6160: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
6170: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
6180: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
6190: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
61a0: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
61b0: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
61c0: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
61d0: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
61e0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
61f0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
6200: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
6210: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
6220: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
6230: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
6240: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
6250: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
6260: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
6270: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
6280: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
6290: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
62a0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
62b0: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
62c0: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
62d0: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
62e0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
62f0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
6300: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
6310: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
6320: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
6330: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
6340: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
6350: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
6360: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
6370: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
6380: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
6390: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
63a0: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
63b0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
63c0: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
63d0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
63e0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
63f0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
6400: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
6410: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
6420: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6430: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6440: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6450: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6460: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
6470: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
6480: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
6490: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
64a0: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
64b0: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
64c0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
64d0: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
64e0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
64f0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6500: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
6510: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
6520: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
6530: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
6540: 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b   jump */.  CHECK
6550: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
6560: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
6570: 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
6580: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
6590: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
65a0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
65b0: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
65c0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
65d0: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
65e0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
65f0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6600: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6610: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6620: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
6630: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6640: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
6650: 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
6660: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6670: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
6680: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
6690: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
66a0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
66b0: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
66c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
66d0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
66e0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
66f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6700: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6710: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6720: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
6730: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
6740: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
6750: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6760: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
6770: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
6780: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  /* in1 */.  asse
6790: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
67a0: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  & MEM_Int );.  p
67b0: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
67c0: 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .i;.  break;.}..
67d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
67e0: 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  d P1 * * * *.**.
67f0: 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67  ** Swap the prog
6800: 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68  ram counter with
6810: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
6820: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
6830: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6850: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74   */.  int pcDest
6860: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
6870: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
6880: 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  yn)==0 );.  pIn1
6890: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
68a0: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
68b0: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
68c0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
68d0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
68e0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
68f0: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
6900: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6910: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
6920: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
6930: 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
6940: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6950: 74 65 72 20 50 33 2e 20 20 49 66 20 69 73 20 69  ter P3.  If is i
6960: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
6970: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
6980: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
6990: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
69a0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
69b0: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
69c0: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
69d0: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
69e0: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
69f0: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
6a00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
6a10: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
6a20: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 69 66 28 20  /* in3 */.  if( 
6a30: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
6a40: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6a50: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6a60: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6a70: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6a80: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6a90: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
6aa0: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
6ab0: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
6ac0: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
6ad0: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
6ae0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
6af0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
6b00: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
6b10: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
6b20: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
6b30: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
6b40: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
6b50: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6b60: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6b70: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6b80: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6b90: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6ba0: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
6bb0: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
6bc0: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
6bd0: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
6be0: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
6bf0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
6c00: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
6c10: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
6c20: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
6c30: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
6c40: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
6c50: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6c60: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6c70: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6c80: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6c90: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6ca0: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
6cb0: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
6cc0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
6cd0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
6ce0: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
6cf0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
6d00: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
6d10: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
6d20: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
6d30: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
6d40: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
6d50: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6d60: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6d70: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6d80: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6d90: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6da0: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
6db0: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
6dc0: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
6dd0: 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f  Halt: {.  if( pO
6de0: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
6df0: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
6e00: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
6e10: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
6e20: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
6e30: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
6e40: 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61  . */.    VdbeFra
6e50: 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e  me *pFrame = p->
6e60: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
6e70: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
6e80: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
6e90: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
6ea0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
6eb0: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
6ec0: 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71  ge);.    pc = sq
6ed0: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
6ee0: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
6ef0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
6f00: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
6f10: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
6f20: 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50  n pc is the OP_P
6f30: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
6f40: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
6f50: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
6f60: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
6f70: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
6f80: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
6f90: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
6fa0: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
6fb0: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
6fc0: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
6fd0: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
6fe0: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
6ff0: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
7000: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
7010: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
7020: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
7030: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
7040: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
7050: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
7060: 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e  /.      pc = p->
7070: 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20  aOp[pc].p2-1;.  
7080: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7090: 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f   }..  p->rc = pO
70a0: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
70b0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
70c0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
70d0: 20 70 63 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   pc;.  if( pOp->
70e0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69  p4.z ){.    sqli
70f0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
7100: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
7110: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
7120: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
7130: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
7140: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
7150: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
7160: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
7170: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
7180: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
7190: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d  E_BUSY ){.    p-
71a0: 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
71b0: 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b  E_BUSY;.  }else{
71c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
71d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
71e0: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  >rc==SQLITE_CONS
71f0: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
7200: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7210: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
7220: 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  rredCons>0 );.  
7230: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
7240: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
7250: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
7260: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
7270: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
7280: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
7290: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
72a0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
72b0: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
72c0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
72d0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
72e0: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
72f0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7300: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7310: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
7320: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
7330: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
7340: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
7350: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
7360: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
7370: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
7380: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7390: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
73a0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
73b0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
73c0: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
73d0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
73e0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
73f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
7400: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
7410: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
7420: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
7430: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
7440: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7450: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
7460: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
7470: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
7480: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
7490: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
74a0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
74b0: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
74c0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
74d0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
74e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
74f0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
7500: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
7510: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
7520: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
7530: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
7540: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
7550: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
7560: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
7570: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7580: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
7590: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
75a0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
75b0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
75c0: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
75d0: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
75e0: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
75f0: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
7600: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
7610: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
7620: 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  me..*/.case OP_S
7630: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
7640: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7650: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
7660: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7670: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
7680: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
7690: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
76a0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
76b0: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
76c0: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
76d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
76e0: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
76f0: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
7700: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
7710: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
7720: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
7730: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
7740: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7750: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
7760: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f  LITE_TOOBIG ) go
7770: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
7780: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
7790: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
77a0: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
77b0: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
77c0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
77d0: 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  rt( pOut->zMallo
77e0: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
77f0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
7800: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20  flags & MEM_Dyn 
7810: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  );.    pOut->zMa
7820: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
7830: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
7840: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
7850: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
7860: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
7870: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
7880: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
7890: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
78a0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
78b0: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
78c0: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
78d0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
78e0: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
78f0: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
7900: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  .  }.#endif.  if
7910: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
7920: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
7930: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
7940: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7950: 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
7960: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
7970: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
7980: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
7990: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
79a0: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
79b0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
79c0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
79d0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
79e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
79f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
7a00: 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ng: {          /
7a10: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7a20: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7a30: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7a40: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7a50: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
7a60: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
7a70: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
7a80: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
7a90: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
7aa0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
7ab0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7ac0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
7ad0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7ae0: 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20  de: Null * P2 * 
7af0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
7b00: 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  a NULL into regi
7b10: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7b20: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
7b30: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7b40: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 62 72  erelease */.  br
7b50: 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
7b60: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
7b70: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69   P4.**.** P4 poi
7b80: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
7b90: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
7ba0: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
7bb0: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
7bc0: 73 74 65 72 20 50 32 2e 20 54 68 69 73 20 69 6e  ster P2. This in
7bd0: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74  struction is not
7be0: 20 63 6f 64 65 64 20 64 69 72 65 63 74 6c 79 0a   coded directly.
7bf0: 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ** by the compil
7c00: 65 72 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  er. Instead, the
7c10: 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72 20   compiler layer 
7c20: 73 70 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20  specifies.** an 
7c30: 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64  OP_HexBlob opcod
7c40: 65 2c 20 77 69 74 68 20 74 68 65 20 68 65 78 20  e, with the hex 
7c50: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
7c60: 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
7c70: 62 6c 6f 62 20 61 73 20 50 34 2e 20 54 68 69 73  blob as P4. This
7c80: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
7c90: 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f  formed to an OP_
7ca0: 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72 73  Blob.** the firs
7cb0: 74 20 74 69 6d 65 20 69 74 20 69 73 20 65 78 65  t time it is exe
7cc0: 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cuted..*/.case O
7cd0: 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  P_Blob: {       
7ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7cf0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7d00: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7d10: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
7d20: 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74  ENGTH );.  sqlit
7d30: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
7d40: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
7d50: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
7d60: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
7d70: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7d80: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7d90: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7da0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
7db0: 69 61 62 6c 65 20 50 31 20 50 32 20 50 33 20 50  iable P1 P2 P3 P
7dc0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  4 *.**.** Transf
7dd0: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
7de0: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
7df0: 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e  s P1..P1+P3-1 in
7e00: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
7e10: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a  P2..P2+P3-1..**.
7e20: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
7e30: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
7e40: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
7e50: 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50 33  ars in P4 and P3
7e60: 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76  ==1..** The P4 v
7e70: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
7e80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
7e90: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
7ea0: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
7eb0: 6c 65 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  le: {.  int p1; 
7ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
7ed0: 61 62 6c 65 20 74 6f 20 63 6f 70 79 20 66 72 6f  able to copy fro
7ee0: 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  m */.  int p2;  
7ef0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
7f00: 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a  ter to copy to *
7f10: 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
7f20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7f30: 66 20 76 61 6c 75 65 73 20 6c 65 66 74 20 74 6f  f values left to
7f40: 20 63 6f 70 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a   copy */.  Mem *
7f50: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
7f60: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
7f70: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 70 31 20  ferred */..  p1 
7f80: 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20  = pOp->p1 - 1;. 
7f90: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
7fa0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
7fb0: 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
7fc0: 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29   p1+n<=p->nVar )
7fd0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d  ;.  assert( p2>=
7fe0: 31 20 26 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e  1 && p2+n-1<=p->
7ff0: 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74  nMem );.  assert
8000: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
8010: 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 7c 7c 20  | pOp->p3==1 || 
8020: 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 0a 0a 20  pOp->p3==0 );.. 
8030: 20 77 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20   while( n-- > 0 
8040: 29 7b 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70  ){.    pVar = &p
8050: 2d 3e 61 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20  ->aVar[p1++];.  
8060: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
8070: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
8080: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
8090: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
80a0: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
80b0: 6d 5b 70 32 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c  m[p2++];.    sql
80c0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
80d0: 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29  seExternal(pOut)
80e0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
80f0: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
8100: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8110: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8120: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
8130: 69 63 29 3b 0a 20 20 20 20 55 50 44 41 54 45 5f  ic);.    UPDATE_
8140: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
8150: 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
8160: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
8170: 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ove P1 P2 P3 * *
8180: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
8190: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
81a0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
81b0: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
81c0: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
81d0: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
81e0: 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a  ..P1+P1-1 are.**
81f0: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
8200: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
8210: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
8220: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
8230: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
8240: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
8250: 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lap..*/.case OP_
8260: 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  Move: {.  char *
8270: 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f  zMalloc;   /* Ho
8280: 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66  lding variable f
8290: 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d  or allocated mem
82a0: 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ory */.  int n; 
82b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
82c0: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
82d0: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
82e0: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
82f0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
8300: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
8310: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
8320: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
8330: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
8340: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
8350: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
8360: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
8370: 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31  ssert( n>0 && p1
8380: 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20  >0 && p2>0 );.  
8390: 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32  assert( p1+n<=p2
83a0: 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a   || p2+n<=p1 );.
83b0: 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
83c0: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
83d0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20   &p->aMem[p2];. 
83e0: 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20   while( n-- ){. 
83f0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
8400: 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  =&p->aMem[p->nMe
8410: 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m] );.    assert
8420: 28 20 70 49 6e 31 3c 3d 26 70 2d 3e 61 4d 65 6d  ( pIn1<=&p->aMem
8430: 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20  [p->nMem] );.   
8440: 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d   zMalloc = pOut-
8450: 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f  >zMalloc;.    pO
8460: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
8470: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8480: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
8490: 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a  n1);.    pIn1->z
84a0: 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63  Malloc = zMalloc
84b0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
84c0: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
84d0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
84e0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20    pOut++;.  }.  
84f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8500: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
8510: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  * * *.**.** Make
8520: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
8530: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
8540: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
8550: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8560: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
8570: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
8580: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
8590: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
85a0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
85b0: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
85c0: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
85d0: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20  ase OP_Copy: {  
85e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
85f0: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
8600: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
8610: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
8620: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
8630: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
8640: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
8650: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
8660: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
8670: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
8680: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
8690: 3b 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ;.  Deephemerali
86a0: 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49  ze(pOut);.  REGI
86b0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
86c0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
86d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
86e0: 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20  : SCopy P1 P2 * 
86f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
8700: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
8710: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
8720: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8730: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
8740: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
8750: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
8760: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
8770: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
8780: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
8790: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
87a0: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
87b0: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
87c0: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
87d0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
87e0: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
87f0: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
8800: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8810: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
8820: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
8830: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
8840: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
8850: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
8860: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
8870: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
8880: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
8890: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
88a0: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
88b0: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
88c0: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
88d0: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20  ase OP_SCopy: { 
88e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
88f0: 31 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  1 */.  REGISTER_
8900: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
8910: 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20  In1);.  assert( 
8920: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
8930: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
8940: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
8950: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
8960: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8970: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
8980: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8990: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
89a0: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
89b0: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
89c0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
89d0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
89e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
89f0: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
8a00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
8a10: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
8a20: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
8a30: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
8a40: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
8a50: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8a60: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8a70: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8a80: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8a90: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8aa0: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8ab0: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8ac0: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8ad0: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8ae0: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
8af0: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
8b00: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
8b10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
8b20: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
8b30: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
8b40: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
8b50: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8b60: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8b70: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8b80: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8b90: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p2<=p->nMem+1 );
8ba0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
8bb0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
8bc0: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
8bd0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
8be0: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
8bf0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
8c00: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
8c10: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
8c20: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
8c30: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
8c40: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
8c50: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
8c60: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
8c70: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
8c80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
8c90: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
8ca0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
8cb0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8cc0: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
8cd0: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
8ce0: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
8cf0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8d00: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
8d10: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
8d20: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
8d30: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
8d40: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
8d50: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
8d60: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
8d70: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8d80: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
8d90: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
8da0: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
8db0: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
8dc0: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
8dd0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
8de0: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
8df0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
8e00: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
8e10: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
8e20: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
8e30: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
8e40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
8e50: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
8e60: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
8e70: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
8e80: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
8e90: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
8ea0: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
8eb0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
8ec0: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
8ed0: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
8ee0: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
8ef0: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
8f00: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
8f10: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
8f20: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
8f30: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
8f40: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
8f50: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
8f60: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
8f70: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
8f80: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
8f90: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8fa0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
8fb0: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
8fc0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
8fd0: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
8fe0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
8ff0: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
9000: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
9010: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
9020: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
9030: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
9040: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
9050: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
9060: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
9070: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
9080: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
9090: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
90a0: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
90b0: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
90c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
90d0: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
90e0: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
90f0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
9100: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
9110: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
9120: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
9130: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
9140: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
9150: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
9160: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
9170: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
9180: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
9190: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
91a0: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73  zed as.  ** as s
91b0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
91c0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
91d0: 73 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e 61 4d  sultSet = &p->aM
91e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
91f0: 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70  or(i=0; i<pOp->p
9200: 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  2; i++){.    sql
9210: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
9220: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
9230: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9240: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 26  beMemStoreType(&
9250: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45  pMem[i]);.    RE
9260: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9270: 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d  ->p1+i, &pMem[i]
9280: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  );.  }.  if( db-
9290: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
92a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20  goto no_mem;..  
92b0: 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45  /* Return SQLITE
92c0: 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70  _ROW.  */.  p->p
92d0: 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63  c = pc + 1;.  rc
92e0: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
92f0: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
9300: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
9310: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
9320: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74   * *.**.** Add t
9330: 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73  he text in regis
9340: 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20  ter P1 onto the 
9350: 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20  end of the text 
9360: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
9370: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
9380: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9390: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
93a0: 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32  her the P1 or P2
93b0: 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74   text are NULL t
93c0: 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69  hen store NULL i
93d0: 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33  n P3..**.**   P3
93e0: 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a   = P2 || P1.**.*
93f0: 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
9400: 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f  for P1 and P3 to
9410: 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67   be the same reg
9420: 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73  ister. Sometimes
9430: 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68  ,.** if P3 is th
9440: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20  e same register 
9450: 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65  as P2, the imple
9460: 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c  mentation is abl
9470: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20  e.** to avoid a 
9480: 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73  memcpy()..*/.cas
9490: 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20  e OP_Concat: {  
94a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
94b0: 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69   as TK_CONCAT, i
94c0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
94d0: 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20  .  i64 nByte;.. 
94e0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
94f0: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
9500: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
9510: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
9520: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
9530: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
9540: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
9550: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
9560: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
9570: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
9580: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
9590: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
95a0: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
95b0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
95c0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
95d0: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
95e0: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
95f0: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
9600: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
9610: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
9620: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d  too_big;.  }.  M
9630: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9640: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
9650: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
9660: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
9670: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
9680: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
9690: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
96a0: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
96b0: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
96c0: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
96d0: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
96e0: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
96f0: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
9700: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
9710: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20  Out->z[nByte] = 
9720: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
9730: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
9740: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
9750: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
9760: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
9770: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
9780: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
9790: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
97a0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
97b0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
97c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
97d0: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
97e0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
97f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9800: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
9810: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9820: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9830: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
9840: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
9850: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9860: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9870: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
9880: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  3 * *.**.**.** M
9890: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
98a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
98b0: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
98c0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
98d0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
98e0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
98f0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9900: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9910: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9920: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9930: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
9940: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
9950: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
9960: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
9970: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
9980: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9990: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
99a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
99b0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
99c0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
99d0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
99e0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
99f0: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
9a00: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
9a10: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
9a20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
9a30: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
9a40: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9a50: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9a60: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9a70: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
9a80: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
9a90: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
9aa0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
9ab0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
9ac0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
9ad0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
9ae0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9af0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
9b00: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
9b10: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  3 * *.**.** Comp
9b20: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
9b30: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
9b40: 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20  division of the 
9b50: 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69  value in.** regi
9b60: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
9b70: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9b80: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
9b90: 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20  e result in P3. 
9ba0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
9bb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
9bc0: 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75  is zero the resu
9bd0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49  lt is NULL..** I
9be0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
9bf0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
9c00: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
9c10: 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20  .case OP_Add:   
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c  /* same as TK_PL
9c40: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
9c50: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75  t3 */.case OP_Su
9c60: 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20  btract:         
9c70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9c80: 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69  TK_MINUS, in1, i
9c90: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
9ca0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
9cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
9cc0: 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69  me as TK_STAR, i
9cd0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9ce0: 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a  .case OP_Divide:
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c  /* same as TK_SL
9d10: 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  ASH, in1, in2, o
9d20: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ut3 */.case OP_R
9d30: 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20  emainder: {     
9d40: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9d50: 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e   TK_REM, in1, in
9d60: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
9d70: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
9d80: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
9d90: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
9da0: 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69  nputs */.  i64 i
9db0: 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  A;         /* In
9dc0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c  teger value of l
9dd0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
9de0: 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20   i64 iB;        
9df0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
9e00: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
9e10: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
9e20: 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  A;      /* Real 
9e30: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
9e40: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
9e50: 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rB;      /* Re
9e60: 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  al value of righ
9e70: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20  t operand */..  
9e80: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
9e90: 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20 61 70  nity(pIn1);.  ap
9ea0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
9eb0: 74 79 28 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67  ty(pIn2);.  flag
9ec0: 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  s = pIn1->flags 
9ed0: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20  | pIn2->flags;. 
9ee0: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
9ef0: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74  M_Null)!=0 ) got
9f00: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9f10: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69  ult_is_null;.  i
9f20: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
9f30: 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  & pIn2->flags & 
9f40: 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e  MEM_Int)==MEM_In
9f50: 74 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49  t ){.    iA = pI
9f60: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20  n1->u.i;.    iB 
9f70: 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
9f80: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
9f90: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
9fa0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
9fb0: 20 20 20 69 42 20 2b 3d 20 69 41 3b 20 20 20 20     iB += iA;    
9fc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9fd0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
9fe0: 3a 20 20 20 20 69 42 20 2d 3d 20 69 41 3b 20 20  :    iB -= iA;  
9ff0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a000: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
a010: 6c 79 3a 20 20 20 20 69 42 20 2a 3d 20 69 41 3b  ly:    iB *= iA;
a020: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a030: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
a040: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  de: {.        if
a050: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
a060: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a070: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
a080: 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68    /* Dividing th
a090: 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  e largest possib
a0a0: 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62  le negative 64-b
a0b0: 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36  it integer (1<<6
a0c0: 33 29 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a  3) by .        *
a0d0: 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20  * -1 returns an 
a0e0: 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67  integer too larg
a0f0: 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20  e to store in a 
a100: 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65  64-bit data-type
a110: 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  . On.        ** 
a120: 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75 72  some architectur
a130: 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76  es, the value ov
a140: 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36  erflows to (1<<6
a150: 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20  3). On others,. 
a160: 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46         ** a SIGF
a170: 50 45 20 69 73 20 69 73 73 75 65 64 2e 20 54 68  PE is issued. Th
a180: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
a190: 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73  ement normalizes
a1a0: 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a   this.        **
a1b0: 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61   behavior so tha
a1c0: 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75  t all architectu
a1d0: 72 65 73 20 62 65 68 61 76 65 20 61 73 20 69 66  res behave as if
a1e0: 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20   integer .      
a1f0: 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63    ** overflow oc
a200: 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20  curred..        
a210: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
a220: 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41  A==-1 && iB==SMA
a230: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 69 41  LLEST_INT64 ) iA
a240: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42   = 1;.        iB
a250: 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   /= iA;.        
a260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
a270: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
a280: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a290: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
a2a0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a2b0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
a2c0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
a2d0: 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69  .        iB %= i
a2e0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a2f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
a300: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
a310: 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  iB;.    MemSetTy
a320: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
a330: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _Int);.  }else{.
a340: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
a350: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
a360: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
a370: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
a380: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
a390: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
a3a0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
a3b0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
a3c0: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
a3d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a3e0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
a3f0: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
a400: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a410: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
a420: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
a430: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a440: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
a450: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
a460: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
a470: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
a480: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
a490: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
a4a0: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
a4b0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
a4c0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
a4d0: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
a4e0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
a4f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
a500: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
a510: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
a520: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
a530: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
a540: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
a550: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a560: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
a570: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
a580: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
a590: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
a5a0: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
a5b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a5c0: 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
a5d0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
a5e0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
a5f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a600: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
a610: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
a620: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a630: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
a640: 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73  ;.    if( (flags
a650: 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
a660: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
a670: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
a680: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
a690: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
a6a0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
a6b0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
a6c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
a6d0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
a6e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a6f0: 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a  CollSeq * * P4.*
a700: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
a710: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
a720: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
a730: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
a740: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
a750: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
a760: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
a770: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
a780: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
a790: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
a7a0: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
a7b0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
a7c0: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
a7d0: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
a7e0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
a7f0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
a800: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
a810: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
a820: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
a830: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
a840: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
a850: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a860: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
a870: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
a880: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
a890: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
a8a0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
a8b0: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
a8c0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
a8d0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
a8e0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
a8f0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61  OLLSEQ );.  brea
a900: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a910: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
a920: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
a930: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
a940: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
a950: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
a960: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
a970: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
a980: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
a990: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
a9a0: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
a9b0: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
a9c0: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
a9d0: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
a9e0: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
a9f0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
aa00: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
aa10: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
aa20: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
aa30: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
aa40: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
aa50: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
aa60: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
aa70: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
aa80: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
aa90: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
aaa0: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
aab0: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
aac0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
aad0: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
aae0: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
aaf0: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
ab00: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
ab10: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
ab20: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
ab30: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
ab40: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
ab50: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
ab60: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
ab70: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
ab80: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
ab90: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
aba0: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
abb0: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
abc0: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
abd0: 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46  AggStep and AggF
abe0: 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  inal.*/.case OP_
abf0: 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  Function: {.  in
ac00: 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  t i;.  Mem *pArg
ac10: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
ac20: 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
ac30: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
ac40: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  ;.  int n;..  n 
ac50: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56  = pOp->p5;.  apV
ac60: 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
ac70: 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
ac80: 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73  | n==0 );..  ass
ac90: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
aca0: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
acb0: 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29  p2+n<=p->nMem+1)
acc0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
acd0: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
ace0: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
acf0: 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20  2+n );.  pArg = 
ad00: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
ad10: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
ad20: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
ad30: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
ad40: 70 41 72 67 3b 0a 20 20 20 20 73 71 6c 69 74 65  pArg;.    sqlite
ad50: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
ad60: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47  e(pArg);.    REG
ad70: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
ad80: 3e 70 32 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a  >p2, pArg);.  }.
ad90: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ada0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
adb0: 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  EF || pOp->p4typ
adc0: 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29  e==P4_VDBEFUNC )
add0: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ;.  if( pOp->p4t
ade0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
adf0: 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  ){.    ctx.pFunc
ae00: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
ae10: 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  ;.    ctx.pVdbeF
ae20: 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  unc = 0;.  }else
ae30: 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  {.    ctx.pVdbeF
ae40: 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a  unc = (VdbeFunc*
ae50: 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75  )pOp->p4.pVdbeFu
ae60: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e  nc;.    ctx.pFun
ae70: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
ae80: 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  c->pFunc;.  }.. 
ae90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
aea0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
aeb0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
aec0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
aed0: 3e 70 33 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >p3];.  ctx.s.fl
aee0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
aef0: 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b    ctx.s.db = db;
af00: 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20  .  ctx.s.xDel = 
af10: 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c  0;.  ctx.s.zMall
af20: 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68  oc = 0;..  /* Th
af30: 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61  e output cell ma
af40: 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  y already have a
af50: 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65   buffer allocate
af60: 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65  d. Move.  ** the
af70: 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e   pointer to ctx.
af80: 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65  s so in case the
af90: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63   user-function c
afa0: 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20  an use.  ** the 
afb0: 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
afc0: 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64  d buffer instead
afd0: 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61   of allocating a
afe0: 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20   new one..  */. 
aff0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
b000: 6f 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74  ove(&ctx.s, pOut
b010: 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  );.  MemSetTypeF
b020: 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f  lag(&ctx.s, MEM_
b030: 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73  Null);..  ctx.is
b040: 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28  Error = 0;.  if(
b050: 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67   ctx.pFunc->flag
b060: 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
b070: 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20  NEEDCOLL ){.    
b080: 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
b090: 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
b0a0: 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
b0b0: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
b0c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
b0d0: 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
b0e0: 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
b0f0: 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
b100: 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
b110: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
b120: 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
b130: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
b140: 69 73 75 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70  isuse;.  (*ctx.p
b150: 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74  Func->xFunc)(&ct
b160: 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20  x, n, apVal);.  
b170: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
b180: 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 73  yOn(db) ){.    s
b190: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
b1a0: 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
b1b0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
b1c0: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a  _to_misuse;.  }.
b1d0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
b1e0: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a  Failed ){.    /*
b1f0: 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d   Even though a m
b200: 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c  alloc() has fail
b210: 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ed, the implemen
b220: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  tation of the.  
b230: 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69    ** user functi
b240: 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c  on may have call
b250: 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65  ed an sqlite3_re
b260: 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74  sult_XXX() funct
b270: 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65  ion.    ** to re
b280: 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68  turn a value. Th
b290: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
b2a0: 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65   releases any re
b2b0: 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61  sources.    ** a
b2c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73  ssociated with s
b2d0: 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20  uch a value..   
b2e0: 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e 6f 74 65 3a   **.    ** Note:
b2f0: 20 4d 61 79 62 65 20 4d 65 6d 52 65 6c 65 61 73   Maybe MemReleas
b300: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 20 63 61  e() should be ca
b310: 6c 6c 65 64 20 69 66 20 73 71 6c 69 74 65 33 53  lled if sqlite3S
b320: 61 66 65 74 79 4f 6e 28 29 0a 20 20 20 20 2a 2a  afetyOn().    **
b330: 20 66 61 69 6c 73 20 61 6c 73 6f 20 28 74 68 65   fails also (the
b340: 20 69 66 28 2e 2e 2e 29 20 73 74 61 74 65 6d 65   if(...) stateme
b350: 6e 74 20 61 62 6f 76 65 29 2e 20 42 75 74 20 69  nt above). But i
b360: 66 20 70 65 6f 70 6c 65 20 61 72 65 0a 20 20 20  f people are.   
b370: 20 2a 2a 20 6d 69 73 75 73 69 6e 67 20 73 71 6c   ** misusing sql
b380: 69 74 65 2c 20 74 68 65 79 20 68 61 76 65 20 62  ite, they have b
b390: 69 67 67 65 72 20 70 72 6f 62 6c 65 6d 73 20 74  igger problems t
b3a0: 68 61 6e 20 61 20 6c 65 61 6b 65 64 20 76 61 6c  han a leaked val
b3b0: 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ue..    */.    s
b3c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
b3d0: 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
b3e0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
b3f0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20   }..  /* If any 
b400: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66  auxiliary data f
b410: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65  unctions have be
b420: 65 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69  en called by thi
b430: 73 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c  s user function,
b440: 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  .  ** immediatel
b450: 79 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72  y call the destr
b460: 75 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f  uctor for any no
b470: 6e 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e  n-static values.
b480: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  .  */.  if( ctx.
b490: 70 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20  pVdbeFunc ){.   
b4a0: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
b4b0: 74 65 41 75 78 44 61 74 61 28 63 74 78 2e 70 56  teAuxData(ctx.pV
b4c0: 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31  dbeFunc, pOp->p1
b4d0: 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70  );.    pOp->p4.p
b4e0: 56 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70  VdbeFunc = ctx.p
b4f0: 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f  VdbeFunc;.    pO
b500: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56  p->p4type = P4_V
b510: 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20  DBEFUNC;.  }..  
b520: 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69  /* If the functi
b530: 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65  on returned an e
b540: 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65  rror, throw an e
b550: 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66  xception */.  if
b560: 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
b570: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
b580: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
b590: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
b5a0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
b5b0: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
b5c0: 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
b5d0: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
b5e0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
b5f0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
b600: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
b610: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
b620: 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73  eEncoding(&ctx.s
b630: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73  , encoding);.  s
b640: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
b650: 65 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b  e(pOut, &ctx.s);
b660: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
b670: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74  beMemTooBig(pOut
b680: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
b690: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47  o_big;.  }.  REG
b6a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b6b0: 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
b6c0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
b6d0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
b6e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b6f0: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
b700: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
b710: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
b720: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
b730: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b740: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
b750: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b760: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b770: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b780: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b790: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b7a0: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
b7b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b7c0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
b7d0: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
b7e0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
b7f0: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
b800: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
b810: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b820: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b830: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b840: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b850: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b860: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
b870: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
b880: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
b890: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b8a0: 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66  er P2 to the lef
b8b0: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
b8c0: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
b8d0: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
b8e0: 67 65 72 20 69 6e 20 72 65 67 69 73 65 72 20 50  ger in regiser P
b8f0: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
b900: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b910: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b920: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b930: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b940: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b950: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
b960: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b970: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
b980: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
b990: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
b9a0: 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a   right by the.**
b9b0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
b9c0: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
b9d0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
b9e0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
b9f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
ba00: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
ba10: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
ba20: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
ba30: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
ba40: 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20  case OP_BitAnd: 
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
ba70: 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  TAND, in1, in2, 
ba80: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
ba90: 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20  BitOr:          
baa0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bab0: 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31  as TK_BITOR, in1
bac0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
bad0: 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74  ase OP_ShiftLeft
bae0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
baf0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48  * same as TK_LSH
bb00: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
bb10: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
bb20: 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20  hiftRight: {    
bb30: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bb40: 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31  s TK_RSHIFT, in1
bb50: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
bb60: 20 69 36 34 20 61 3b 0a 20 20 69 36 34 20 62 3b   i64 a;.  i64 b;
bb70: 0a 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ..  if( (pIn1->f
bb80: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
bb90: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
bba0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
bbb0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
bbc0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
bbd0: 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65 33 56  }.  a = sqlite3V
bbe0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
bbf0: 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74 65 33  );.  b = sqlite3
bc00: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
bc10: 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70 4f  1);.  switch( pO
bc20: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
bc30: 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a   case OP_BitAnd:
bc40: 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20 20 20        a &= b;   
bc50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
bc60: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
bc70: 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20 62 72    a |= b;     br
bc80: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
bc90: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 61 20  _ShiftLeft:   a 
bca0: 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61 6b 3b  <<= b;    break;
bcb0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 61  .    default:  a
bcc0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
bcd0: 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68  de==OP_ShiftRigh
bce0: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t );.           
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
bd00: 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61 6b 3b  >>= b;    break;
bd10: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
bd20: 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = a;.  MemSetTy
bd30: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
bd40: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
bd50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
bd60: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
bd70: 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65  *.** .** Add the
bd80: 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20   constant P2 to 
bd90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bda0: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ister P1..** The
bdb0: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
bdc0: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  s an integer..**
bdd0: 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79  .** To force any
bde0: 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20   register to be 
bdf0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74  an integer, just
be00: 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20   add 0..*/.case 
be10: 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20  OP_AddImm: {    
be20: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
be30: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
be40: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
be50: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
be60: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
be70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
be80: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
be90: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
bea0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
beb0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bec0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
bed0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
bee0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
bef0: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
bf00: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
bf10: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
bf20: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
bf30: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
bf40: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
bf50: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
bf60: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
bf70: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
bf80: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
bf90: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
bfa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
bfb0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 70 70  mp, in1 */.  app
bfc0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
bfd0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
bfe0: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
bff0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c000: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
c010: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   ){.    if( pOp-
c020: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
c030: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d  rc = SQLITE_MISM
c040: 41 54 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f  ATCH;.      goto
c050: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
c060: 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
c070: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
c080: 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
c090: 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65  }else{.    MemSe
c0a0: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
c0b0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
c0c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c0d0: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
c0e0: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
c0f0: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
c100: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
c110: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
c120: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
c130: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
c140: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
c150: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
c160: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
c170: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
c180: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
c190: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
c1a0: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
c1b0: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
c1c0: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
c1d0: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
c1e0: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
c1f0: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
c200: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
c210: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
c220: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
c230: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
c240: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
c250: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
c260: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
c270: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c280: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
c290: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c2a0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
c2b0: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
c2c0: 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20  code: ToText P1 
c2d0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c2e0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c2f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c300: 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74  be text..** If t
c310: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
c320: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
c330: 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  to a string usin
c340: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
c350: 65 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e  ent of printf().
c360: 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72    Blob values ar
c370: 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a  e unchanged and.
c380: 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64  ** are afterward
c390: 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72  s simply interpr
c3a0: 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a  eted as text..**
c3b0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c3c0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c3d0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c3e0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c3f0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c400: 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Text: {         
c410: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c420: 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20   as TK_TO_TEXT, 
c430: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e  in1 */.  if( pIn
c440: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c450: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61  ull ) break;.  a
c460: 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d  ssert( MEM_Str==
c470: 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b  (MEM_Blob>>3) );
c480: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  .  pIn1->flags |
c490: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
c4a0: 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61  EM_Blob)>>3;.  a
c4b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
c4c0: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
c4d0: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
c4e0: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
c4f0: 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74  (pIn1);.  assert
c500: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c510: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
c520: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
c530: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
c540: 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  ~(MEM_Int|MEM_Re
c550: 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  al|MEM_Blob|MEM_
c560: 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f  Zero);.  UPDATE_
c570: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
c580: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
c590: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f  /* Opcode: ToBlo
c5a0: 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  b P1 * * * *.**.
c5b0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
c5c0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c5d0: 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a  1 to be a BLOB..
c5e0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c5f0: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
c600: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
c610: 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72  ng first..** Str
c620: 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20  ings are simply 
c630: 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  reinterpreted as
c640: 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63   blobs with no c
c650: 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20  hange.** to the 
c660: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e  underlying data.
c670: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c680: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c690: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c6a0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c6b0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c6c0: 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  _ToBlob: {      
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c6e0: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f  ame as TK_TO_BLO
c6f0: 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  B, in1 */.  if( 
c700: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c710: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
c720: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c730: 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
c740: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
c750: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
c760: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
c770: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73  coding);.    ass
c780: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
c790: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
c7a0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
c7b0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c7c0: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42  Flag(pIn1, MEM_B
c7d0: 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  lob);.  }else{. 
c7e0: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26     pIn1->flags &
c7f0: 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  = ~(MEM_TypeMask
c800: 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  &~MEM_Blob);.  }
c810: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c820: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
c830: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c840: 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50  ode: ToNumeric P
c850: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c860: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c870: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c880: 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69  o be numeric (ei
c890: 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67  ther an.** integ
c8a0: 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67  er or a floating
c8b0: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a  -point number.).
c8c0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c8d0: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c8e0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c8f0: 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74  it to an using t
c900: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
c910: 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74   of atoi() or at
c920: 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  of() and store 0
c930: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c940: 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f  ersion .** is po
c950: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
c960: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c970: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c980: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c990: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c9a0: 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69  case OP_ToNumeri
c9b0: 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  c: {            
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 4e 55 4d 45 52 49 43 2c 20   TK_TO_NUMERIC, 
c9e0: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  in1 */.  if( (pI
c9f0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n1->flags & (MEM
ca00: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45  _Null|MEM_Int|ME
ca10: 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20  M_Real))==0 ){. 
ca20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ca30: 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b  mNumerify(pIn1);
ca40: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
ca50: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ca60: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
ca70: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20  * Opcode: ToInt 
ca80: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
ca90: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
caa0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cab0: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
cac0: 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  If.** The value 
cad0: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72  is currently a r
cae0: 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70  eal number, drop
caf0: 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20   its fractional 
cb00: 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  part..** If the 
cb10: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
cb20: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
cb30: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69  nvert it to an i
cb40: 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65  nteger using the
cb50: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
cb60: 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f  f atoi() and sto
cb70: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
cb80: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f  conversion is po
cb90: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
cba0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
cbb0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
cbc0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
cbd0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
cbe0: 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b  case OP_ToInt: {
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cc10: 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20  TO_INT, in1 */. 
cc20: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
cc30: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
cc40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
cc50: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
cc60: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
cc70: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
cc80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cc90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65  ./* Opcode: ToRe
cca0: 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  al P1 * * * *.**
ccb0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
ccc0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ccd0: 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74  P1 to be a float
cce0: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
ccf0: 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75  ..** If The valu
cd00: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
cd10: 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65  n integer, conve
cd20: 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65  rt it..** If the
cd30: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
cd40: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
cd50: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
cd60: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
cd70: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cd80: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
cd90: 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75  ore 0.0 if no su
cda0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
cdb0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
cdc0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cdd0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cde0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cdf0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
ce00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61  */.case OP_ToRea
ce10: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
ce20: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ce30: 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31   TK_TO_REAL, in1
ce40: 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
ce50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
ce60: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
ce70: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
ce80: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
ce90: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
cea0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
ceb0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
cec0: 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50  e: Lt P1 P2 P3 P
ced0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  4 P5.**.** Compa
cee0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
cef0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
cf00: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
cf10: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
cf20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
cf30: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
cf40: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
cf50: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
cf60: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
cf70: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
cf80: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
cf90: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
cfa0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
cfb0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
cfc0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
cfd0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 20 69 66  hen fall thru if
cfe0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
cff0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
d000: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d010: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
d020: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
d030: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
d040: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
d050: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
d060: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
d070: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
d080: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
d090: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
d0a0: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
d0b0: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
d0c0: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
d0d0: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
d0e0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
d0f0: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
d100: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
d110: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
d120: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
d130: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
d140: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
d150: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
d160: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
d170: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
d180: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
d190: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
d1a0: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
d1b0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d1c0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
d1d0: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
d1e0: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
d1f0: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
d200: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
d210: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
d220: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
d230: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
d240: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
d250: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
d260: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
d270: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
d280: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
d290: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
d2a0: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
d2b0: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
d2c0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
d2d0: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
d2e0: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
d2f0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
d300: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
d310: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
d320: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
d330: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
d340: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
d350: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
d360: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
d370: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
d380: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
d390: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
d3a0: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
d3b0: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
d3c0: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
d3d0: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
d3e0: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
d3f0: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
d400: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
d410: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  obs..**.** If th
d420: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
d430: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
d440: 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  t, then do not j
d450: 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a  ump.  Instead,.*
d460: 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61  * store a boolea
d470: 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72  n result (either
d480: 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c   0, or 1, or NUL
d490: 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  L) in register P
d4a0: 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  2..*/./* Opcode:
d4b0: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
d4c0: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d4d0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d4e0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d4f0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d500: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d510: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
d520: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d530: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
d540: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
d550: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
d560: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d570: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
d580: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
d590: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
d5a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
d5b0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
d5c0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
d5d0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
d5e0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
d5f0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
d600: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
d610: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
d620: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
d630: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
d640: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d650: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
d660: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
d670: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d680: 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65 73 75  ULL the the resu
d690: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
d6a0: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
d6b0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
d6c0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
d6d0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
d6e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .*/./* Opcode: E
d6f0: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
d700: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d710: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d720: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d730: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d740: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d750: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
d760: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d770: 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20  3 are equal..** 
d780: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d790: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
d7a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
d7b0: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
d7c0: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
d7d0: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
d7e0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
d7f0: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
d800: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
d810: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
d820: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
d830: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
d840: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
d850: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
d860: 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69   is true.  If ei
d870: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
d880: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
d890: 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a  sult is false..*
d8a0: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
d8b0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d8c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
d8d0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
d8e0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
d8f0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
d900: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
d910: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
d920: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
d930: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d940: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d950: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d960: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d970: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d980: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d990: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d9a0: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
d9b0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
d9c0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
d9d0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
d9e0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d9f0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
da00: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
da10: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
da20: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
da30: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
da40: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
da50: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
da60: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
da70: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
da80: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
da90: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
daa0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
dab0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
dac0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
dad0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
dae0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
daf0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
db00: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
db10: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
db20: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
db30: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
db40: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
db50: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
db60: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
db70: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
db80: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
db90: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
dba0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
dbb0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
dbc0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
dbd0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
dbe0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dc00: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
dc10: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
dc20: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
dc40: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
dc50: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
dc60: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
dc70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dc80: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
dc90: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
dca0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
dcb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dcc0: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
dcd0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
dce0: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
dcf0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dd00: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
dd10: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
dd20: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
dd30: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dd40: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
dd50: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
dd60: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
dd70: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
dd80: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
dd90: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
dda0: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
ddb0: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
ddc0: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
ddd0: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 0a 20 20  omparison */..  
dde0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ddf0: 20 7c 20 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26   | pIn3->flags)&
de00: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
de10: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
de20: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
de30: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
de40: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
de50: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
de60: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
de70: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
de80: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
de90: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
dea0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
deb0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
dec0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
ded0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
dee0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
def0: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
df00: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
df10: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
df20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
df30: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
df40: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
df50: 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20  Ne );.      res 
df60: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  = (pIn1->flags &
df70: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
df80: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20  EM_Null)==0;.   
df90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
dfa0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
dfb0: 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c  s clear and at l
dfc0: 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64  east one operand
dfd0: 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20   is NULL,.      
dfe0: 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  ** then the resu
dff0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
e000: 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20  L..      ** The 
e010: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e020: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
e030: 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65  IFNULL bit is se
e040: 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  t..      */.    
e050: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
e060: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
e070: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
e080: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
e090: 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  2];.        MemS
e0a0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e0b0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
e0c0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e0d0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e0e0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
e0f0: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
e100: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29  ITE_JUMPIFNULL )
e110: 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70  {.        pc = p
e120: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20  Op->p2-1;.      
e130: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
e140: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
e150: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
e160: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
e170: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
e180: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
e190: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
e1a0: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
e1b0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b   if( affinity ){
e1c0: 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
e1d0: 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e  nity(pIn1, affin
e1e0: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
e1f0: 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
e200: 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69  ity(pIn3, affini
e210: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
e220: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c       if( db->mal
e230: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
e240: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a   no_mem;.    }..
e250: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
e260: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
e270: 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
e280: 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45  Coll==0 );.    E
e290: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
e2a0: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
e2b0: 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d  pIn3);.    res =
e2c0: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
e2d0: 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
e2e0: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
e2f0: 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70   }.  switch( pOp
e300: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
e310: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
e320: 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  es = res==0;    
e330: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e340: 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d   OP_Ne:    res =
e350: 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65   res!=0;     bre
e360: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e370: 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Lt:    res = res
e380: 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
e390: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
e3a0: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b     res = res<=0;
e3b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e3c0: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72  case OP_Gt:    r
e3d0: 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  es = res>0;     
e3e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
e3f0: 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d  ult:       res =
e400: 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65   res>=0;     bre
e410: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
e420: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
e430: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
e440: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
e450: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d  Op->p2];.    Mem
e460: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
e470: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
e480: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b  pOut->u.i = res;
e490: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
e4a0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
e4b0: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
e4c0: 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
e4d0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
e4e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e4f0: 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
e500: 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
e510: 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
e520: 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
e530: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
e540: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
e550: 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
e560: 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
e570: 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
e580: 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
e590: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
e5a0: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20  OP_Permutation, 
e5b0: 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f  OP_Compare,.** O
e5c0: 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65  P_Halt, or OP_Re
e5d0: 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61  sultRow.  Typica
e5e0: 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
e5f0: 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63  tation should oc
e600: 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  cur.** immediate
e610: 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
e620: 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63  OP_Compare..*/.c
e630: 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
e640: 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
e650: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
e660: 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
e670: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
e680: 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d   );.  aPermute =
e690: 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62   pOp->p4.ai;.  b
e6a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e6b0: 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
e6c0: 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
e6d0: 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63 74 6f  Compare to vecto
e6e0: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
e6f0: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
e700: 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74 68  P1+P3-1) (all th
e710: 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61  is.** one "A") a
e720: 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
e730: 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
e740: 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
e750: 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
e760: 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
e770: 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
e780: 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
e790: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
e7a0: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
e7b0: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
e7c0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
e7d0: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
e7e0: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
e7f0: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
e800: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
e810: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
e820: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
e830: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
e840: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
e850: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
e860: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
e870: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
e880: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
e890: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
e8a0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
e8b0: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
e8c0: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
e8d0: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
e8e0: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
e8f0: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
e900: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
e910: 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
e920: 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
e930: 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
e940: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
e950: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
e960: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
e970: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
e980: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
e990: 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
e9a0: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
e9b0: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
e9c0: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
e9d0: 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f  der */..  n = pO
e9e0: 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
e9f0: 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
ea00: 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
ea10: 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
ea20: 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
ea30: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
ea40: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
ea50: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  #if SQLITE_DEBUG
ea60: 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
ea70: 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
ea80: 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
ea90: 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
eaa0: 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
eab0: 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
eac0: 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
ead0: 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 70  p1>0 && p1+mx<=p
eae0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20  ->nMem+1 );.    
eaf0: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
eb00: 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p2+mx<=p->nMem+1
eb10: 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
eb20: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
eb30: 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31   p1+n<=p->nMem+1
eb40: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
eb50: 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d  p2>0 && p2+n<=p-
eb60: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23  >nMem+1 );.  }.#
eb70: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
eb80: 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
eb90: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
eba0: 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
ebb0: 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
ebc0: 3a 20 69 3b 0a 20 20 20 20 52 45 47 49 53 54 45  : i;.    REGISTE
ebd0: 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20  R_TRACE(p1+idx, 
ebe0: 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  &p->aMem[p1+idx]
ebf0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
ec00: 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 70  TRACE(p2+idx, &p
ec10: 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b  ->aMem[p2+idx]);
ec20: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
ec30: 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
ec40: 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
ec50: 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
ec60: 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
ec70: 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
ec80: 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
ec90: 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
eca0: 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d  Compare(&p->aMem
ecb0: 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d  [p1+idx], &p->aM
ecc0: 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
ecd0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
ece0: 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
ecf0: 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
ed00: 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
ed10: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ed20: 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
ed30: 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
ed40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
ed50: 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
ed60: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
ed70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
ed80: 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
ed90: 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
eda0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
edb0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
edc0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
edd0: 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
ede0: 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
edf0: 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
ee00: 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
ee10: 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
ee20: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
ee30: 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ee50: 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
ee60: 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
ee70: 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  pc = pOp->p1 - 1
ee80: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
ee90: 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
eea0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
eeb0: 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
eec0: 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
eed0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
eee0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
eef0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
ef00: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
ef10: 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
ef20: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
ef30: 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
ef40: 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
ef50: 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
ef60: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
ef70: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
ef80: 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
ef90: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
efa0: 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
efb0: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
efc0: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
efd0: 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
efe0: 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
eff0: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
f000: 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
f010: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f020: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
f030: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
f040: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
f050: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
f060: 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
f070: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
f080: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
f090: 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
f0a0: 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
f0b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
f0c0: 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
f0d0: 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
f0e0: 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
f0f0: 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
f100: 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
f110: 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
f120: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f140: 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
f150: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
f160: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f180: 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
f190: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
f1a0: 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
f1b0: 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
f1c0: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
f1d0: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
f1e0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
f1f0: 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
f200: 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
f210: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
f220: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
f230: 0a 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ..  if( pIn1->fl
f240: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f250: 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
f260: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
f270: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f280: 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
f290: 7d 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  }.  if( pIn2->fl
f2a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
f2b0: 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
f2c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
f2d0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f2e0: 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
f2f0: 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
f300: 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
f310: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f320: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
f330: 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
f340: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
f350: 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
f360: 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
f370: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
f380: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f390: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
f3a0: 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
f3b0: 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
f3c0: 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
f3d0: 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
f3e0: 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 69 66  *3+v2];.  }.  if
f3f0: 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d  ( v1==2 ){.    M
f400: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f410: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f420: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
f430: 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20  ->u.i = v1;.    
f440: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f450: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
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 4e 6f 74 20 50 31  * Opcode: Not P1
f480: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
f490: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
f4a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
f4b0: 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
f4c0: 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
f4d0: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
f4e0: 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
f4f0: 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
f500: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f510: 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
f520: 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
f530: 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
f540: 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f560: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
f570: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74  T, in1 */.  pOut
f580: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
f590: 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
f5a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f5b0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
f5c0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
f5d0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f5e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f5f0: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
f600: 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
f610: 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
f620: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
f630: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
f640: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f650: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f660: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f670: 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
f680: 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
f690: 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
f6a0: 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
f6b0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
f6c0: 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
f6d0: 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
f6e0: 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
f6f0: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
f700: 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
f710: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f720: 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
f730: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d   */.  pOut = &p-
f740: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
f750: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f760: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f770: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f780: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
f790: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
f7a0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
f7b0: 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69  nt64(pOut, ~sqli
f7c0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
f7d0: 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
f7e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f7f0: 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
f800: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
f810: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
f820: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f830: 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
f840: 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e  lue is.** is con
f850: 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
f860: 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
f870: 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
f880: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
f890: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
f8a0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
f8b0: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
f8c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
f8d0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f8e0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
f8f0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
f900: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
f910: 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  lse.  The value 
f920: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
f930: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 68  red true if it h
f940: 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
f950: 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
f960: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
f970: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
f980: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
f990: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
f9a0: 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
f9c0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
f9d0: 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
f9e0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
f9f0: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
fa00: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
fa10: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
fa20: 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
fa30: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
fa40: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
fa50: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
fa60: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
fa70: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
fa80: 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
fa90: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
faa0: 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
fab0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
fac0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
fad0: 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
fae0: 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a  .  }.  if( c ){.
faf0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fb00: 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
fb10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
fb20: 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
fb30: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
fb40: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
fb50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
fb60: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
fb70: 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
fb80: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fb90: 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
fba0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  mp, in1 */.  if(
fbb0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
fbc0: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
fbd0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fbe0: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
fbf0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fc00: 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
fc10: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
fc20: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
fc30: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
fc40: 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
fc50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
fc60: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
fc70: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fc80: 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
fc90: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  n1 */.  if( (pIn
fca0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
fcb0: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
fcc0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
fcd0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
fce0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
fcf0: 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
fd00: 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  5.**.** Interpre
fd10: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
fd20: 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
fd30: 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
fd40: 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
fd50: 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
fd60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
fd70: 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
fd80: 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
fd90: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
fda0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
fdb0: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
fdc0: 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
fdd0: 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
fde0: 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
fdf0: 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
fe00: 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
fe10: 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
fe20: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
fe30: 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
fe40: 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
fe50: 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
fe60: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
fe70: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
fe80: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
fe90: 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
fea0: 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
feb0: 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
fec0: 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
fed0: 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
fee0: 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
fef0: 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
ff00: 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
ff10: 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
ff20: 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
ff30: 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
ff40: 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
ff50: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
ff60: 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
ff70: 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
ff80: 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
ff90: 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
ffa0: 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
ffb0: 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
ffc0: 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
ffd0: 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
ffe0: 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
fff0: 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
10000 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
10010 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
10020 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f  this bit set..*/
10030 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
10040 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64   {.  u32 payload
10050 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65  Size;   /* Numbe
10060 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
10070 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
10080 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
10090 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
100a0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
100b0 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  d */.  int p1;  
100c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20            /* P1 
100d0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
100e0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ode */.  int p2;
100f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
10100 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
10110 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
10120 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
10130 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
10140 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
10150 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
10160 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
10170 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
10180 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
10190 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
101a0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
101b0 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
101c0 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
101d0 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
101e0 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
101f0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
10200 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
10210 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
10220 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
10230 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
10240 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
10250 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
10260 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
10270 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
10280 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
10290 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
102a0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
102b0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
102c0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
102d0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
102e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
102f0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
10300 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
10310 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
10320 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
10330 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
10340 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
10350 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
10360 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
10370 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
10380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
10390 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
103a0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
103b0 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b  d */.  u8 *zIdx;
103c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
103d0 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a  ex into header *
103e0 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  /.  u8 *zEndHdr;
103f0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10400 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
10410 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
10420 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
10430 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
10440 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
10450 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
10460 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
10470 69 74 20 6f 66 66 73 65 74 2e 20 20 36 34 20 62  it offset.  64 b
10480 69 74 73 20 6e 65 65 64 65 64 20 74 6f 20 63 61  its needed to ca
10490 74 63 68 20 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a  tch overflow */.
104a0 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20    int szHdr;    
104b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
104c0 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65 20  the header size 
104d0 66 69 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f  field at start o
104e0 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  f record */.  in
104f0 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  t avail;        
10500 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
10510 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
10520 20 64 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a   data */.  Mem *
10530 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
10540 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
10550 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
10560 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10570 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10580 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d  .  pC = 0;.  mem
10590 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
105a0 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
105b0 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
105c0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
105d0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
105e0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
105f0 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
10600 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
10610 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10620 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
10630 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a  );.  zRec = 0;..
10640 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
10650 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
10660 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
10670 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
10680 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
10690 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
106a0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
106b0 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
106c0 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
106d0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
106e0 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
106f0 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
10700 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
10710 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
10720 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
10730 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
10740 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
10750 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
10760 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
10770 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
10780 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
10790 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
107a0 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
107b0 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
107c0 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
107d0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
107e0 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
107f0 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
10800 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
10810 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
10820 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
10830 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
10840 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
10850 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
10860 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
10870 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
10880 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
10890 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
108a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
108b0 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
108c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
108d0 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
108e0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
108f0 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
10900 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
10910 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
10920 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
10930 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
10940 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
10950 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
10960 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
10970 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
10980 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
10990 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
109a0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
109b0 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
109c0 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
109d0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
109e0 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
109f0 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
10a00 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
10a10 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
10a20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
10a30 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
10a40 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
10a50 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
10a60 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
10a70 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
10a80 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
10a90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
10aa0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
10ab0 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
10ac0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
10ad0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10ae0 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61  ;   /* True beca
10af0 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
10b00 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
10b10 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c   */.      /* sql
10b20 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
10b30 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
10b40 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
10b50 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
10b60 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
10b70 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
10b80 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
10b90 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
10ba0 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
10bb0 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
10bc0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
10bd0 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
10be0 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
10bf0 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
10c00 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   );.      payloa
10c10 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
10c20 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
10c30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
10c40 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
10c50 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
10c60 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72  Crsr) );.      r
10c70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
10c80 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
10c90 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  &payloadSize);. 
10ca0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
10cb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
10cc0 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
10cd0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
10ce0 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70   }.  }else if( p
10cf0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
10d00 67 3e 30 20 29 7b 0a 20 20 20 20 70 52 65 67 20  g>0 ){.    pReg 
10d10 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 43 2d 3e 70  = &p->aMem[pC->p
10d20 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
10d30 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
10d40 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
10d50 6f 62 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61  ob );.    payloa
10d60 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b  dSize = pReg->n;
10d70 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67  .    zRec = pReg
10d80 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ->z;.    pC->cac
10d90 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d  heStatus = (pOp-
10da0 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52  >p5&OPFLAG_CLEAR
10db0 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53  CACHE) ? CACHE_S
10dc0 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43  TALE : p->cacheC
10dd0 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  tr;.    assert( 
10de0 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
10df0 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d  | zRec!=0 );.  }
10e00 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e  else{.    /* Con
10e10 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f  sider the row to
10e20 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   be NULL */.    
10e30 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b  payloadSize = 0;
10e40 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10e50 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10e60 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
10e70 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
10e80 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
10e90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
10ea0 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10eb0 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
10ec0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10ed0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
10ee0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10ef0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
10f00 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
10f10 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
10f20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10f30 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10f40 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10f50 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
10f60 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61   pC->nField;.  a
10f70 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64  ssert( p2<nField
10f80 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61   );..  /* Read a
10f90 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62  nd parse the tab
10fa0 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72  le header.  Stor
10fb0 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
10fc0 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20   the parse.  ** 
10fd0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
10fe0 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65  header cache fie
10ff0 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f  lds of the curso
11000 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20  r..  */.  aType 
11010 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69  = pC->aType;.  i
11020 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
11030 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
11040 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d  ){.    aOffset =
11050 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
11060 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
11070 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76  t(aType);.    av
11080 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  ail = 0;.    pC-
11090 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73  >aOffset = aOffs
110a0 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65  et = &aType[nFie
110b0 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79  ld];.    pC->pay
110c0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f  loadSize = paylo
110d0 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e  adSize;.    pC->
110e0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
110f0 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20  >cacheCtr;..    
11100 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f  /* Figure out ho
11110 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65  w many bytes are
11120 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a   in the header *
11130 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  /.    if( zRec )
11140 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  {.      zData = 
11150 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  zRec;.    }else{
11160 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
11170 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
11180 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
11190 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79  )sqlite3BtreeKey
111a0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
111b0 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ail);.      }els
111c0 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
111d0 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
111e0 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
111f0 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
11200 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a        }.      /*
11210 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44   If KeyFetch()/D
11220 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67  ataFetch() manag
11230 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e  ed to get the en
11240 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20  tire payload,.  
11250 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20      ** save the 
11260 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70  payload in the p
11270 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
11280 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75  That will save u
11290 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20  s from.      ** 
112a0 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61  having to make a
112b0 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20  dditional calls 
112c0 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e  to fetch the con
112d0 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a  tent portion of.
112e0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
112f0 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
11300 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
11310 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  l>=0 );.      if
11320 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ( payloadSize <=
11330 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
11340 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44         zRec = zD
11350 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ata;.        pC-
11360 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61  >aRow = (u8*)zDa
11370 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ta;.      }else{
11380 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
11390 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  w = 0;.      }. 
113a0 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20     }.    /* The 
113b0 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
113c0 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20   is true in all 
113d0 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65  cases accept whe
113e0 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  n.    ** the dat
113f0 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62  abase file has b
11400 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78  een corrupted ex
11410 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a  ternally..    **
11420 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63      assert( zRec
11430 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61  !=0 || avail>=pa
11440 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61  yloadSize || ava
11450 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20  il>=9 ); */.    
11460 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e  szHdr = getVarin
11470 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  t32((u8*)zData, 
11480 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a  offset);..    /*
11490 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
114a0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
114b0 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
114c0 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
114d0 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
114e0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
114f0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
11500 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
11510 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
11520 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
11530 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
11540 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
11550 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
11560 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
11570 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
11580 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
11590 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
115a0 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
115b0 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
115c0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
115d0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
115e0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
115f0 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
11600 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
11610 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
11620 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
11630 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
11640 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
11650 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
11660 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
11670 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
11680 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
11690 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20  set > 98307 ){. 
116a0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
116b0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
116c0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
116d0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a  umn_out;.    }..
116e0 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69      /* Compute i
116f0 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  n len the number
11700 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
11710 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61  a we need to rea
11720 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  d in order.    *
11730 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20  * to get nField 
11740 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66  type values.  of
11750 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72  fset is an upper
11760 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20   bound on this. 
11770 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65   But.    ** nFie
11780 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e  ld might be sign
11790 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74  ificantly less t
117a0 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d  han the true num
117b0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20  ber of columns. 
117c0 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62     ** in the tab
117d0 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20  le, and in that 
117e0 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33  case, 5*nField+3
117f0 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65   might be smalle
11800 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20  r than offset.. 
11810 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f     ** We want to
11820 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e   minimize len in
11830 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20   order to limit 
11840 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
11850 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c  memory.    ** al
11860 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69  location, especi
11870 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70  ally if a corrup
11880 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  t database file 
11890 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65  has caused offse
118a0 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f  t.    ** to be o
118b0 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74  versized. Offset
118c0 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39   is limited to 9
118d0 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74  8307 above.  But
118e0 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20   98307 might.   
118f0 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64   ** still exceed
11900 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
11910 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
11920 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75   on some configu
11930 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20  rations..    ** 
11940 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20  On systems that 
11950 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20  cannot tolerate 
11960 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
11970 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64  ocations, nField
11980 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c  *5+3.    ** will
11990 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20   likely be much 
119a0 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46  smaller since nF
119b0 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  ield will likely
119c0 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20   be less than.  
119d0 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20    ** 20 or so.  
119e0 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61  This insures tha
119f0 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  t Robson memory 
11a00 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11a10 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74  s are.    ** not
11a20 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66   exceeded even f
11a30 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62  or corrupt datab
11a40 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a  ase files..    *
11a50 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65  /.    len = nFie
11a60 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66  ld*5 + 3;.    if
11a70 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66  ( len > (int)off
11a80 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74  set ) len = (int
11a90 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a  )offset;..    /*
11aa0 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20   The KeyFetch() 
11ab0 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61  or DataFetch() a
11ac0 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e  bove are fast an
11ad0 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65  d will get the e
11ae0 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63  ntire.    ** rec
11af0 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f  ord header in mo
11b00 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74  st cases.  But t
11b10 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f  hey will fail to
11b20 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74   get the complet
11b30 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
11b40 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65  header if the re
11b50 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73  cord header does
11b60 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69   not fit on a si
11b70 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a  ngle page.    **
11b80 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20   in the B-Tree. 
11b90 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65   When that happe
11ba0 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56  ns, use sqlite3V
11bb0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11bc0 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75  ) to.    ** acqu
11bd0 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ire the complete
11be0 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20   header text..  
11bf0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52    */.    if( !zR
11c00 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20  ec && avail<len 
11c10 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
11c20 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
11c30 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
11c40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
11c50 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
11c60 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43  Crsr, 0, len, pC
11c70 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d  ->isIndex, &sMem
11c80 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
11c90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
11ca0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11cb0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
11cc0 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  }.      zData = 
11cd0 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20  sMem.z;.    }.  
11ce0 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20    zEndHdr = (u8 
11cf0 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20  *)&zData[len];. 
11d00 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29     zIdx = (u8 *)
11d10 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a  &zData[szHdr];..
11d20 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20      /* Scan the 
11d30 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69  header and use i
11d40 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65  t to fill in the
11d50 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66   aType[] and aOf
11d60 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72  fset[].    ** ar
11d70 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20  rays.  aType[i] 
11d80 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
11d90 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f   type integer fo
11da0 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a  r the i-th.    *
11db0 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66  * column and aOf
11dc0 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  fset[i] will con
11dd0 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20  tain the offset 
11de0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
11df0 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ng.    ** of the
11e00 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73   record to the s
11e10 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61  tart of the data
11e20 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f   for the i-th co
11e30 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lumn.    */.    
11e40 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73 65  offset64 = offse
11e50 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  t;.    for(i=0; 
11e60 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
11e70 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
11e80 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
11e90 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
11ea0 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20 20  u32)offset64;.  
11eb0 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65        zIdx += ge
11ec0 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
11ed0 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
11ee0 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
11ef0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11f00 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d  TypeLen(aType[i]
11f10 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
11f20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20          /* If i 
11f30 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69  is less that nFi
11f40 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  eld, then there 
11f50 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20  are less fields 
11f60 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  in this.        
11f70 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53  ** record than S
11f80 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64  etNumColumns ind
11f90 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65  icated there are
11fa0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
11fb0 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
11fc0 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74  . Set the offset
11fd0 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63   for any extra c
11fe0 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65  olumns not prese
11ff0 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a  nt in.        **
12000 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30   the record to 0
12010 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64  . This tells cod
12020 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65  e below to store
12030 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20   a NULL.        
12040 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  ** instead of de
12050 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
12060 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
12070 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
12080 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
12090 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
120a0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
120b0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
120c0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
120d0 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
120e0 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
120f0 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
12100 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
12110 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
12120 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
12130 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
12140 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
12150 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
12160 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
12170 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
12180 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
12190 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
121a0 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
121b0 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
121c0 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
121d0 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
121e0 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
121f0 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
12200 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
12210 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
12220 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
12230 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
12240 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f   > zEndHdr)|| (o
12250 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f 61  ffset64 > payloa
12260 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28  dSize).     || (
12270 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
12280 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34 29   offset64!=(u64)
12290 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a  payloadSize) ){.
122a0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
122b0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
122c0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
122d0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
122e0 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
122f0 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61  e column informa
12300 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74  tion. If aOffset
12310 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  [p2] is non-zero
12320 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73  , then .  ** des
12330 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c  erialize the val
12340 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
12350 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  rd. If aOffset[p
12360 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a  2] is zero,.  **
12370 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
12380 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64  not enough field
12390 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
123a0 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20  to satisfy the. 
123b0 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e   ** request.  In
123c0 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
123d0 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f  the value NULL o
123e0 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73  r to P4 if P4 is
123f0 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  .  ** a pointer 
12400 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e  to a Mem object.
12410 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66  .  */.  if( aOff
12420 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61  set[p2] ){.    a
12430 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
12440 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
12450 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71  zRec ){.      sq
12460 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
12470 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73  aseExternal(pDes
12480 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
12490 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
124a0 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73  u8 *)&zRec[aOffs
124b0 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70  et[p2]], aType[p
124c0 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
124d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e  }else{.      len
124e0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
124f0 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
12500 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71  e[p2]);.      sq
12510 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
12520 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a  (&sMem, pDest);.
12530 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12540 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12550 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
12560 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e  t[p2], len, pC->
12570 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
12580 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
12590 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
125a0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
125b0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
125c0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
125d0 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  em.z;.      sqli
125e0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
125f0 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79  ((u8*)zData, aTy
12600 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
12610 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d      }.    pDest-
12620 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
12630 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
12640 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
12650 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73  4_MEM ){.      s
12660 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
12670 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
12680 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
12690 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d  M_Static);.    }
126a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
126b0 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
126c0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
126d0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20   }.  }..  /* If 
126e0 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  we dynamically a
126f0 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74  llocated space t
12700 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
12710 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  (in the.  ** sql
12720 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12730 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
12740 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
12750 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
12760 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c  .  ** dynamicall
12770 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
12780 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44  e over to the pD
12790 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20  est structure.. 
127a0 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74   ** This prevent
127b0 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e  s a memory copy.
127c0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d  .  */.  if( sMem
127d0 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  .zMalloc ){.    
127e0 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
127f0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
12800 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
12810 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
12820 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73  _Dyn) );.    ass
12830 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
12840 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
12850 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
12860 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
12870 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
12880 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
12890 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
128a0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
128b0 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
128c0 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
128d0 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d  z;.    pDest->zM
128e0 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61  alloc = sMem.zMa
128f0 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  lloc;.  }..  rc 
12900 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12910 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
12920 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  est);..op_column
12930 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
12940 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
12950 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
12960 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
12970 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
12980 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
12990 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
129a0 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61   *.**.** Apply a
129b0 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
129c0 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
129d0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
129e0 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
129f0 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
12a00 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
12a10 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
12a20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12a30 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12a40 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12a50 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12a60 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
12a70 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
12a80 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
12a90 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
12aa0 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
12ab0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
12ac0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
12ad0 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
12ae0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
12af0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
12b00 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68 69   register to whi
12b10 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ch to apply affi
12b20 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nity */.  Mem *p
12b30 4c 61 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Last;        /* 
12b40 4c 61 73 74 20 72 65 67 69 73 74 65 72 20 74 6f  Last register to
12b50 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20   which to apply 
12b60 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65  affinity */.  Me
12b70 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
12b80 20 2f 2a 20 43 75 72 72 65 6e 74 20 72 65 67 69   /* Current regi
12b90 73 74 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  ster */..  zAffi
12ba0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
12bb0 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d  ;.  pData0 = &p-
12bc0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
12bd0 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
12be0 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20  0[pOp->p2-1];.  
12bf0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
12c00 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
12c10 65 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e  ec++){.    Expan
12c20 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
12c30 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
12c40 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70  Rec, zAffinity[p
12c50 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63  Rec-pData0], enc
12c60 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72  oding);.  }.  br
12c70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12c80 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31  e: MakeRecord P1
12c90 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
12ca0 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
12cb0 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
12cc0 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20   with P1 into a 
12cd0 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20  single entry.** 
12ce0 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65  suitable for use
12cf0 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
12d00 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
12d10 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
12d20 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
12d30 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f  .  The details o
12d40 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65  f the format are
12d50 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c   irrelevant as l
12d60 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50  ong as.** the OP
12d70 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
12d80 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
12d90 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52  cord later..** R
12da0 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63  efer to source c
12db0 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ode comments for
12dc0 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   the details of 
12dd0 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f  the record.** fo
12de0 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  rmat..**.** P4 m
12df0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
12e00 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
12e10 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
12e20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
12e30 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
12e40 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
12e50 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
12e60 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
12e70 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
12e80 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
12e90 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
12ea0 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
12eb0 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
12ec0 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
12ed0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
12ee0 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
12ef0 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
12f00 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
12f10 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
12f20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
12f30 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
12f40 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
12f50 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
12f60 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
12f70 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
12f80 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
12f90 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
12fa0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
12fb0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
12fc0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
12fd0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
12fe0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
12ff0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
13000 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
13010 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13030 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13040 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
13050 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13070 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
13080 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
13090 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
130a0 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
130b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
130c0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
130d0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
130e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
130f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13100 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
13110 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
13120 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
13130 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
13140 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
13150 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
13160 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
13170 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
13180 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
13190 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
131a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
131b0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
131c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
131d0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
131e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
131f0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
13200 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
13210 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
13220 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
13230 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
13240 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
13250 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
13260 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
13270 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
13280 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
13290 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
132a0 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
132b0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
132c0 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
132e0 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
132f0 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
13300 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
13310 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
13320 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
13330 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
13340 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
13350 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
13360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
133a0 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
133b0 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
133c0 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
133d0 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
133e0 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
133f0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
13400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13430 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
13440 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
13450 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
13460 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
13470 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
13480 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
13490 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a  d so froth..  **
134a0 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
134b0 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
134c0 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
134d0 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
134e0 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
134f0 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
13500 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
13510 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13520 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
13530 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
13540 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
13550 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
13560 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
13570 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
13580 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
13590 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
135a0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
135b0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
135c0 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
135d0 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
135e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
135f0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
13600 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42  er space */.  nB
13610 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  yte = 0;        
13620 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
13630 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
13640 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65   record */.  nZe
13650 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
13660 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
13670 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
13680 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
13690 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
136a0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
136b0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
136c0 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
136d0 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
136e0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
136f0 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  ld<=p->nMem+1 );
13700 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e  .  pData0 = &p->
13710 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
13720 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
13730 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
13740 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
13750 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
13760 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
13770 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  rmat;..  /* Loop
13780 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
13790 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
137a0 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
137b0 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
137c0 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
137d0 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
137e0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
137f0 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ord..  */.  for(
13800 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13810 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13820 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69  ){.    if( zAffi
13830 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
13840 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
13850 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
13860 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
13870 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ng);.    }.    i
13880 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  f( pRec->flags&M
13890 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d  EM_Zero && pRec-
138a0 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  >n>0 ){.      sq
138b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
138c0 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
138d0 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74    }.    serial_t
138e0 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
138f0 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
13900 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
13910 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
13920 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
13930 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
13940 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
13950 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  n;.    nHdr += s
13960 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
13970 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
13980 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
13990 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
139a0 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75        /* Only pu
139b0 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42  re zero-filled B
139c0 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75  LOBs can be inpu
139d0 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65  t to this Opcode
139e0 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f  ..      ** We do
139f0 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73   not allow blobs
13a00 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61   with a prefix a
13a10 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64  nd a zero-filled
13a20 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   tail. */.      
13a30 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
13a40 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73  .nZero;.    }els
13a50 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20  e if( len ){.   
13a60 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
13a70 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64    }.  }..  /* Ad
13a80 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
13a90 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
13aa0 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
13ab0 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72  /.  nHdr += nVar
13ac0 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
13ad0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
13ae0 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
13af0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
13b00 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b  r) ){.    nHdr++
13b10 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
13b20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f  nHdr+nData-nZero
13b30 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
13b40 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
13b50 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
13b60 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
13b70 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
13b80 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
13b90 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
13ba0 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
13bb0 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
13bc0 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
13bd0 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
13be0 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
13bf0 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
13c00 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
13c10 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
13c20 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
13c30 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
13c40 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
13c50 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20  e3VdbeMemGrow() 
13c60 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
13c70 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
13c80 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
13c90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13ca0 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
13cb0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
13cc0 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
13cd0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
13ce0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  >p3];.  if( sqli
13cf0 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
13d00 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
13d10 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
13d20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
13d30 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
13d40 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
13d50 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
13d60 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
13d70 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
13d80 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
13d90 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
13da0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
13db0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
13dc0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
13dd0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
13de0 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
13df0 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
13e00 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
13e10 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
13e20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
13e30 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
13e40 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
13e50 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
13e60 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
13e70 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
13e80 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13e90 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
13ea0 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
13eb0 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
13ec0 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
13ed0 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
13ee0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
13ef0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
13f00 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
13f10 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
13f20 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
13f30 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
13f40 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
13f50 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
13f60 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
13f70 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
13f80 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
13f90 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
13fa0 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
13fb0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
13fc0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
13fd0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
13fe0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
13ff0 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
14000 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
14010 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
14020 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
14030 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
14040 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
14050 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
14060 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
14070 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
14080 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
14090 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
140a0 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
140b0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
140c0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
140d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
140e0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
140f0 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
14100 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
14110 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
14120 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
14130 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
14140 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
14150 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
14160 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
14170 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  sr ){.    rc = s
14180 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
14190 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
141a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
141b0 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20  Entry = 0;.  }. 
141c0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
141d0 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Int;.  pOut->
141e0 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
141f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
14200 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
14210 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
14220 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
14230 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
14240 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
14250 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
14260 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
14270 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
14280 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
14290 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
142a0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
142b0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
142c0 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
142d0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
142e0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
142f0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
14300 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
14310 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
14320 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
14350 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
14360 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14380 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
14390 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
143a0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
143b0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
143c0 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
143d0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
143e0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
143f0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
14400 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
14410 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
14420 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
14430 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
14440 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
14450 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
14460 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
14470 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
14480 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
14490 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
144a0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
144b0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
144c0 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
144d0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
144e0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
144f0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
14500 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
14510 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
14520 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
14530 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
14540 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
14550 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14560 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
14570 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
14580 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
14590 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
145a0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
145b0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69  .    if( db->wri
145c0 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20  teVdbeCnt>0 ){. 
145d0 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
145e0 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
145f0 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
14600 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
14610 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
14620 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
14630 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
14640 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
14650 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
14660 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
14670 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
14680 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
14690 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
146a0 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  t - ".        "S
146b0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
146c0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
146d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
146e0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
146f0 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
14700 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
14710 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ame);..      /* 
14720 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
14730 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
14740 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
14750 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
14760 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
14770 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
14780 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
14790 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
147a0 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
147b0 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
147c0 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
147d0 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
147e0 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
147f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
14800 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
14810 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14820 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
14830 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
14840 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
14850 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
14860 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
14870 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
14880 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
14890 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
148a0 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
148b0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
148c0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
148d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
148e0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
148f0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
14900 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
14910 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
14920 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
14930 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
14940 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
14950 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
14960 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
14970 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
14980 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
14990 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
149a0 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
149b0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
149c0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
149d0 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
149e0 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
149f0 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
14a00 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
14a10 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
14a20 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
14a30 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
14a40 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
14a50 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
14a60 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
14a70 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
14a80 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
14a90 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
14aa0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
14ab0 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
14ac0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
14ad0 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
14ae0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
14af0 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
14b00 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
14b10 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
14b20 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
14b30 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
14b40 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
14b50 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
14b60 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
14b70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
14b80 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
14b90 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62   if( .        db
14ba0 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14bb0 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49   || (p1==SAVEPOI
14bc0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64  NT_ROLLBACK && d
14bd0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
14be0 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
14bf0 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
14c00 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
14c10 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
14c20 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
14c30 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
14c40 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
14c50 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f  ements. It is no
14c60 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f  t possible to ro
14c70 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69  llback a savepoi
14c80 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74  nt.      ** if t
14c90 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
14ca0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ive statements a
14cb0 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  t all..      */.
14cc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
14cd0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14ce0 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
14cf0 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65   "cannot %s save
14d00 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
14d10 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
14d20 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31  ss",.        (p1
14d30 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
14d40 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b  BACK ? "rollback
14d50 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20  ": "release").  
14d60 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
14d70 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
14d80 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
14d90 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
14da0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
14db0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
14dc0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
14dd0 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
14de0 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
14df0 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
14e00 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
14e10 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
14e20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
14e30 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
14e40 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
14e50 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
14e60 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
14e70 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14e80 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14e90 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
14ea0 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
14eb0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
14ec0 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
14ed0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
14ee0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
14ef0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
14f00 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
14f10 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
14f20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14f30 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
14f40 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
14f50 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
14f60 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
14f70 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
14f80 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
14f90 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
14fa0 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
14fb0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
14fc0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
14fd0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
14fe0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
14ff0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
15000 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
15010 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
15020 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
15030 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
15040 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
15050 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
15060 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f   - 1;.        fo
15070 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
15080 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
15090 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
150a0 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
150b0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
150c0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
150d0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
150e0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
150f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
15100 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15110 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
15120 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
15130 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
15140 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
15150 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  & (db->flags&SQL
15160 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
15170 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  s)!=0 ){.       
15180 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
15190 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
151a0 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
151b0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
151c0 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
151d0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
151e0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
151f0 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
15200 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
15210 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
15220 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
15230 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
15240 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
15250 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
15260 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
15270 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
15280 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
15290 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
152a0 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
152b0 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
152c0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
152d0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
152e0 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
152f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
15300 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
15310 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
15320 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
15330 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
15340 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
15350 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
15360 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15370 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
15380 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
15390 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
153a0 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
153b0 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
153c0 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
153d0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
153e0 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
153f0 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
15400 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
15410 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
15420 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
15430 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
15440 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
15450 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
15460 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
15470 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
15480 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
15490 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
154a0 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
154b0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
154c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
154d0 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
154e0 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
154f0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
15500 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
15510 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
15520 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
15530 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
15540 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
15550 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
15560 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  edCons;.      }.
15570 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
15580 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15590 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
155a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
155b0 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
155c0 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
155d0 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
155e0 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
155f0 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
15600 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
15610 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
15620 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
15630 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
15640 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
15650 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
15660 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
15670 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
15680 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
15690 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
156a0 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
156b0 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
156c0 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
156d0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
156e0 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
156f0 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
15700 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
15710 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
15720 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
15730 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
15740 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64  t turnOnAC;..  d
15750 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15760 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
15770 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
15780 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20  2;.  turnOnAC = 
15790 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
157a0 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
157b0 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20  mmit;.  assert( 
157c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
157d0 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
157e0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
157f0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
15800 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
15810 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
15820 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15830 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20  activeVdbeCnt>0 
15840 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
15850 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
15860 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20  ctive */..  if( 
15870 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c  turnOnAC && iRol
15880 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74  lback && db->act
15890 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
158a0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
158b0 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
158c0 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
158d0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
158e0 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
158f0 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
15900 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
15910 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
15920 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
15930 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
15940 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
15950 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
15960 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
15970 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
15980 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
15990 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
159a0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
159b0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
159c0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
159d0 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
159e0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
159f0 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  lse if( turnOnAC
15a00 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
15a10 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43  & db->writeVdbeC
15a20 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  nt>0 ){.    /* I
15a30 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
15a40 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
15a50 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72  COMMIT and other
15a60 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67   VMs are writing
15a70 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61  .    ** return a
15a80 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
15a90 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ng that the othe
15aa0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
15ab0 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
15ac0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
15ad0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15ae0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
15af0 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
15b00 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
15b10 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
15b20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
15b30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
15b40 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  USY;.  }else if(
15b50 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15b60 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
15b70 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
15b80 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
15b90 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
15ba0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
15bb0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
15bc0 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20  llbackAll(db);. 
15bd0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
15be0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
15bf0 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
15c00 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
15c10 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
15c20 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
15c30 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
15c40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
15c50 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
15c60 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
15c70 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20  mmit;.      if( 
15c80 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
15c90 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
15ca0 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
15cb0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64   = pc;.        d
15cc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15cd0 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
15ce0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
15cf0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
15d00 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
15d10 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
15d20 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
15d30 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
15d40 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
15d50 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
15d60 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
15d70 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
15d80 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
15d90 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
15da0 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
15db0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
15dc0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
15dd0 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
15de0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
15df0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  e{.    sqlite3Se
15e00 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15e10 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20  Msg, db,.       
15e20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
15e30 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
15e40 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
15e50 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
15e60 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
15e70 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
15e80 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
15e90 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
15ea0 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15ec0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
15ed0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
15ee0 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
15ef0 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
15f00 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
15f10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
15f20 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
15f30 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a  tion P1 P2 * * *
15f40 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
15f50 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
15f60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64   transaction end
15f70 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20  s when a Commit 
15f80 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  or Rollback.** o
15f90 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74  pcode is encount
15fa0 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67  ered.  Depending
15fb0 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c   on the ON CONFL
15fc0 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65  ICT setting, the
15fd0 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  .** transaction 
15fe0 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f  might also be ro
15ff0 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20  lled back if an 
16000 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
16010 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ered..**.** P1 i
16020 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
16030 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
16040 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
16050 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
16060 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
16070 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
16080 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
16090 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
160a0 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
160b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
160c0 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
160d0 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
160e0 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
160f0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
16100 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
16110 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
16120 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
16130 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53   started.  A RES
16140 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a  ERVED lock is.**
16150 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65   obtained on the
16160 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
16170 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
16180 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
16190 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72  ed.  No.** other
161a0 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61   process can sta
161b0 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65  rt another write
161c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
161d0 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  le this transact
161e0 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77  ion is.** underw
161f0 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20  ay.  Starting a 
16200 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
16210 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61  n also creates a
16220 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
16230 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72  l. A.** write tr
16240 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
16250 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
16260 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e   any changes can
16270 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a   be made to the.
16280 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66  ** database.  If
16290 20 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61   P2 is 2 or grea
162a0 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c  ter then an EXCL
162b0 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c  USIVE lock is al
162c0 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f  so obtained.** o
162d0 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  n the file..**.*
162e0 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
162f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
16300 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
16310 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
16320 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
16330 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
16340 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
16350 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
16360 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
16370 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
16380 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
16390 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
163a0 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
163b0 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
163c0 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
163d0 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
163e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
163f0 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
16400 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
16410 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
16420 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
16430 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
16440 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
16450 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
16460 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
16470 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
16480 6c 6f 77 73 20 74 68 65 20 61 66 66 65 63 74 73  lows the affects
16490 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   of this.** VDBE
164a0 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
164b0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
164c0 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
164d0 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
164e0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
164f0 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
16500 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
16510 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
16520 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
16530 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
16540 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
16550 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
16560 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
16570 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
16580 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  d-lock is obtain
16590 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
165a0 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65  se file..*/.case
165b0 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
165c0 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
165d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
165e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
165f0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
16600 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
16610 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
16620 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
16630 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
16640 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
16650 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
16660 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
16670 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
16680 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  >p2);.    if( rc
16690 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
166a0 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
166b0 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
166c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
166d0 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
166e0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
166f0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
16700 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16710 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16720 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  o_error;.    }..
16730 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
16740 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  && p->usesStmtJo
16750 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28  urnal .     && (
16760 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
16770 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56  0 || db->activeV
16780 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29  dbeCnt>1) .    )
16790 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
167a0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
167b0 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
167c0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
167d0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
167e0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
167f0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
16800 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
16810 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
16820 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
16830 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
16840 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
16850 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
16860 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
16870 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  }.      rc = sql
16880 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
16890 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
168a0 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f  ement);..      /
168b0 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
168c0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
168d0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
168e0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
168f0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
16900 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
16910 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
16920 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
16930 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
16940 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
16950 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
16960 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
16970 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
16980 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
16990 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
169a0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  rredCons;.    }.
169b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
169c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
169d0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
169e0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
169f0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
16a00 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
16a10 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
16a20 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
16a30 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
16a40 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
16a50 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
16a60 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
16a70 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
16a80 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
16a90 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
16aa0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
16ab0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
16ac0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
16ad0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
16ae0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
16af0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
16b00 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
16b10 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
16b20 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
16b30 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
16b40 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
16b50 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
16b60 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
16b70 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
16b80 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
16b90 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
16ba0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
16bb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
16bc0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
16bd0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
16be0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
16bf0 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
16c00 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
16c10 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  ie;..  iDb = pOp
16c20 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
16c30 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
16c40 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
16c50 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
16c60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
16c70 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
16c80 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
16c90 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
16ca0 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
16cb0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
16cc0 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
16cd0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
16ce0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
16cf0 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
16d00 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
16d10 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
16d20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65  = iMeta;.  MemSe
16d30 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
16d40 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
16d50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16d60 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
16d70 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
16d80 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
16d90 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
16da0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
16db0 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
16dc0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
16dd0 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
16de0 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
16df0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
16e00 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
16e10 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
16e20 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
16e30 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
16e40 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
16e50 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
16e60 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
16e70 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
16e80 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
16e90 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
16ea0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
16eb0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
16ec0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
16ed0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
16ee0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
16ef0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
16f00 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
16f10 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
16f20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
16f30 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
16f40 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
16f50 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
16f60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
16f70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
16f80 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
16f90 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
16fa0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
16fb0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
16fc0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
16fd0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
16fe0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
16ff0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
17000 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
17010 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
17020 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
17030 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
17040 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
17050 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
17060 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
17070 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
17080 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
17090 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
170a0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
170b0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
170c0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
170d0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
170e0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
170f0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
17100 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
17110 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
17120 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
17130 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
17140 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17150 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
17160 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
17170 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
17180 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
17190 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
171a0 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
171b0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
171c0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
171d0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
171e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
171f0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
17200 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
17210 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
17220 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
17230 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
17240 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
17250 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
17260 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
17270 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
17280 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
17290 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
172a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
172b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
172c0 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
172d0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
172e0 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
172f0 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
17300 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
17310 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
17320 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
17330 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
17340 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
17350 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
17360 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
17370 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
17380 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
17390 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
173a0 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
173b0 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
173c0 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
173d0 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
173e0 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
173f0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
17400 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
17410 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
17420 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
17430 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
17440 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
17450 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
17460 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
17470 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
17480 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
17490 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
174a0 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
174b0 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
174c0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
174d0 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
174e0 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
174f0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
17500 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
17510 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
17520 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
17530 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
17540 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
17550 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
17560 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
17570 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
17580 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
17590 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
175a0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
175b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
175c0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
175d0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
175e0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
175f0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
17600 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
17610 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
17620 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
17630 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
17640 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
17650 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74 61 20  else{.    iMeta 
17660 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
17670 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b  Meta!=pOp->p2 ){
17680 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
17690 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
176a0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
176b0 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
176c0 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
176d0 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
176e0 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
176f0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
17700 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
17710 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
17720 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
17730 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
17740 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
17750 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
17760 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
17770 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
17780 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
17790 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
177a0 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
177b0 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
177c0 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
177d0 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
177e0 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
177f0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
17800 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
17810 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
17820 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
17830 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
17840 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
17850 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
17860 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
17870 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
17880 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
17890 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
178a0 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
178b0 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
178c0 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
178d0 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
178e0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
178f0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
17900 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
17910 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
17920 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
17930 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
17940 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
17950 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
17960 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
17970 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
17980 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
17990 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
179a0 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
179b0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
179c0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
179d0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
179e0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
179f0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
17a00 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
17a10 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
17a20 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
17a30 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
17a40 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
17a50 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
17a60 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17a70 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
17a80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17a90 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
17aa0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17ab0 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
17ac0 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
17ad0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
17ae0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
17af0 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
17b00 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
17b10 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17b20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
17b30 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
17b40 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
17b50 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
17b60 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
17b70 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
17b80 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
17b90 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
17ba0 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
17bb0 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
17bc0 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
17bd0 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
17be0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
17bf0 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
17c00 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
17c10 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
17c20 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
17c30 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
17c40 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
17c50 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
17c60 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
17c70 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
17c80 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
17c90 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17ca0 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
17cb0 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
17cc0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
17cd0 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
17ce0 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
17cf0 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
17d00 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
17d10 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
17d20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
17d30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
17d40 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
17d50 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
17d60 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
17d70 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
17d80 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
17d90 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17da0 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
17db0 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
17dc0 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
17dd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
17de0 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
17df0 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
17e00 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
17e10 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
17e20 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
17e30 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
17e40 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
17e50 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
17e60 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
17e70 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
17e80 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
17e90 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
17ea0 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
17eb0 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
17ec0 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
17ed0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
17ee0 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
17ef0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
17f00 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
17f10 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
17f20 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
17f30 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
17f40 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
17f50 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
17f60 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
17f70 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
17f80 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
17f90 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
17fa0 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
17fb0 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
17fc0 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
17fd0 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
17fe0 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
17ff0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
18000 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
18010 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
18020 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
18030 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
18040 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
18050 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
18060 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
18070 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
18080 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
18090 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
180a0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
180b0 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
180c0 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
180d0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
180e0 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
180f0 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
18100 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
18110 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
18120 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
18130 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
18140 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
18150 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18160 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
18170 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
18180 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
18190 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
181a0 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
181b0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
181c0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
181d0 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
181e0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
181f0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
18200 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
18210 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
18220 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
18230 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
18240 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18250 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
18260 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
18270 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
18280 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
18290 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
182a0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
182b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
182c0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
182d0 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
182e0 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
182f0 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
18300 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
18310 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
18320 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
18330 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
18340 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
18350 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
18360 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
18370 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
18380 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
18390 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  d..*/.case OP_Op
183a0 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
183b0 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69  OpenWrite: {.  i
183c0 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
183d0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
183e0 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
183f0 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
18400 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
18410 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
18420 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
18430 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
18440 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
18450 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62  ITE_ABORT;.    b
18460 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
18470 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
18480 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
18490 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
184a0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
184b0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
184c0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
184d0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
184e0 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
184f0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
18500 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
18510 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
18520 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
18530 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
18540 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
18550 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
18560 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62  = 1;.    if( pDb
18570 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
18580 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
18590 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
185a0 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
185b0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
185c0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
185d0 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
185e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
185f0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
18600 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
18610 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
18620 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
18630 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
18640 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
18650 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74  m[p2];.    sqlit
18660 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
18670 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
18680 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
18690 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
186a0 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
186b0 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
186c0 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
186d0 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
186e0 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
186f0 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
18700 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
18710 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
18720 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
18730 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
18740 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
18750 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
18760 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
18770 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
18780 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
18790 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
187a0 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
187b0 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
187c0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
187d0 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
187e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
187f0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
18800 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
18810 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
18820 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
18830 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
18840 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63     pKeyInfo->enc
18850 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
18860 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
18870 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a  Info->nField+1;.
18880 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
18890 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
188a0 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
188b0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
188c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
188d0 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20  p1>=0 );.  pCur 
188e0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
188f0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
18900 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
18910 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
18920 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
18930 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
18940 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18950 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
18960 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
18970 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
18980 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
18990 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
189a0 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
189b0 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
189c0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
189d0 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
189e0 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73  lues that.  ** s
189f0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
18a00 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61  r() may return a
18a10 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  re SQLITE_EMPTY 
18a20 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a  and SQLITE_OK. .
18a30 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54    ** SQLITE_EMPT
18a40 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e  Y is only return
18a50 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ed when attempti
18a60 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74  ng to open the t
18a70 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64  able.  ** rooted
18a80 20 61 74 20 70 61 67 65 20 31 20 6f 66 20 61 20   at page 1 of a 
18a90 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61  zero-byte databa
18aa0 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  se.  */.  assert
18ab0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18ac0 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  TY || rc==SQLITE
18ad0 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  _OK );.  if( rc=
18ae0 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
18af0 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73  .    pCur->pCurs
18b00 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  or = 0;.    rc =
18b10 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
18b20 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
18b30 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
18b40 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
18b50 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
18b60 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
18b70 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
18b80 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
18b90 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
18ba0 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
18bb0 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
18bc0 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
18bd0 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
18be0 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
18bf0 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
18c00 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
18c10 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
18c20 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
18c30 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
18c40 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
18c50 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
18c60 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
18c70 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
18c80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18c90 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
18ca0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
18cb0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
18cc0 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
18cd0 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
18ce0 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
18cf0 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
18d00 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
18d10 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
18d20 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
18d30 2e 20 20 54 68 65 20 74 72 61 6e 73 69 65 6e 74  .  The transient
18d40 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74   or virtual.** t
18d50 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
18d60 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
18d70 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
18d80 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
18d90 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
18da0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
18db0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
18dc0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
18dd0 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
18de0 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
18df0 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
18e00 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
18e10 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
18e20 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
18e30 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
18e40 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
18e50 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
18e60 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
18e70 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
18e80 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
18e90 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20  was once called 
18ea0 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74  OpenTemp.  But t
18eb0 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63  hat created.** c
18ec0 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65  onfusion because
18ed0 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20   the term "temp 
18ee0 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65  table", might re
18ef0 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f  fer either.** to
18f00 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74   a TEMP table at
18f10 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
18f20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70  or to a table op
18f30 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20  ened by.** this 
18f40 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68  opcode.  Then th
18f50 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61  is opcode was ca
18f60 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20  ll OpenVirtual. 
18f70 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65   But.** that cre
18f80 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  ated confusion w
18f90 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69  ith the whole vi
18fa0 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61  rtual-table idea
18fb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
18fc0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
18fd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
18fe0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
18ff0 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20  int openFlags = 
19000 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
19010 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
19020 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
19030 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
19040 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
19050 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
19060 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
19070 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
19080 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
19090 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73  SIENT_DB;..  ass
190a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
190b0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
190c0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
190d0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
190e0 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
190f0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
19100 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
19110 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
19120 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72  lite3BtreeFactor
19130 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49  y(db, 0, 1, SQLI
19140 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f  TE_DEFAULT_TEMP_
19150 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e  CACHE_SIZE, open
19160 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20 20  Flags,.         
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19180 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20    &pCx->pBt);.  
19190 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
191a0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
191b0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
191c0 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
191d0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
191e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
191f0 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
19200 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
19210 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
19220 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
19230 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
19240 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
19250 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f  h the BTREE_ZERO
19260 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65  DATA flag before
19270 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
19280 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
19290 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
192a0 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
192b0 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
192c0 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
192d0 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
192e0 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45  page 1 (an INTKE
192f0 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
19300 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
19310 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20  .pKeyInfo ){.   
19320 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
19330 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
19340 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
19350 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
19360 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
19370 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
19380 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
19390 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20 20  ZERODATA); .    
193a0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
193b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
193c0 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
193d0 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
193e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
193f0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
19400 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
19410 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
19440 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
19450 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
19460 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
19470 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
19480 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
19490 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
194a0 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
194b0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
194c0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
194d0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
194e0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
194f0 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
19500 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
19510 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
19520 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
19530 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
19540 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
19550 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a   !pCx->isTable;.
19560 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19570 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
19580 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
19590 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
195a0 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
195b0 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
195c0 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
195d0 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
195e0 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63   of data.  The c
195f0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f  ontent of that o
19600 6e 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f  ne row in the co
19610 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a  ntent of memory.
19620 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  ** register P2. 
19630 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
19640 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
19650 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
19660 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
19670 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
19680 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
19690 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
196a0 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
196b0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
196c0 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  s used to hold t
196d0 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  he a single.** r
196e0 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
196f0 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
19700 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
19710 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
19720 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
19730 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
19740 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
19750 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
19760 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
19770 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
19780 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
19790 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
197a0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
197b0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
197c0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
197d0 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
197e0 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
197f0 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
19800 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
19810 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
19820 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
19830 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
19840 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
19850 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
19860 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
19870 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28  3, -1, 0);.  if(
19880 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
19890 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
198a0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
198b0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
198c0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
198d0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
198e0 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
198f0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
19900 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
19910 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
19920 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
19930 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
19940 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
19950 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
19960 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
19970 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
19980 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
19990 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
199a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
199b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
199c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
199d0 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
199e0 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
199f0 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
19a00 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
19a10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19a20 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20   Opcode: SeekGe 
19a30 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
19a40 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
19a50 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
19a60 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
19a70 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
19a80 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
19a90 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
19aa0 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
19ab0 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
19ac0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
19ad0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
19ae0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
19af0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
19b00 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
19b10 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
19b20 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
19b30 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
19b40 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
19b50 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
19b60 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
19b70 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
19b80 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
19b90 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
19ba0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
19bb0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
19bc0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
19bd0 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
19be0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
19bf0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
19c00 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
19c10 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
19c20 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
19c30 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
19c40 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  t, SeekLt, SeekG
19c50 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
19c60 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50  Opcode: SeekGt P
19c70 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
19c80 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
19c90 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
19ca0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
19cb0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
19cc0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
19cd0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
19ce0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
19cf0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
19d00 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
19d10 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
19d20 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
19d30 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
19d40 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
19d50 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
19d60 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
19d70 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
19d80 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
19d90 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
19da0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
19db0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
19dc0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
19dd0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
19de0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
19df0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
19e00 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
19e10 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
19e20 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
19e30 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
19e40 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
19e50 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
19e60 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
19e70 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
19e80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19e90 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Lt P1 P2 P3 P4 *
19ea0 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f   .**.** If curso
19eb0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19ec0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19ed0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19ee0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
19ef0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
19f00 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
19f10 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
19f20 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
19f30 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
19f40 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
19f50 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
19f60 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
19f70 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
19f80 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
19f90 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
19fa0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
19fb0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
19fc0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
19fd0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
19fe0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
19ff0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1a000 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1a010 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1a020 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1a030 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1a040 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1a050 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1a060 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1a070 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1a080 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
1a090 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1a0a0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65  * Opcode: SeekLe
1a0b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1a0c0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1a0d0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1a0e0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1a0f0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1a100 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1a110 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1a120 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1a130 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1a140 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1a150 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1a160 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1a170 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1a180 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1a190 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1a1a0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1a1b0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1a1c0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1a1d0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
1a1e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1a1f0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1a200 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1a210 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1a220 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1a230 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1a240 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
1a250 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1a260 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1a270 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1a280 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1a290 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1a2a0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1a2b0 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
1a2c0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
1a2d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1a2e0 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  t:         /* ju
1a2f0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1a300 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20  OP_SeekLe:      
1a310 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1a320 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1a330 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
1a340 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1a350 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20  OP_SeekGt: {    
1a360 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1a370 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  */.  int res;.  
1a380 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75  int oc;.  VdbeCu
1a390 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61  rsor *pC;.  Unpa
1a3a0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1a3b0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36  int nField;.  i6
1a3c0 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20  4 iKey;      /* 
1a3d0 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65  The rowid we are
1a3e0 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a   to seek to */..
1a3f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a400 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1a410 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1a420 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
1a430 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
1a440 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1a450 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1a460 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1a470 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1a480 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
1a490 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20  pCursor!=0 ){.  
1a4a0 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1a4b0 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  de;.    pC->null
1a4c0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  Row = 0;.    if(
1a4d0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1a4e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70        /* The inp
1a4f0 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1a500 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1a510 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1a520 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1a530 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1a540 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1a550 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1a560 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1a570 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   do.      ** the
1a580 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74   seek, so covert
1a590 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 61 70   it. */.      ap
1a5a0 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1a5b0 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ty(pIn3);.      
1a5c0 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1a5d0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1a5e0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  ;.      pC->rowi
1a5f0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1a600 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1a610 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1a620 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1a630 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1a640 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20  ithout.      ** 
1a650 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1a660 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1a670 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1a680 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1a690 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1a6a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1a6b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
1a6c0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1a6d0 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
1a6e0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  {.          /* I
1a6f0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1a700 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1a710 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1a720 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1a730 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1a740 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1a750 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1a760 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1a770 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1a780 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
1a790 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1a7a0 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  }.        /* If 
1a7b0 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
1a7c0 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33  int, then the P3
1a7d0 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61   value must be a
1a7e0 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20   floating.      
1a7f0 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65    ** point numbe
1a800 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  r. */.        as
1a810 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
1a820 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d  gs & MEM_Real)!=
1a830 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  0 );..        if
1a840 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54  ( iKey==SMALLEST
1a850 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d  _INT64 && (pIn3-
1a860 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  >r<(double)iKey 
1a870 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b  || pIn3->r>0) ){
1a880 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  .          /* Th
1a890 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f  e P3 value is to
1a8a0 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69  o large in magni
1a8b0 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65  tude to be expre
1a8c0 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20  ssed as an.     
1a8d0 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e       ** integer.
1a8e0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65   */.          re
1a8f0 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  s = 1;.         
1a900 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29   if( pIn3->r<0 )
1a910 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1a920 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
1a930 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  || oc==OP_SeekGe
1a940 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1a950 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a960 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75  reeFirst(pC->pCu
1a970 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1a980 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
1a990 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1a9a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a9b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1a9c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1a9d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1a9e0 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
1a9f0 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1aa00 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20  eekLe ){.       
1aa10 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1aa20 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
1aa30 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1aa40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1aa50 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1aa60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1aa70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1aa80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1aa90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1aaa0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1aab0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1aac0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
1aad0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
1aae0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65  reak;.        }e
1aaf0 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  lse if( oc==OP_S
1ab00 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1ab10 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20  SeekGe ){.      
1ab20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63      /* Use the c
1ab30 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f  eiling() functio
1ab40 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1ab50 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1ab60 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
1ab70 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  > (double)iKey )
1ab80 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20   iKey++;.       
1ab90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1aba0 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f    /* Use the flo
1abb0 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  or() function to
1abc0 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
1abd0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
1abe0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1abf0 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLe || oc==OP_
1ac00 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1ac10 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
1ac20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  < (double)iKey )
1ac30 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20   iKey--;.       
1ac40 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20   }.      } .    
1ac50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ac60 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1ac70 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1ac80 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
1ac90 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1aca0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1acb0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1acc0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1acd0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1ace0 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1acf0 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1ad00 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20  IsValid = 1;.   
1ad10 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77       pC->lastRow
1ad20 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20  id = iKey;.     
1ad30 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1ad40 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1ad50 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73  ->p4.i;.      as
1ad60 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1ad70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1ad80 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69       assert( nFi
1ad90 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72  eld>0 );.      r
1ada0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1adb0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1adc0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1add0 6e 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 69 66  nField;.      if
1ade0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
1adf0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1ae00 20 29 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c   ){.        r.fl
1ae10 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
1ae20 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65  NCRKEY;.      }e
1ae30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 2e 66  lse{.        r.f
1ae40 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
1ae50 7d 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  }.      r.aMem =
1ae60 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1ae70 33 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  3];.      rc = s
1ae80 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1ae90 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1aea0 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1aeb0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1aec0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1aed0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1aee0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1aef0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1af00 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1af10 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  id = 0;.    }.  
1af20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1af30 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1af40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1af50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
1af60 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1af70 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
1af80 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1af90 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f  if.    if( oc==O
1afa0 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d  P_SeekGe || oc==
1afb0 4f 50 5f 53 65 65 6b 47 74 20 29 7b 0a 20 20 20  OP_SeekGt ){.   
1afc0 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1afd0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1afe0 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20  P_SeekGt) ){.   
1aff0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b000 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
1b010 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1b020 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1b030 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1b040 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b050 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1b060 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1b070 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1b080 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
1b090 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1b0a0 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
1b0b0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1b0c0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1b0d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1b0e0 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
1b0f0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20   oc==OP_SeekLt) 
1b100 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1b110 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1b120 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1b130 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1b140 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b150 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1b160 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b170 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1b180 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1b190 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1b1a0 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
1b1b0 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
1b1c0 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
1b1d0 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
1b1e0 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69          ** see i
1b1f0 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1b200 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
1b210 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c         res = sql
1b220 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1b230 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1b240 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
1b250 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1b260 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
1b270 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1b280 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
1b290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
1b2a0 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e  his happens when
1b2b0 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f   attempting to o
1b2c0 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f  pen the sqlite3_
1b2d0 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20  master table.   
1b2e0 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63   ** for read acc
1b2f0 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ess returns SQLI
1b300 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69  TE_EMPTY. In thi
1b310 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20  s case always.  
1b320 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75    ** take the ju
1b330 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65 20  mp (since there 
1b340 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69  are no records i
1b350 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20  n the table)..  
1b360 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1b370 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1b380 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b390 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
1b3a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
1b3b0 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1b3c0 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1b3d0 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1b3e0 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1b3f0 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1b400 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1b410 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1b420 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1b430 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1b440 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1b450 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1b460 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1b470 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1b480 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1b490 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1b4a0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1b4b0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1b4c0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1b4d0 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1b4e0 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1b4f0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1b500 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1b510 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1b520 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1b530 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1b540 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1b550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1b560 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  0 );.  if( ALWAY
1b570 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1b580 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
1b590 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1b5a0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1b5b0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  = 0;.    pC->mov
1b5c0 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
1b5d0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1b5e0 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72  pIn2);.    pC->r
1b5f0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1b600 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1b610 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d  dMoveto = 1;.  }
1b620 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a  .  break;.}.  ..
1b630 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64  /* Opcode: Found
1b640 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1b650 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
1b660 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1b670 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1b680 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73 20 61  Record.  P1 is a
1b690 6e 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 61  n index..** If a
1b6a0 6e 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74  n entry that mat
1b6b0 63 68 65 73 20 74 68 65 20 76 61 6c 75 65 20 69  ches the value i
1b6c0 6e 20 72 65 67 69 73 74 65 72 20 70 33 20 65 78  n register p3 ex
1b6d0 69 73 74 73 20 69 6e 20 50 31 20 74 68 65 6e 0a  ists in P1 then.
1b6e0 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  ** jump to P2.  
1b6f0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1b700 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
1b710 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 0a 2a  ny entry in P1.*
1b720 2a 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75  * then fall thru
1b730 2e 20 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  .  The P1 cursor
1b740 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1b750 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1b760 67 20 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69 74  g entry.** if it
1b770 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54   exists..**.** T
1b780 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1b790 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
1b7a0 6d 65 6e 74 20 74 68 65 20 49 4e 20 6f 70 65 72  ment the IN oper
1b7b0 61 74 6f 72 20 77 68 65 72 65 20 74 68 65 0a 2a  ator where the.*
1b7c0 2a 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65  * left-hand side
1b7d0 20 69 73 20 61 20 53 45 4c 45 43 54 20 73 74 61   is a SELECT sta
1b7e0 74 65 6d 65 6e 74 2e 20 20 50 31 20 6d 61 79 20  tement.  P1 may 
1b7f0 62 65 20 61 20 74 72 75 65 20 69 6e 64 65 78 2c  be a true index,
1b800 20 6f 72 20 69 74 0a 2a 2a 20 6d 61 79 20 62 65   or it.** may be
1b810 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1b820 65 78 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ex that holds th
1b830 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
1b840 20 53 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65   SELECT.** state
1b850 6d 65 6e 74 2e 20 20 20 54 68 69 73 20 69 6e 73  ment.   This ins
1b860 74 72 75 63 74 69 6f 6e 20 69 73 20 61 6c 73 6f  truction is also
1b870 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
1b880 6e 74 20 74 68 65 0a 2a 2a 20 44 49 53 54 49 4e  nt the.** DISTIN
1b890 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 53 45  CT keyword in SE
1b8a0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e  LECT statements.
1b8b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1b8c0 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69  ruction checks i
1b8d0 66 20 69 6e 64 65 78 20 50 31 20 63 6f 6e 74 61  f index P1 conta
1b8e0 69 6e 73 20 61 20 72 65 63 6f 72 64 20 66 6f 72  ins a record for
1b8f0 20 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 66   which .** the f
1b900 69 72 73 74 20 4e 20 73 65 72 69 61 6c 69 7a 65  irst N serialize
1b910 64 20 76 61 6c 75 65 73 20 65 78 61 63 74 6c 79  d values exactly
1b920 20 6d 61 74 63 68 20 74 68 65 20 4e 20 73 65 72   match the N ser
1b930 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 0a 2a  ialized values.*
1b940 2a 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  * in the record 
1b950 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2c 20  in register P3, 
1b960 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 74  where N is the t
1b970 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 76  otal number of v
1b980 61 6c 75 65 73 20 69 6e 0a 2a 2a 20 74 68 65 20  alues in.** the 
1b990 50 33 20 72 65 63 6f 72 64 20 28 74 68 65 20 50  P3 record (the P
1b9a0 33 20 72 65 63 6f 72 64 20 69 73 20 61 20 70 72  3 record is a pr
1b9b0 65 66 69 78 20 6f 66 20 74 68 65 20 50 31 20 72  efix of the P1 r
1b9c0 65 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53  ecord). .**.** S
1b9d0 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
1b9e0 64 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74  d, IsUnique, Not
1b9f0 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63  Exists.*/./* Opc
1ba00 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
1ba10 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1ba20 20 52 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   Register P3 hol
1ba30 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1ba40 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1ba50 6f 72 64 2e 20 20 50 31 20 69 73 0a 2a 2a 20 61  ord.  P1 is.** a
1ba60 6e 20 69 6e 64 65 78 2e 20 20 49 66 20 6e 6f 20  n index.  If no 
1ba70 65 6e 74 72 79 20 65 78 69 73 74 73 20 69 6e 20  entry exists in 
1ba80 50 31 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  P1 that matches 
1ba90 74 68 65 20 62 6c 6f 62 20 74 68 65 6e 20 6a 75  the blob then ju
1baa0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 20 49 66  mp.** to P2.  If
1bab0 20 61 6e 20 65 6e 74 72 79 20 64 6f 65 73 20 65   an entry does e
1bac0 78 69 73 74 69 6e 67 2c 20 66 61 6c 6c 20 74 68  xisting, fall th
1bad0 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73  rough.  The curs
1bae0 6f 72 20 69 73 20 6c 65 66 74 0a 2a 2a 20 70 6f  or is left.** po
1baf0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 65 6e  inting to the en
1bb00 74 72 79 20 74 68 61 74 20 6d 61 74 63 68 65 73  try that matches
1bb10 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1bb20 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  : Found, NotExis
1bb30 74 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a  ts, IsUnique.*/.
1bb40 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
1bb50 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
1bb60 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1bb70 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
1bb80 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1bb90 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
1bba0 73 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  sts;.  VdbeCurso
1bbb0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
1bbc0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1bbd0 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 63  rd *pIdxKey;.  c
1bbe0 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55  har aTempRec[ROU
1bbf0 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63  ND8(sizeof(Unpac
1bc00 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69  kedRecord)) + si
1bc10 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d  zeof(Mem)*3 + 7]
1bc20 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1bc30 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
1bc40 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
1bc50 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61 64 79  endif..  already
1bc60 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61 73  Exists = 0;.  as
1bc70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1bc80 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1bc90 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1bca0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1bcb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1bcc0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  !=0 );.  if( ALW
1bcd0 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
1bce0 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65  =0) ){..    asse
1bcf0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
1bd00 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
1bd10 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1bd20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1bd30 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
1bd40 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  ;.    pIdxKey = 
1bd50 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
1bd60 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
1bd70 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
1bd80 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20  In3->z,.        
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54                aT
1bdb0 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
1bdc0 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 69  TempRec));.    i
1bdd0 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b  f( pIdxKey==0 ){
1bde0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
1bdf0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  em;.    }.    if
1be00 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1be10 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20  P_Found ){.     
1be20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20   pIdxKey->flags 
1be30 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  |= UNPACKED_PREF
1be40 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a  IX_MATCH;.    }.
1be50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1be60 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1be70 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1be80 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1be90 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69 74  &res);.    sqlit
1bea0 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61  e3VdbeDeleteUnpa
1beb0 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b  ckedRecord(pIdxK
1bec0 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  ey);.    if( rc!
1bed0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1bee0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1bef0 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73  .    alreadyExis
1bf00 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
1bf10 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1bf20 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1bf30 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1bf40 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1bf50 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
1bf60 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1bf70 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
1bf80 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1bf90 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
1bfa0 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  se{.    if( !alr
1bfb0 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1bfc0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1bfd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1bfe0 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71  * Opcode: IsUniq
1bff0 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ue P1 P2 P3 P4 *
1c000 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1c010 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69   is open on an i
1c020 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68 61 73  ndex.  So it has
1c030 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69 74 73   no data and its
1c040 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20 0a 2a   key consists .*
1c050 2a 20 6f 66 20 61 20 72 65 63 6f 72 64 20 67 65  * of a record ge
1c060 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
1c070 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65 20 74  keRecord where t
1c080 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 69 73  he last field is
1c090 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64 20 6f   the .** rowid o
1c0a0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
1c0b0 20 74 68 65 20 69 6e 64 65 78 20 72 65 66 65 72   the index refer
1c0c0 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  s to..**.** The 
1c0d0 50 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74  P3 register cont
1c0e0 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ains an integer 
1c0f0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43  record number. C
1c100 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20  all this record 
1c110 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65  .** number R. Re
1c120 67 69 73 74 65 72 20 50 34 20 69 73 20 74 68 65  gister P4 is the
1c130 20 66 69 72 73 74 20 69 6e 20 61 20 73 65 74 20   first in a set 
1c140 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20  of N contiguous 
1c150 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61  registers.** tha
1c160 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70  t make up an unp
1c170 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20  acked index key 
1c180 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
1c190 20 77 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e   with cursor P1.
1c1a0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
1c1b0 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72   N can be inferr
1c1c0 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73  ed from the curs
1c1d0 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74  or. N includes t
1c1e0 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75  he rowid.** valu
1c1f0 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  e appended to th
1c200 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
1c210 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20  ex record. This 
1c220 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a  rowid value may.
1c230 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ** or may not be
1c240 20 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a   the same as R..
1c250 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20  **.** If any of 
1c260 74 68 65 20 4e 20 72 65 67 69 73 74 65 72 73 20  the N registers 
1c270 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72  beginning with r
1c280 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61  egister P4 conta
1c290 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61  ins a NULL.** va
1c2a0 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1c2b0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
1c2c0 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  ** Otherwise, th
1c2d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
1c2e0 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20  hecks if cursor 
1c2f0 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  P1 contains an e
1c300 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68  ntry.** where th
1c310 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69  e first (N-1) fi
1c320 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20 74  elds match but t
1c330 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61  he rowid value a
1c340 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20  t the end.** of 
1c350 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20  the index entry 
1c360 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65  is not R. If the
1c370 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e  re is no such en
1c380 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d  try, control jum
1c390 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63  ps.** to instruc
1c3a0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
1c3b0 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66  se, the rowid of
1c3c0 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67   the conflicting
1c3d0 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20   index.** entry 
1c3e0 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67  is copied to reg
1c3f0 69 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e  ister P3 and con
1c400 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75  trol falls throu
1c410 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
1c420 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
1c430 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1c440 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  otFound, NotExis
1c450 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73  ts, Found.*/.cas
1c460 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b  e OP_IsUnique: {
1c470 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1c480 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69   in3 */.  u16 ii
1c490 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1c4a0 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  pCx;.  BtCursor 
1c4b0 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46  *pCrsr;.  u16 nF
1c4c0 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 65  ield;.  Mem *aMe
1c4d0 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  m;.  UnpackedRec
1c4e0 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20 20  ord r;          
1c4f0 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72 65          /* B-Tre
1c500 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b  e index search k
1c510 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20  ey */.  i64 R;  
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
1c540 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72 65  wid stored in re
1c550 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20  gister P3 */..  
1c560 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  aMem = &p->aMem[
1c570 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a  pOp->p4.i];.  /*
1c580 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
1c590 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d   values of param
1c5a0 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20  eters P1 and P4 
1c5b0 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f  are in range. */
1c5c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c5d0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1c5e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c5f0 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70  p->p4.i>0 && pOp
1c600 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20  ->p4.i<=p->nMem 
1c610 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c620 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1c630 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1c640 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  ..  /* Find the 
1c650 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f  index cursor. */
1c660 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73  .  pCx = p->apCs
1c670 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1c680 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72  sert( pCx->defer
1c690 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
1c6a0 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c    pCx->seekResul
1c6b0 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61  t = 0;.  pCx->ca
1c6c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1c6d0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72  E_STALE;.  pCrsr
1c6e0 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b   = pCx->pCursor;
1c6f0 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66  ..  /* If any of
1c700 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
1c710 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a  NULL, take the j
1c720 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  ump. */.  nField
1c730 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f   = pCx->pKeyInfo
1c740 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28  ->nField;.  for(
1c750 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b  ii=0; ii<nField;
1c760 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20   ii++){.    if( 
1c770 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
1c780 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1c790 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1c7a0 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72  - 1;.      pCrsr
1c7b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61   = 0;.      brea
1c7c0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
1c7d0 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e 46 69  ssert( (aMem[nFi
1c7e0 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  eld].flags & MEM
1c7f0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20  _Null)==0 );..  
1c800 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
1c810 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20      /* Populate 
1c820 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  the index search
1c830 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70   key. */.    r.p
1c840 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70  KeyInfo = pCx->p
1c850 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1c860 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b  Field = nField +
1c870 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20   1;.    r.flags 
1c880 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1c890 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e  X_SEARCH;.    r.
1c8a0 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a 20 20  aMem = aMem;..  
1c8b0 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
1c8c0 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d   value of R from
1c8d0 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f   register P3. */
1c8e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1c8f0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1c900 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e  n3);.    R = pIn
1c910 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20  3->u.i;..    /* 
1c920 53 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65  Search the B-Tre
1c930 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63  e index. If no c
1c940 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1c950 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70  d is found, jump
1c960 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f  .    ** to P2. O
1c970 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74  therwise, copy t
1c980 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1c990 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f  conflicting reco
1c9a0 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67  rd to.    ** reg
1c9b0 69 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c  ister P3 and fal
1c9c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1c9d0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1c9e0 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  n.  */.    rc = 
1c9f0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1ca00 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1ca10 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78  , &r, 0, 0, &pCx
1ca20 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20  ->seekResult);. 
1ca30 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20     if( (r.flags 
1ca40 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  & UNPACKED_PREFI
1ca50 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72  X_SEARCH) || r.r
1ca60 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20  owid==R ){.     
1ca70 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1ca80 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
1ca90 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20      pIn3->u.i = 
1caa0 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  r.rowid;.    }. 
1cab0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1cac0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
1cad0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
1cae0 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63  .**.** Use the c
1caf0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1cb00 65 72 20 50 33 20 61 73 20 61 20 69 6e 74 65 67  er P3 as a integ
1cb10 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65  er key.  If a re
1cb20 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68  cord .** with th
1cb30 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20  at key does not 
1cb40 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f  exist in table o
1cb50 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20  f P1, then jump 
1cb60 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
1cb70 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78  e record does ex
1cb80 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  ist, then fall t
1cb90 68 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72  hru.  The cursor
1cba0 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69   is left .** poi
1cbb0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63  nting to the rec
1cbc0 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74 73  ord if it exists
1cbd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  ..**.** The diff
1cbe0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
1cbf0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  his operation an
1cc00 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68  d NotFound is th
1cc10 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  at this.** opera
1cc20 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65  tion assumes the
1cc30 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67   key is an integ
1cc40 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20 69  er and that P1 i
1cc50 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65 61  s a table wherea
1cc60 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73  s.** NotFound as
1cc70 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62  sumes key is a b
1cc80 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1cc90 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20  from MakeRecord 
1cca0 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  and.** P1 is an 
1ccb0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  index..**.** See
1ccc0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1ccd0 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65  tFound, IsUnique
1cce0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45  .*/.case OP_NotE
1ccf0 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20  xists: {        
1cd00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1cd10 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1cd20 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1cd30 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
1cd40 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 61    u64 iKey;..  a
1cd50 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1cd60 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1cd70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cd80 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1cd90 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1cda0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1cdb0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1cdc0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1cdd0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1cde0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1cdf0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1ce00 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  ==0 );.  pCrsr =
1ce10 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
1ce20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
1ce30 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1ce40 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
1ce50 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  i;.    rc = sqli
1ce60 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1ce70 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
1ce80 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
1ce90 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77  .    pC->lastRow
1cea0 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  id = pIn3->u.i;.
1ceb0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1cec0 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31  alid = res==0 ?1
1ced0 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  :0;.    pC->null
1cee0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  Row = 0;.    pC-
1cef0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1cf00 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
1cf10 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1cf20 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  to = 0;.    if( 
1cf30 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  res!=0 ){.      
1cf40 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1cf50 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1cf60 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1cf70 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ==0 );.    }.   
1cf80 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1cf90 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a  = res;.  }else{.
1cfa0 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
1cfb0 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65  ens when an atte
1cfc0 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65  mpt to open a re
1cfd0 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65  ad cursor on the
1cfe0 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f   .    ** sqlite_
1cff0 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74  master table ret
1d000 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
1d010 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63  Y..    */.    pc
1d020 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d030 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1d040 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1d050 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52  );.    pC->seekR
1d060 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20  esult = 0;.  }. 
1d070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d080 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50  code: Sequence P
1d090 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1d0a0 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
1d0b0 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
1d0c0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
1d0d0 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
1d0e0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
1d0f0 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
1d100 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
1d110 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
1d120 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
1d130 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
1d140 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
1d150 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
1d160 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
1d170 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1d180 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1d190 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d1a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d1b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1d1c0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1d1d0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
1d1e0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
1d1f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1d200 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65  seqCount++;.  Me
1d210 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1d220 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
1d230 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
1d240 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
1d250 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1d260 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
1d270 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1d280 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
1d290 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
1d2a0 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
1d2b0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
1d2c0 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
1d2d0 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
1d2e0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
1d2f0 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
1d300 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
1d310 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
1d320 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
1d330 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
1d340 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
1d350 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
1d360 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
1d370 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
1d380 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
1d390 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
1d3a0 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
1d3b0 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
1d3c0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1d3d0 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
1d3e0 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
1d3f0 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
1d400 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
1d410 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
1d420 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
1d430 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 20   maximum, .** a 
1d440 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
1d450 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
1d460 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
1d470 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
1d480 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
1d490 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
1d4a0 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
1d4b0 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
1d4c0 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
1d4d0 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
1d4e0 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
1d4f0 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
1d500 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1d510 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1d520 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20  */.  i64 v;     
1d530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d540 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
1d550 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d560 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73  ;        /* Curs
1d570 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67  or of table to g
1d580 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64  et the new rowid
1d590 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d5b0 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c  Result of an sql
1d5c0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20  ite3BtreeLast() 
1d5d0 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1d5f0 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20  ounter to limit 
1d600 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
1d610 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20  arches */.  Mem 
1d620 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
1d630 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1d640 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72  olding largest r
1d650 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43  owid for AUTOINC
1d660 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65  REMENT */.  Vdbe
1d670 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
1d680 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65     /* Root frame
1d690 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76   of VDBE */..  v
1d6a0 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
1d6b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d6c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1d6d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d6e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1d6f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1d700 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1d710 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72  ( NEVER(pC->pCur
1d720 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f  sor==0) ){.    /
1d730 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69  * The zero initi
1d740 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20  alization above 
1d750 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e  is all that is n
1d760 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65  eeded */.  }else
1d770 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
1d780 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
1d790 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
1d7a0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
1d7b0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
1d7c0 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
1d7d0 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
1d7e0 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
1d7f0 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
1d800 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
1d810 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1d820 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
1d830 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
1d840 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
1d850 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1d860 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
1d870 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
1d880 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
1d890 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
1d8a0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
1d8b0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
1d8c0 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
1d8d0 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
1d8e0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
1d8f0 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
1d900 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
1d910 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
1d920 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
1d930 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
1d940 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
1d950 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
1d960 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
1d970 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
1d980 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
1d990 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
1d9a0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
1d9b0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
1d9c0 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
1d9d0 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
1d9e0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1d9f0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1da00 29 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  );.    cnt = 0;.
1da10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
1da20 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
1da30 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1da40 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
1da50 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
1da60 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
1da70 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
1da80 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
1da90 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
1daa0 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
1dab0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
1dac0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
1dad0 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
1dae0 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
1daf0 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
1db00 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
1db10 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
1db20 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
1db30 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
1db40 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
1db50 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
1db60 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
1db70 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
1db80 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
1db90 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
1dba0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  wid ){.      v =
1dbb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1dbc0 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1dbd0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1dbe0 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20  if( v==0 ){.    
1dbf0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1dc00 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1dc10 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1dc20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1dc30 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1dc40 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1dc50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1dc60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1dc70 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1dc80 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20 20       v = 1;.    
1dc90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1dca0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1dcb0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
1dcc0 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73  sValid(pC->pCurs
1dcd0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20  or) );.         
1dce0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dcf0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
1dd00 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1dd10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
1dd20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
1dd30 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
1dd40 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
1dd50 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
1dd60 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f     if( v==MAX_RO
1dd70 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
1dd80 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
1dd90 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
1dda0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ddb0 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20          v++;.   
1ddc0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ddd0 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1dde0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ddf0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1de00 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1de10 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
1de20 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1de30 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1de40 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1de50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1de60 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
1de70 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
1de80 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
1de90 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
1dea0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
1deb0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
1dec0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1ded0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1dee0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1def0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1df00 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1df10 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
1df20 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1df30 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
1df40 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
1df50 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
1df60 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
1df70 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1df80 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1df90 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1dfa0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1dfb0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
1dfc0 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1dfd0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
1dfe0 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  ];.        }..  
1dff0 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
1e000 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
1e010 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  em);.        sql
1e020 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1e030 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20  erify(pMem);.   
1e040 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
1e050 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
1e060 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
1e070 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
1e080 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
1e090 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
1e0a0 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
1e0b0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1e0c0 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  d ){.          r
1e0d0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
1e0e0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
1e0f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1e100 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
1e110 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
1e120 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
1e130 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
1e140 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20  .i + 1;.        
1e150 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e  }.        pMem->
1e160 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d  u.i = v;.      }
1e170 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73  .#endif..      s
1e180 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
1e190 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1e1a0 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57  ursor, v<MAX_ROW
1e1b0 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20  ID ? v+1 : 0);. 
1e1c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d     }.    if( pC-
1e1d0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1e1e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1e1f0 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
1e200 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
1e210 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
1e220 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1e250 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
1e260 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
1e270 20 76 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77   v = db->lastRow
1e280 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20 3d 20  id;.      cnt = 
1e290 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  0;.      do{.   
1e2a0 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 30 20       if( cnt==0 
1e2b0 26 26 20 28 76 26 30 78 66 66 66 66 66 66 29 3d  && (v&0xffffff)=
1e2c0 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =v ){.          
1e2d0 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  v++;.        }el
1e2e0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  se{.          sq
1e2f0 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73  lite3_randomness
1e300 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b  (sizeof(v), &v);
1e310 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
1e320 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78 66 66  nt<5 ) v &= 0xff
1e330 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ffff;.        }.
1e340 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1e350 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1e360 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1e370 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 20  sor, 0, (u64)v, 
1e380 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
1e390 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d    cnt++;.      }
1e3a0 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20 26  while( cnt<100 &
1e3b0 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rc==SQLITE_OK 
1e3c0 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20  && res==0 );.   
1e3d0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1e3e0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1e3f0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
1e400 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20  QLITE_FULL;.    
1e410 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1e420 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e430 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
1e440 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1e450 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1e460 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1e470 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1e480 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e490 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  LE;.  }.  MemSet
1e4a0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
1e4b0 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d  EM_Int);.  pOut-
1e4c0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
1e4d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e4e0 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
1e4f0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69   P4 P5.**.** Wri
1e500 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
1e510 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
1e520 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
1e530 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
1e540 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
1e550 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
1e560 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
1e570 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
1e580 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
1e590 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
1e5a0 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
1e5b0 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
1e5c0 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
1e5d0 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
1e5e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1e5f0 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
1e600 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
1e610 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
1e620 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1e630 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
1e640 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1e650 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1e660 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1e670 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1e680 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
1e690 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
1e6a0 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
1e6b0 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
1e6c0 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
1e6d0 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
1e6e0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
1e6f0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
1e700 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
1e710 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
1e720 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
1e730 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
1e740 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
1e750 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
1e760 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
1e770 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
1e780 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
1e790 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
1e7a0 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
1e7b0 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
1e7c0 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
1e7d0 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
1e7e0 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
1e7f0 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
1e800 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
1e810 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
1e820 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
1e830 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
1e840 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
1e850 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
1e860 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
1e870 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
1e880 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
1e890 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
1e8a0 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
1e8b0 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
1e8c0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
1e8d0 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
1e8e0 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
1e8f0 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
1e900 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
1e910 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
1e920 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
1e930 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
1e940 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
1e950 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
1e960 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
1e970 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
1e980 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
1e990 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
1e9a0 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
1e9b0 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
1e9c0 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
1e9d0 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
1e9e0 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
1e9f0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
1ea00 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
1ea10 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
1ea20 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
1ea30 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
1ea40 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
1ea50 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
1ea60 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
1ea70 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
1ea80 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
1ea90 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
1eaa0 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
1eab0 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
1eac0 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
1ead0 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
1eae0 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
1eaf0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
1eb00 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
1eb10 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
1eb20 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
1eb30 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
1eb40 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
1eb50 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
1eb60 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
1eb70 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
1eb80 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
1eb90 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
1eba0 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
1ebb0 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
1ebc0 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
1ebd0 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
1ebe0 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
1ebf0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
1ec00 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
1ec10 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
1ec20 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
1ec30 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
1ec40 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
1ec50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
1ec60 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
1ec70 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
1ec80 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
1ec90 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
1eca0 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
1ecb0 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
1ecc0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
1ecd0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1ece0 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
1ecf0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
1ed00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
1ed10 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
1ed20 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
1ed30 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
1ed40 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
1ed50 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
1ed60 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
1ed70 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
1ed80 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
1ed90 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
1eda0 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
1edb0 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
1edc0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
1edd0 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
1ede0 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
1edf0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
1ee00 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
1ee10 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
1ee20 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
1ee30 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
1ee40 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
1ee50 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
1ee60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ee70 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
1ee80 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
1ee90 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
1eea0 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
1eeb0 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
1eec0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
1eed0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
1eee0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
1eef0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
1ef00 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
1ef10 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
1ef20 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
1ef30 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
1ef40 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
1ef50 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
1ef60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
1ef70 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
1ef80 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
1ef90 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
1efa0 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
1efb0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1efc0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
1efd0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1efe0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1eff0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f000 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f010 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1f020 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1f030 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1f040 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1f050 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1f060 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1f070 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
1f080 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
1f090 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
1f0a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1f0b0 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
1f0c0 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Key = &p->aMem[p
1f0d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
1f0e0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
1f0f0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
1f100 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1f110 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
1f120 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
1f130 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
1f140 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f150 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1f160 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
1f170 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
1f180 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
1f190 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1f1a0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1f1b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1f1c0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1f1d0 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
1f1e0 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
1f1f0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
1f200 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
1f210 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
1f220 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
1f230 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1f240 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
1f250 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
1f260 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
1f270 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
1f280 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
1f290 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
1f2a0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
1f2b0 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
1f2c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1f2d0 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
1f2e0 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
1f2f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
1f300 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
1f310 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1f320 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1f330 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
1f340 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
1f350 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f  nsert(pC->pCurso
1f360 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20  r, 0, iKey,.    
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f380 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
1f390 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
1f3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f3b0 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
1f3c0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
1f3d0 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  ND, seekResult. 
1f3e0 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
1f3f0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
1f400 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1f410 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1f420 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1f430 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
1f440 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
1f450 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
1f460 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
1f470 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
1f480 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
1f490 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
1f4a0 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
1f4b0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
1f4c0 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
1f4d0 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
1f4e0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
1f4f0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
1f500 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
1f510 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
1f520 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1f530 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
1f540 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1f550 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
1f560 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
1f570 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
1f580 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
1f590 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f5a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
1f5b0 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
1f5c0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
1f5d0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
1f5e0 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
1f5f0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
1f600 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
1f610 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
1f620 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1f630 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
1f640 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
1f650 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
1f660 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
1f670 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1f680 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
1f690 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
1f6a0 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
1f6b0 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
1f6c0 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
1f6d0 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
1f6e0 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
1f6f0 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
1f700 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
1f710 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1f720 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
1f730 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1f740 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1f750 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1f760 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1f770 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
1f780 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
1f790 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
1f7a0 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
1f7b0 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
1f7c0 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
1f7d0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1f7e0 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
1f7f0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1f800 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
1f810 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
1f820 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
1f830 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
1f840 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
1f850 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1f860 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
1f870 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1f880 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
1f890 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
1f8a0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
1f8b0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
1f8c0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
1f8d0 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
1f8e0 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
1f8f0 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20   *pC;..  iKey = 
1f900 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1f910 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1f920 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1f930 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1f940 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1f950 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1f960 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1f970 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
1f980 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
1f990 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
1f9a0 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
1f9b0 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
1f9c0 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
1f9d0 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
1f9e0 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
1f9f0 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
1fa00 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
1fa10 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
1fa20 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1fa30 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
1fa40 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1fa50 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
1fa60 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1fa70 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
1fa80 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
1fa90 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
1faa0 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
1fab0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
1fac0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
1fad0 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
1fae0 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
1faf0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
1fb00 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
1fb10 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
1fb20 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
1fb30 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
1fb40 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
1fb50 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
1fb60 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
1fb70 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
1fb80 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
1fb90 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
1fba0 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
1fbb0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
1fbc0 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
1fbd0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
1fbe0 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
1fbf0 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
1fc00 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
1fc10 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
1fc20 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
1fc30 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
1fc40 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
1fc50 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
1fc60 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1fc70 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
1fc80 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
1fc90 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
1fca0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1fcb0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1fcc0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
1fcd0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
1fce0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1fcf0 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
1fd00 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
1fd10 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
1fd20 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
1fd30 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1fd40 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1fd50 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fd60 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1fd70 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1fd80 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1fd90 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1fda0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1fdb0 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1fdc0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1fdd0 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
1fde0 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1fdf0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1fe00 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
1fe10 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
1fe20 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
1fe30 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
1fe40 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
1fe50 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
1fe60 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
1fe70 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1fe80 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
1fe90 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
1fea0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
1feb0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
1fec0 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
1fed0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
1fee0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
1fef0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
1ff00 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
1ff10 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
1ff20 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
1ff30 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
1ff40 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
1ff50 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
1ff60 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
1ff70 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
1ff80 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
1ff90 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
1ffa0 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
1ffb0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
1ffc0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
1ffd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
1ffe0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
1fff0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
20000 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
20010 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
20020 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
20030 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
20040 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
20050 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
20060 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
20070 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74  complete row dat
20080 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  a for cursor P1.
20090 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
200a0 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
200b0 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
200c0 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
200d0 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
200e0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
200f0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
20100 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
20110 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
20120 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
20130 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
20140 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
20150 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
20160 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
20170 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
20180 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f  o-table..*/./* O
20190 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31  pcode: RowKey P1
201a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
201b0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
201c0 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
201d0 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
201e0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
201f0 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
20200 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
20210 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
20220 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
20230 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
20240 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
20250 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
20260 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
20270 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
20280 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
20290 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
202a0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
202b0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
202c0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
202d0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
202e0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
202f0 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
20300 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
20310 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
20320 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
20330 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
20340 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ;..  pOut = &p->
20350 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a  aMem[pOp->p2];..
20360 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
20370 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
20380 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
20390 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
203a0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
203b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
203c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
203d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
203e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
203f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20400 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
20410 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
20420 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74  wKey );.  assert
20430 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c  ( pC->isIndex ||
20440 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
20450 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
20460 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
20470 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
20480 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
20490 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
204a0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
204b0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
204c0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
204d0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
204e0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
204f0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
20500 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a  alid(pCrsr) );..
20510 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b    /* The OP_RowK
20520 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74  ey and OP_RowDat
20530 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73  a opcodes always
20540 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78   follow OP_NotEx
20550 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  ists or.  ** OP_
20560 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77  Rewind/Op_Next w
20570 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69  ith no interveni
20580 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ng instructions 
20590 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c  that might inval
205a0 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63  idate.  ** the c
205b0 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68  ursor.  Hence th
205c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69  e following sqli
205d0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
205e0 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c  eto() call is al
205f0 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f  ways.  ** a no-o
20600 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20  p and can never 
20610 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65  fail.  But we le
20620 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20  ave it in place 
20630 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a  as a safety..  *
20640 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
20650 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
20660 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
20670 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
20680 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
20690 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
206a0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
206b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
206c0 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
206d0 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  x ){.    assert(
206e0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b   !pC->isTable );
206f0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20700 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
20710 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20  rsr, &n64);.    
20720 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
20730 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54  TE_OK );    /* T
20740 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
20750 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
20760 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
20770 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d  if( n64>db->aLim
20780 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
20790 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
207a0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
207b0 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33     }.    n = (u3
207c0 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2)n64;.  }else{.
207d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
207e0 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
207f0 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
20800 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
20810 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
20820 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
20830 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
20840 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
20850 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
20860 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
20870 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
20880 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
20890 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
208a0 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
208b0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
208c0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
208d0 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
208e0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
208f0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
20900 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
20910 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
20920 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
20930 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
20940 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
20950 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
20960 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
20970 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
20980 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
20990 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
209a0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
209b0 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
209c0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
209d0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
209e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
209f0 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
20a00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
20a10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
20a20 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
20a30 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
20a40 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
20a50 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
20a60 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
20a70 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
20a80 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
20a90 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
20aa0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
20ab0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
20ac0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
20ad0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
20ae0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
20af0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
20b00 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
20b10 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
20b20 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
20b30 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
20b40 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
20b50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
20b60 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
20b70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
20b80 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
20b90 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
20ba0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
20bb0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
20bc0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
20bd0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20be0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20bf0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20c00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20c10 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
20c20 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
20c30 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
20c40 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
20c50 77 20 29 7b 0a 20 20 20 20 2f 2a 20 44 6f 20 6e  w ){.    /* Do n
20c60 6f 74 68 69 6e 67 20 73 6f 20 74 68 61 74 20 72  othing so that r
20c70 65 67 5b 50 32 5d 20 72 65 6d 61 69 6e 73 20 4e  eg[P2] remains N
20c80 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b  ULL */.    break
20c90 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
20ca0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20cb0 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
20cc0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
20cd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20ce0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
20cf0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
20d00 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
20d10 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
20d20 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
20d30 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
20d40 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
20d50 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
20d60 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
20d70 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
20d80 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
20d90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20da0 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d  misuse;.    rc =
20db0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
20dc0 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
20dd0 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
20de0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
20df0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
20e00 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
20e10 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
20e20 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
20e30 30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  0;.    if( sqlit
20e40 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
20e50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20e60 74 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64 69  to_misuse;.#endi
20e70 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
20e80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
20e90 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
20ea0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
20eb0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
20ec0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
20ed0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
20ee0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
20ef0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
20f00 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
20f10 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a  rowidIsValid ){.
20f20 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61        v = pC->la
20f30 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c  stRowid;.    }el
20f40 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
20f50 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
20f60 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
20f70 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  &v);.      asser
20f80 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
20f90 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73   );  /* Always s
20fa0 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  o because of Cur
20fb0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76  sorMoveto() abov
20fc0 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e */.    }.  }. 
20fd0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
20fe0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
20ff0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
21000 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21010 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
21020 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
21030 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
21040 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
21050 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
21060 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
21070 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
21080 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
21090 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
210a0 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
210b0 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
210c0 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
210d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
210e0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
210f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21100 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21110 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21120 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21130 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21140 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
21150 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
21160 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28  Valid = 0;.  if(
21170 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
21180 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
21190 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
211a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
211b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
211c0 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
211d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
211e0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
211f0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
21200 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
21210 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
21220 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
21230 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
21240 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
21250 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
21260 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
21270 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
21280 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
21290 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
212a0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
212b0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
212c0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
212d0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
212e0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
212f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
21300 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
21310 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
21320 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
21330 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21340 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
21350 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
21360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21370 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21380 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
21390 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
213a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
213b0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
213c0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
213d0 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29    if( pCrsr==0 )
213e0 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20  {.    res = 1;. 
213f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
21400 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
21410 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
21420 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
21430 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
21440 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21450 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77  o = 0;.  pC->row
21460 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
21470 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21480 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21490 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
214a0 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  && res ){.    pc
214b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
214c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
214d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
214e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
214f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
21500 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
21510 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
21520 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
21530 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
21540 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
21550 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
21560 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
21570 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
21580 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
21590 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
215a0 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
215b0 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
215c0 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
215d0 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
215e0 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
215f0 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
21600 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
21610 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
21620 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
21630 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
21640 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
21650 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
21660 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
21670 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
21680 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
21690 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
216a0 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
216b0 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
216c0 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
216d0 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
216e0 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
216f0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
21700 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
21710 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
21720 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
21730 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
21740 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
21750 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
21760 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
21770 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31  TMTSTATUS_SORT-1
21780 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
21790 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
217a0 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
217b0 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
217c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
217d0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
217e0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
217f0 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
21800 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
21810 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
21820 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
21830 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
21840 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
21850 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
21860 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
21870 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
21880 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21890 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
218a0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
218b0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
218c0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
218d0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
218e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
218f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
21900 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
21910 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
21920 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21930 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
21940 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
21950 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
21960 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21970 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21980 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21990 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
219a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
219b0 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70 43   if( (pCrsr = pC
219c0 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
219d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
219e0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
219f0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
21a00 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d  ->atFirst = res=
21a10 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
21a20 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21a30 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
21a40 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21a50 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
21a60 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21a70 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
21a80 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  es = 1;.  }.  pC
21a90 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21aa0 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
21ab0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
21ac0 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
21ad0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
21ae0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
21af0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21b00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
21b10 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21b20 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
21b30 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
21b40 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
21b50 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
21b60 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
21b70 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
21b80 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
21b90 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
21ba0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
21bb0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
21bc0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
21bd0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
21be0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
21bf0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
21c00 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
21c10 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
21c20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
21c30 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
21c40 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
21c50 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
21c60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
21c70 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
21c80 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  rev P1 P2 * * *.
21c90 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
21ca0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
21cb0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
21cc0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
21cd0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
21ce0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
21cf0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
21d00 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
21d10 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
21d20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
21d30 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
21d40 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
21d50 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
21d60 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
21d70 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
21d80 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21d90 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
21da0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
21db0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
21dc0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
21dd0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
21de0 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
21df0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
21e00 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20  P_Next: {       
21e10 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
21e20 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
21e30 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
21e40 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43  .  int res;..  C
21e50 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
21e60 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  PT;.  assert( pO
21e70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21e80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21e90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21ea0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
21eb0 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62  ( pC==0 ){.    b
21ec0 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69  reak;  /* See ti
21ed0 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20  cket #2273 */.  
21ee0 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  }.  pCrsr = pC->
21ef0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
21f00 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 70  Crsr==0 ){.    p
21f10 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
21f20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
21f30 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65   res = 1;.  asse
21f40 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
21f50 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
21f60 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  c = pOp->opcode=
21f70 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74  =OP_Next ? sqlit
21f80 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73  e3BtreeNext(pCrs
21f90 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20  r, &res) :.     
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
21fc0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
21fd0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
21fe0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21ff0 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
22000 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22010 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
22020 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
22030 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
22040 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
22050 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
22060 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
22070 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
22080 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
22090 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
220a0 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
220b0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
220c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
220d0 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
220e0 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
220f0 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
22100 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79   a SQL index key
22110 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
22120 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
22130 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
22140 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
22150 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
22160 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
22170 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
22180 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
22190 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
221a0 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
221b0 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
221c0 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
221d0 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
221e0 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
221f0 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pend..**.** This
22200 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
22210 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
22220 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
22230 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
22240 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
22250 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
22260 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
22270 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
22280 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
22290 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
222a0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
222b0 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
222c0 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
222d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
222e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
222f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22300 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22310 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22320 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22330 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
22340 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72  EM_Blob );.  pCr
22350 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
22360 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
22370 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
22380 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22390 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63  ble==0 );.    rc
223a0 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
223b0 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  n2);.    if( rc=
223c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
223d0 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d      nKey = pIn2-
223e0 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d  >n;.      zKey =
223f0 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
22400 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22410 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a  eInsert(pCrsr, z
22420 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
22430 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
22440 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e           ((pOp->
22450 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
22460 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
22470 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
22480 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
22490 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
224a0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
224b0 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
224c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
224d0 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
224e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
224f0 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
22500 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
22510 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
22520 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
22530 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
22540 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
22550 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
22560 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
22570 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
22580 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
22590 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
225a0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
225b0 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
225c0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
225d0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
225e0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
225f0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
22600 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
22610 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
22620 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22630 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
22640 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65  +pOp->p3<=p->nMe
22650 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  m+1 );.  assert(
22660 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22670 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22680 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22690 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
226a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
226b0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
226c0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41  pCursor;.  if( A
226d0 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
226e0 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
226f0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
22700 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
22710 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
22720 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a     r.flags = 0;.
22730 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d      r.aMem = &p-
22740 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
22750 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22760 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
22770 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
22780 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
22790 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
227a0 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
227b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
227c0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
227d0 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  sr);.    }.    a
227e0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
227f0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22800 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
22810 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22820 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  E;.  }.  break;.
22830 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
22840 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
22850 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
22860 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
22870 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
22880 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
22890 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
228a0 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
228b0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
228c0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
228d0 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
228e0 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
228f0 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
22900 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
22910 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
22920 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
22930 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
22940 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
22950 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
22960 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20  _IdxRowid: {    
22970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
22980 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
22990 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
229a0 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  r;.  VdbeCursor 
229b0 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64  *pC;.  i64 rowid
229c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
229d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
229e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
229f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22a00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22a10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22a20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
22a30 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
22a40 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
22a50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
22a60 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22a70 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56  pC);.    if( NEV
22a80 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
22a90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22aa0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
22ab0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22ac0 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
22ad0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
22ae0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43  0 );.    if( !pC
22af0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
22b00 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
22b10 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
22b20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
22b30 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
22b40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
22b50 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
22b60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
22b70 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53 65 74    }.      MemSet
22b80 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
22b90 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 70  EM_Int);.      p
22ba0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
22bb0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
22bc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22bd0 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
22be0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
22bf0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
22c00 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
22c10 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
22c20 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
22c30 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
22c40 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
22c50 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
22c60 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
22c70 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
22c80 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
22c90 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
22ca0 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
22cb0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
22cc0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
22cd0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
22ce0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
22cf0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
22d00 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
22d10 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
22d20 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
22d30 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
22d40 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
22d50 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
22d60 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
22d70 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
22d80 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
22d90 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68   .** prior to th
22da0 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
22db0 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63  his make the opc
22dc0 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
22dd0 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68  xGT except.** th
22de0 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72  at if the key fr
22df0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69  om register P3 i
22e00 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
22e10 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72  e key in the cur
22e20 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75  sor,.** the resu
22e30 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72  lt is false wher
22e40 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20  eas it would be 
22e50 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e  true with IdxGT.
22e60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
22e70 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 2a 20  dxLT P1 P2 P3 * 
22e80 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
22e90 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
22ea0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
22eb0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
22ec0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
22ed0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
22ee0 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
22ef0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
22f00 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
22f10 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
22f20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
22f30 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
22f40 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
22f50 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
22f60 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
22f70 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
22f80 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
22f90 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
22fa0 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
22fb0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22fc0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
22fd0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
22fe0 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
22ff0 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
23000 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
23010 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
23020 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d  r .** to the com
23030 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
23040 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20  akes the opcode 
23050 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e  work like IdxLE.
23060 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
23070 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
23080 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
23090 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20 20   OP_IdxGE: {    
230a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
230b0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
230c0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
230d0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
230e0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
230f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23100 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23110 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23120 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23130 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23140 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
23150 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
23160 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23170 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
23180 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
23190 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
231a0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
231b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
231c0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
231d0 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
231e0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
231f0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
23200 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
23210 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
23220 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   ){.      r.flag
23230 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
23240 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f  RKEY | UNPACKED_
23250 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20  IGNORE_ROWID;.  
23260 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23270 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
23280 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
23290 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d      }.    r.aMem
232a0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
232b0 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73  >p3];.    rc = s
232c0 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
232d0 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
232e0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
232f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
23300 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65  dxLT ){.      re
23310 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65  s = -res;.    }e
23320 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
23330 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
23340 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20  OP_IdxGE );.    
23350 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20    res++;.    }. 
23360 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
23370 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
23380 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20  p2 - 1 ;.    }. 
23390 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
233a0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
233b0 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
233c0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
233d0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
233e0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
233f0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
23400 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
23410 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
23420 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
23430 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
23440 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
23450 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
23460 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
23470 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
23480 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
23490 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
234a0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
234b0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
234c0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
234d0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
234e0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
234f0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
23500 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
23510 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
23520 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
23530 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
23540 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
23550 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
23560 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
23570 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
23580 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
23590 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
235a0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
235b0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
235c0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
235d0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
235e0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
235f0 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
23600 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
23610 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
23620 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
23630 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
23640 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
23650 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
23660 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
23670 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
23680 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
23690 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
236a0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
236b0 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
236c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
236d0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
236e0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
236f0 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
23700 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
23710 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
23720 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
23730 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
23740 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
23750 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
23760 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
23770 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64    int iCnt;.  Vd
23780 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74  be *pVdbe;.  int
23790 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51   iDb;.#ifndef SQ
237a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
237b0 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
237c0 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
237d0 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
237e0 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
237f0 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
23800 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
23810 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
23820 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
23830 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
23840 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  pc>=0 ){.      i
23850 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
23860 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
23870 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
23880 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
23890 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63  iCnt>1 ){.    rc
238a0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
238b0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
238c0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
238d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
238e0 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
238f0 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31   assert( iCnt==1
23900 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23910 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
23920 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  (1<<iDb))!=0 );.
23930 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
23940 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
23950 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
23960 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
23970 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  d);.    MemSetTy
23980 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
23990 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
239a0 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
239b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
239c0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
239d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
239e0 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
239f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
23a00 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26  3RootPageMoved(&
23a10 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d  db->aDb[iDb], iM
23a20 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
23a30 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
23a40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23a50 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
23a60 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
23a70 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
23a80 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
23a90 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
23aa0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
23ab0 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
23ac0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
23ad0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
23ae0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
23af0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
23b00 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23b10 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
23b20 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
23b30 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
23b40 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
23b50 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
23b60 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
23b70 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
23b80 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
23b90 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
23ba0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
23bb0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
23bc0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
23bd0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
23be0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
23bf0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
23c00 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
23c10 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
23c20 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
23c30 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
23c40 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
23c50 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
23c60 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
23c70 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
23c80 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
23c90 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
23ca0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
23cb0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
23cc0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
23cd0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
23ce0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
23cf0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
23d00 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
23d10 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
23d20 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
23d30 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
23d40 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
23d50 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
23d60 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
23d70 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
23d80 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
23d90 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
23da0 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
23db0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   0;.  assert( (p
23dc0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
23dd0 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29  <<pOp->p2))!=0 )
23de0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
23df0 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
23e00 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
23e10 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
23e20 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
23e30 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
23e40 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
23e50 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
23e60 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
23e70 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
23e80 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 61 4d  0 ){.      p->aM
23e90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
23ea0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
23eb0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
23ec0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
23ed0 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
23ee0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
23ef0 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
23f00 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
23f10 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
23f20 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
23f30 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
23f40 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
23f50 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
23f60 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
23f70 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
23f80 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
23f90 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
23fa0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
23fb0 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54  ister P2.**.** T
23fc0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
23fd0 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e  tween a table an
23fe0 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68  d an index is th
23ff0 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73  is:  A table mus
24000 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79  t.** have a 4-by
24010 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61  te integer key a
24020 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69  nd can have arbi
24030 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20  trary data.  An 
24040 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20  index.** has an 
24050 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75  arbitrary key bu
24060 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  t no data..**.**
24070 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74   See also: Creat
24080 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  eIndex.*/./* Opc
24090 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78  ode: CreateIndex
240a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
240b0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
240c0 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
240d0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
240e0 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
240f0 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
24100 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
24110 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
24120 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
24130 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
24140 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
24150 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
24160 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
24170 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
24180 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
24190 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
241a0 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
241b0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
241c0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
241d0 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
241e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
241f0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
24200 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
24210 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
24220 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
24230 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ase */.  int pgn
24240 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
24250 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67    Db *pDb;..  pg
24260 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
24270 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24280 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
24290 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
242a0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
242b0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
242c0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
242d0 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
242e0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
242f0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
24300 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
24310 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
24320 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
24330 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
24340 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46  ags = BTREE_LEAF
24350 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45  DATA|BTREE_INTKE
24360 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
24370 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45  flags = BTREE_ZE
24380 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63  RODATA;.  }.  rc
24390 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
243a0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
243b0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
243c0 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
243d0 3d 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74  = pgno;.  MemSet
243e0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
243f0 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
24400 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24410 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50  ParseSchema P1 P
24420 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 * P4 *.**.** R
24430 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
24440 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
24450 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
24460 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
24470 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
24480 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
24490 61 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20  ause P4.  P2 is 
244a0 74 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67  the "force" flag
244b0 2e 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a  .   Always do.**
244c0 20 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20   the parsing if 
244d0 50 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  P2 is true.  If 
244e0 50 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  P2 is false, the
244f0 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
24500 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20  s a.** no-op if 
24510 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f  the schema is no
24520 74 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64  t currently load
24530 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ed.  In other wo
24540 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73  rds, if P2.** is
24550 20 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49   false, the SQLI
24560 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
24570 69 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69  is only parsed i
24580 66 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  f the rest of th
24590 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61  e.** schema is a
245a0 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e  lready loaded in
245b0 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61  to the symbol ta
245c0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ble..**.** This 
245d0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
245e0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
245f0 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
24600 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
24610 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
24620 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
24630 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
24640 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
24650 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
24660 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
24670 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
24680 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
24690 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
246a0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
246b0 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
246c0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
246d0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
246e0 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70  Db );..  /* If p
246f0 4f 70 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65  Op->p2 is 0, the
24700 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
24710 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20   being executed 
24720 74 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73  to read a.  ** s
24730 69 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65  ingle row, for e
24740 78 61 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63  xample the row c
24750 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
24760 61 20 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a  a new index.  **
24770 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
24780 20 56 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20   VDBE, from the 
24790 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
247a0 62 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a  ble. It only.  *
247b0 2a 20 64 6f 65 73 20 74 68 69 73 20 69 66 20 74  * does this if t
247c0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
247d0 20 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d   in-memory schem
247e0 61 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20  a is currently. 
247f0 20 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65   ** loaded. Othe
24800 72 77 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69  rwise, the new i
24810 6e 64 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20  ndex definition 
24820 63 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c  can be loaded al
24830 6f 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68  ong.  ** with th
24840 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 73 63  e rest of the sc
24850 68 65 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20  hema when it is 
24860 72 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20  required..  **. 
24870 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65   ** Although the
24880 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74   mutex on the Bt
24890 53 68 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68  Shared object th
248a0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
248b0 6f 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  o.  ** database 
248c0 69 44 62 20 28 74 68 65 20 64 61 74 61 62 61 73  iDb (the databas
248d0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
248e0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
248f0 61 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62  able.  ** read b
24900 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
24910 6f 6e 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79  on) is currently
24920 20 68 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63   held, it is nec
24930 65 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f  essary to.  ** o
24940 62 74 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65  btain the mutexe
24950 73 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s on all attache
24960 64 20 64 61 74 61 62 61 73 65 73 20 62 65 66 6f  d databases befo
24970 72 65 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20  re checking if. 
24980 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f   ** the schema o
24990 66 20 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e  f iDb is loaded.
249a0 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
249b0 2c 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f  , at the start o
249c0 66 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74  f.  ** the sqlit
249d0 65 33 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62  e3_exec() call b
249e0 65 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c  elow, SQLite wil
249f0 6c 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73  l invoke .  ** s
24a00 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72  qlite3BtreeEnter
24a10 41 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75  All(). If all mu
24a20 74 65 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  texes are not al
24a30 72 65 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a  ready held, the.
24a40 20 20 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d    ** iDb mutex m
24a50 61 79 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c  ay be temporaril
24a60 79 20 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76  y released to av
24a70 6f 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66  oid deadlock. If
24a80 20 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70   .  ** this happ
24a90 65 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f  ens, then some o
24aa0 74 68 65 72 20 74 68 72 65 61 64 20 6d 61 79 20  ther thread may 
24ab0 64 65 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65  delete the in-me
24ac0 6d 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d  mory .  ** schem
24ad0 61 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44  a of database iD
24ae0 62 20 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c  b before the SQL
24af0 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e   statement runs.
24b00 20 54 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a   The schema.  **
24b10 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c   will not be rel
24b20 6f 61 64 65 64 20 62 65 63 75 61 73 65 20 74 68  oaded becuase th
24b30 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20  e db->init.busy 
24b40 66 6c 61 67 20 69 73 20 73 65 74 2e 20 54 68 69  flag is set. Thi
24b50 73 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c  s.  ** can resul
24b60 74 20 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20  t in a "no such 
24b70 74 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61  table: sqlite_ma
24b80 73 74 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72  ster" or "malfor
24b90 6d 65 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  med.  ** databas
24ba0 65 20 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20  e schema" error 
24bb0 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74  being returned t
24bc0 6f 20 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f  o the user..  */
24bd0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
24be0 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
24bf0 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
24c00 42 74 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  Bt) );.  sqlite3
24c10 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62  BtreeEnterAll(db
24c20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
24c30 20 7c 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74   || DbHasPropert
24c40 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
24c50 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20  hemaLoaded) ){. 
24c60 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48     zMaster = SCH
24c70 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
24c80 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
24c90 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
24ca0 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  ta.iDb = pOp->p1
24cb0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70  ;.    initData.p
24cc0 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
24cd0 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20  rrMsg;.    zSql 
24ce0 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
24cf0 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
24d00 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
24d10 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
24d20 27 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a  '.%s WHERE %s",.
24d30 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
24d40 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
24d50 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
24d60 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
24d70 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
24d80 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
24d90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 28 76 6f  }else{.      (vo
24da0 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
24db0 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 20 20 61  Off(db);.      a
24dc0 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
24dd0 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
24de0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
24df0 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
24e00 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
24e10 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
24e20 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
24e30 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
24e40 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
24e50 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
24e60 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
24e70 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
24e80 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
24e90 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
24ea0 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
24eb0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
24ec0 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
24ed0 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
24ee0 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69        (void)sqli
24ef0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b  te3SafetyOn(db);
24f00 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
24f10 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c  ite3BtreeLeaveAl
24f20 6c 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  l(db);.  if( rc=
24f30 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
24f40 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
24f50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
24f60 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
24f70 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
24f80 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
24f90 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
24fa0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
24fb0 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
24fc0 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
24fd0 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
24fe0 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
24ff0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
25000 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
25010 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
25020 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
25030 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
25040 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
25050 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
25060 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
25070 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
25080 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
25090 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
250a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
250b0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
250c0 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
250d0 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
250e0 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
250f0 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
25100 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25110 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
25120 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
25130 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
25140 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
25150 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
25160 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
25170 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
25180 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
25190 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
251a0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
251b0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
251c0 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
251d0 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
251e0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
251f0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
25200 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
25210 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
25220 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
25230 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
25240 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
25250 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
25260 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
25270 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
25280 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
25290 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
252a0 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
252b0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
252c0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
252d0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
252e0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
252f0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
25300 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
25310 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
25320 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
25330 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
25340 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
25350 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
25360 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
25370 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
25380 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
25390 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
253a0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
253b0 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
253c0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
253d0 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
253e0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
253f0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
25400 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
25410 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
25420 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
25430 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
25440 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
25450 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
25460 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
25470 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
25480 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
25490 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
254a0 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
254b0 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
254c0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
254d0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
254e0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
254f0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
25500 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
25510 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
25520 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
25530 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
25540 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
25550 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
25560 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
25570 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
25580 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25590 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
255a0 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
255b0 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
255c0 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
255d0 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
255e0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
255f0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
25600 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
25610 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
25620 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
25630 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
25640 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
25650 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
25660 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
25670 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
25680 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
25690 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
256a0 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
256b0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
256c0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
256d0 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
256e0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
256f0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
25700 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
25710 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
25720 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
25730 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
25740 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
25750 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
25760 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
25770 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
25780 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
25790 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
257a0 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
257b0 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
257c0 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
257d0 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
257e0 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
257f0 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
25800 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
25810 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
25820 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
25830 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
25840 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
25850 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
25860 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
25870 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
25880 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25890 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
258a0 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
258b0 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
258c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
258d0 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
258e0 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
258f0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
25900 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
25910 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
25920 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
25930 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
25940 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
25950 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
25960 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
25970 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
25980 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
25990 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
259a0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
259b0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
259c0 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
259d0 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
259e0 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
259f0 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
25a00 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
25a10 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
25a20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
25a30 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a  remaining */.  .
25a40 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
25a50 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
25a60 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
25a70 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
25a80 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
25a90 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
25aa0 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
25ab0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
25ac0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25ad0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
25ae0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45  p->nMem );.  pnE
25af0 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  rr = &p->aMem[pO
25b00 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
25b10 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
25b20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
25b30 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
25b40 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
25b50 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
25b60 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70  0 );.  pIn1 = &p
25b70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
25b80 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
25b90 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
25ba0 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
25bb0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
25bc0 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
25bd0 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
25be0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25bf0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
25c00 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
25c10 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
25c20 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a  ->p5))!=0 );.  z
25c30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
25c40 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
25c50 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
25c60 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
25c70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
25ca0 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  .i, &nErr);.  sq
25cb0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
25cc0 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d  aRoot);.  pnErr-
25cd0 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
25ce0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
25cf0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
25d00 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
25d10 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
25d20 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
25d30 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
25d40 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
25d50 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
25d60 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
25d70 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
25d80 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
25d90 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
25da0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
25db0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
25dc0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
25dd0 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
25de0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
25df0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
25e00 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
25e10 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
25e20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
25e30 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  * * *.**.** Inse
25e40 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
25e50 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
25e60 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
25e70 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
25e80 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
25e90 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
25ea0 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
25eb0 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
25ec0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
25ed0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
25ee0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
25ef0 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 4d    Mem *pIdx;.  M
25f00 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73 73 65  em *pVal;.  asse
25f10 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
25f20 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65   pOp->p1<=p->nMe
25f30 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20 26 70  m );.  pIdx = &p
25f40 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
25f50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25f60 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
25f70 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 56  =p->nMem );.  pV
25f80 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  al = &p->aMem[pO
25f90 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
25fa0 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26  ( (pVal->flags &
25fb0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
25fc0 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61    if( (pIdx->fla
25fd0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
25fe0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
25ff0 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
26000 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20 69 66  et(pIdx);.    if
26010 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26  ( (pIdx->flags &
26020 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
26030 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
26040 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
26050 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d 3e 75  etInsert(pIdx->u
26060 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c 2d 3e  .pRowSet, pVal->
26070 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
26080 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26090 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
260a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61   * *.**.** Extra
260b0 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  ct the smallest 
260c0 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65  value from boole
260d0 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20  an index P1 and 
260e0 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
260f0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
26100 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c  P3.  Or, if bool
26110 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20  ean index P1 is 
26120 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
26130 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
26140 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
26150 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
26160 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
26170 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
26180 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74 33 20    /* jump, out3 
26190 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a  */.  Mem *pIdx;.
261a0 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61 73 73    i64 val;.  ass
261b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
261c0 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
261d0 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f 46 4f  em );.  CHECK_FO
261e0 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
261f0 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Idx = &p->aMem[p
26200 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
26210 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
26220 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 64 78  p3];.  if( (pIdx
26230 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
26240 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
26250 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
26260 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53 65  t(pIdx->u.pRowSe
26270 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
26280 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
26290 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
262a0 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
262b0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
262c0 70 49 64 78 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIdx);.    pc = 
262d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
262e0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
262f0 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
26300 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
26310 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
26320 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
26330 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
26340 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
26350 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
26360 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  val);.  }.  brea
26370 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26380 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
26390 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65  2 P3 P4.**.** Re
263a0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
263b0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
263c0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
263d0 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
263e0 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
263f0 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
26400 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
26410 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
26420 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
26430 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
26440 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
26450 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
26460 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
26470 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
26480 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
26490 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
264a0 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
264b0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
264c0 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
264d0 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
264e0 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
264f0 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
26500 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
26510 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
26520 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
26530 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
26540 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
26550 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
26560 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
26570 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
26580 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
26590 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
265a0 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
265b0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
265c0 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
265d0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
265e0 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
265f0 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
26600 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
26610 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
26620 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
26630 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
26640 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
26650 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
26660 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
26670 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
26680 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
26690 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
266a0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
266b0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
266c0 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
266d0 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
266e0 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
266f0 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
26700 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
26710 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
26720 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
26730 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
26740 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
26750 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
26760 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
26770 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
26780 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
26790 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
267a0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
267b0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
267c0 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
267d0 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
267e0 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
267f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26800 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
26810 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
26820 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
26830 3b 0a 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ;..  iSet = pOp-
26840 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
26850 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
26860 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
26870 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
26880 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
26890 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
268a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
268b0 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
268c0 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
268d0 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
268e0 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
268f0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
26900 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
26910 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
26920 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
26930 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
26940 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
26950 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
26960 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
26970 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
26980 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
26990 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
269a0 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
269b0 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
269c0 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
269d0 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
269e0 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
269f0 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
26a20 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
26a30 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a50 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
26a60 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
26a70 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
26a80 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
26a90 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
26aa0 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
26ab0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
26ac0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
26ad0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
26ae0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
26af0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
26b00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26b10 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
26b20 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
26b30 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
26b40 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
26b50 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
26b60 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
26b70 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
26b80 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
26b90 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
26ba0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
26bb0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
26bc0 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
26bd0 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
26be0 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
26bf0 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
26c00 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
26c10 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
26c20 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
26c30 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
26c40 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
26c50 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
26c60 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
26c70 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
26c80 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
26c90 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
26ca0 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
26cb0 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
26cc0 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
26cd0 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
26ce0 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
26cf0 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
26d00 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
26d10 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
26d20 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
26d30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
26d40 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
26d50 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
26d60 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
26d70 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
26d80 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
26d90 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
26da0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
26db0 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
26dc0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
26dd0 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
26de0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
26df0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
26e00 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
26e10 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
26e20 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
26e30 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
26e40 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
26e50 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
26e60 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
26e70 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
26e80 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
26e90 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
26ea0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
26eb0 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
26ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
26ed0 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
26ee0 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
26ef0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
26f00 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
26f10 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
26f20 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
26f30 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
26f40 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
26f50 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
26f60 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
26f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
26f80 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
26f90 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
26fa0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
26fb0 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
26fc0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
26fd0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
26fe0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
26ff0 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
27000 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
27010 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
27020 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
27030 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
27040 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
27050 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
27060 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
27070 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
27080 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
27090 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
270a0 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
270b0 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
270c0 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
270d0 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
270e0 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
270f0 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
27100 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
27110 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
27120 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
27130 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
27140 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
27150 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
27160 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
27170 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
27180 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
27190 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
271a0 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
271b0 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
271c0 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
271d0 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
271e0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
271f0 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
27200 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
27210 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
27220 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
27230 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
27240 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
27250 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
27260 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
27270 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
27280 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
27290 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
272a0 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
272b0 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
272c0 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
272d0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
272e0 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
272f0 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
27300 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
27310 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
27320 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
27330 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
27340 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
27350 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
27360 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
27370 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
27380 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
27390 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
273a0 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  , db, "too many 
273b0 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
273c0 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
273d0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
273e0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
273f0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
27400 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
27410 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
27420 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
27430 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
27440 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
27450 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
27460 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
27470 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
27480 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
27490 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
274a0 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
274b0 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
274c0 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
274d0 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
274e0 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
274f0 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
27500 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
27510 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
27520 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
27530 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
27540 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
27550 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
27560 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
27570 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
27580 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
27590 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
275a0 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
275b0 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
275c0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
275d0 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
275e0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
275f0 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
27600 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
27610 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
27620 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
27630 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
27640 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
27650 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
27660 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
27670 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
27680 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
27690 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
276a0 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
276b0 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
276c0 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
276d0 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
276e0 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b  f(VdbeCursor *);
276f0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
27700 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
27710 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
27720 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
27730 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
27740 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
27750 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
27760 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
27770 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
27780 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
27790 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
277a0 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
277b0 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
277c0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
277d0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
277e0 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
277f0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
27800 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b  pFrame->pc = pc;
27810 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
27820 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
27830 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
27840 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
27850 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
27860 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
27870 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
27880 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
27890 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
278a0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
278b0 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
278c0 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
278d0 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
278e0 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  ;..    pEnd = &V
278f0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
27900 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
27910 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
27920 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
27930 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
27940 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
27950 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
27960 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
27970 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
27980 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
27990 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
279a0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
279b0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
279c0 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
279d0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
279e0 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20  >nChildMem );.  
279f0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
27a00 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
27a10 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
27a20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70     assert( pc==p
27a30 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
27a40 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
27a50 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
27a60 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
27a70 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
27a80 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
27a90 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
27aa0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
27ab0 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
27ac0 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
27ad0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
27ae0 2d 3e 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72  ->aMem = &VdbeFr
27af0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d  ameMem(pFrame)[-
27b00 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  1];.  p->nMem = 
27b10 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
27b20 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
27b30 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
27b40 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
27b50 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
27b60 6f 72 20 2a 2a 29 26 70 2d 3e 61 4d 65 6d 5b 70  or **)&p->aMem[p
27b70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
27b80 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  aOp = pProgram->
27b90 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20  aOp;.  p->nOp = 
27ba0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20  pProgram->nOp;. 
27bb0 20 70 63 20 3d 20 2d 31 3b 0a 0a 20 20 62 72 65   pc = -1;..  bre
27bc0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27bd0 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
27be0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
27bf0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
27c00 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
27c10 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
27c20 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
27c30 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
27c40 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
27c50 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
27c60 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
27c70 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
27c80 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
27c90 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
27ca0 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
27cb0 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
27cc0 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
27cd0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
27ce0 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
27cf0 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
27d00 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
27d10 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
27d20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
27d30 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
27d40 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
27d50 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
27d60 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
27d70 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
27d80 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
27d90 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
27da0 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
27db0 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
27dc0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
27dd0 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
27de0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
27df0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
27e00 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
27e10 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
27e20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
27e30 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
27e40 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
27e50 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
27e60 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
27e70 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
27e80 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
27e90 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
27ea0 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
27eb0 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
27ec0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27ed0 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
27ee0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27ef0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
27f00 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
27f10 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
27f20 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
27f30 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
27f40 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
27f50 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
27f60 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
27f70 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
27f80 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
27f90 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
27fa0 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
27fb0 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
27fc0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
27fd0 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
27fe0 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
27ff0 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
28000 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
28010 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
28020 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
28030 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
28040 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
28050 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
28060 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
28070 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
28080 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
28090 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
280a0 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
280b0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
280c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
280d0 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
280e0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
280f0 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
28100 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
28110 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
28120 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
28130 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
28140 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
28150 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
28160 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
28170 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
28180 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
28190 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
281a0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
281b0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
281c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
281d0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
281e0 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
281f0 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
28200 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
28210 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
28220 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
28230 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
28240 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
28250 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
28260 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
28270 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
28280 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
28290 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
282a0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
282b0 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
282c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
282d0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
282e0 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
282f0 72 72 65 64 43 6f 6e 73 3d 3d 30 20 29 20 70 63  rredCons==0 ) pc
28300 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
28310 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70  }else{.    if( p
28320 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
28330 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  =0 ) pc = pOp->p
28340 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
28350 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  ;.}.#endif /* #i
28360 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28370 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f  T_FOREIGN_KEY */
28380 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28390 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
283a0 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
283b0 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
283c0 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  *.**.** P1 is a 
283d0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
283e0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
283f0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
28400 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
28410 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
28420 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
28430 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
28440 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
28450 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
28460 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
28470 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
28480 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
28490 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
284a0 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
284b0 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
284c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
284d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
284e0 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
284f0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
28500 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
28510 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
28520 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
28530 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
28540 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
28550 20 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56    Mem *pIn1;.  V
28560 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
28570 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
28580 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
28590 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
285a0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
285b0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
285c0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
285d0 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
285e0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
285f0 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
28600 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
28610 5d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  ];.  }.  sqlite3
28620 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
28630 79 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  y(pIn1);.  sqlit
28640 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
28650 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
28660 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
28670 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
28680 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
28690 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
286a0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
286b0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
286c0 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
286d0 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
286e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
286f0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
28700 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
28710 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
28720 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73   P2..**.** It is
28730 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
28740 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
28750 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
28760 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
28770 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
28780 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
28790 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
287a0 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
287b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
287c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
287d0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73  mp, in1 */.  ass
287e0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
287f0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
28800 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
28810 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
28820 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
28830 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28840 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a  e: IfNeg P1 P2 *
28850 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
28860 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
28870 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
28880 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
28890 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
288a0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
288b0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
288c0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
288d0 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
288e0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
288f0 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
28900 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
28910 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
28920 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
28930 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  eg: {        /* 
28940 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61  jump, in1 */.  a
28950 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
28960 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
28970 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20  if( pIn1->u.i<0 
28980 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
28990 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
289a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
289b0 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50  ode: IfZero P1 P
289c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
289d0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
289e0 67 69 73 74 65 72 20 50 31 20 69 73 20 65 78 61  gister P1 is exa
289f0 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20  ctly 0, jump to 
28a00 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  P2. .**.** It is
28a10 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
28a20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
28a30 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
28a40 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
28a50 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
28a60 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
28a70 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
28a80 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
28a90 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72  */.case OP_IfZer
28aa0 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
28ab0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73  ump, in1 */.  as
28ac0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
28ad0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
28ae0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
28af0 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
28b00 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
28b10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28b20 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50  ode: AggStep * P
28b30 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
28b40 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
28b50 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
28b60 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
28b70 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
28b80 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
28b90 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
28ba0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
28bb0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
28bc0 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
28bd0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
28be0 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
28bf0 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
28c00 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
28c10 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
28c20 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
28c30 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
28c40 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
28c50 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
28c60 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
28c70 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   i;.  Mem *pMem;
28c80 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20  .  Mem *pRec;.  
28c90 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
28ca0 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
28cb0 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
28cc0 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
28cd0 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
28ce0 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65    pRec = &p->aMe
28cf0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
28d00 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
28d10 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
28d20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
28d30 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
28d40 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pRec++){.    apV
28d50 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
28d60 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28d70 53 74 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b  StoreType(pRec);
28d80 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63  .  }.  ctx.pFunc
28d90 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
28da0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28db0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
28dc0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63  <=p->nMem );.  c
28dd0 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
28de0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
28df0 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
28e00 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
28e10 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
28e20 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e  .s.z = 0;.  ctx.
28e30 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  s.zMalloc = 0;. 
28e40 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
28e50 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
28e60 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ;.  ctx.isError 
28e70 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c  = 0;.  ctx.pColl
28e80 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
28e90 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
28ea0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
28eb0 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
28ec0 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
28ed0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
28ee0 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
28ef0 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
28f00 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
28f10 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
28f20 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
28f30 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
28f40 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
28f50 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
28f60 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
28f70 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
28f80 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
28f90 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
28fa0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
28fb0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
28fc0 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
28fd0 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
28fe0 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
28ff0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
29000 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61  (&ctx.s);.  brea
29010 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29020 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
29030 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  * P4 *.**.** Exe
29040 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
29050 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
29060 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
29070 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
29080 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
29090 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
290a0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
290b0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
290c0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
290d0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
290e0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
290f0 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
29100 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
29110 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
29120 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
29130 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
29140 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
29150 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
29160 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
29170 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
29180 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
29190 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
291a0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
291b0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
291c0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
291d0 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
291e0 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
291f0 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
29200 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
29210 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
29220 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
29230 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
29240 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
29250 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29260 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
29270 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d  =p->nMem );.  pM
29280 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
29290 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
292a0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
292b0 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
292c0 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
292d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
292e0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
292f0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
29300 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
29310 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
29320 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
29330 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
29340 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
29350 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
29360 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
29370 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e  ng(pMem, encodin
29380 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
29390 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b  _BLOBSIZE(pMem);
293a0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
293b0 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d  beMemTooBig(pMem
293c0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
293d0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
293e0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66  ak;.}...#if !def
293f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29400 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
29410 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29420 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
29430 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a  de: Vacuum * * *
29440 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
29450 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
29460 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63  abase.  This opc
29470 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f  ode will cause o
29480 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  ther virtual.** 
29490 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63  machines to be c
294a0 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20  reated and run. 
294b0 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63   It may not be c
294c0 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
294d0 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69  n.** a transacti
294e0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
294f0 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73  acuum: {.  if( s
29500 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
29510 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
29520 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20  _due_to_misuse; 
29530 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
29540 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
29550 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28  rMsg, db);.  if(
29560 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
29570 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
29580 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
29590 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
295a0 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  if..#if !defined
295b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
295c0 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f  OVACUUM)./* Opco
295d0 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50  de: IncrVacuum P
295e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
295f0 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c   Perform a singl
29600 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e  e step of the in
29610 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
29620 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a   procedure on.**
29630 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65   the P1 database
29640 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20  . If the vacuum 
29650 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75  has finished, ju
29660 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
29670 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69  n.** P2. Otherwi
29680 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
29690 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
296a0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
296b0 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a  e OP_IncrVacuum:
296c0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
296d0 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  p */.  Btree *pB
296e0 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
296f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29700 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
29710 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
29720 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
29730 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
29740 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
29750 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
29760 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
29770 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
29780 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
29790 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d  DONE ){.    pc =
297a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
297b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
297c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
297d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
297e0 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
297f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
29800 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
29810 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f  atements to beco
29820 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65  me expired. An e
29830 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
29840 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61  .** fails with a
29850 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20  n error code of 
29860 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66  SQLITE_SCHEMA if
29870 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63   it is ever exec
29880 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71  uted .** (via sq
29890 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a  lite3_step())..*
298a0 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
298b0 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
298c0 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
298d0 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
298e0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
298f0 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
29900 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
29910 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  g statement is a
29920 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73  ffected. .*/.cas
29930 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20  e OP_Expire: {. 
29940 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b   if( !pOp->p1 ){
29950 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
29960 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
29970 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73  ents(db);.  }els
29980 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
29990 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 1;.  }.  bre
299a0 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
299b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
299c0 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64  D_CACHE./* Opcod
299d0 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20  e: TableLock P1 
299e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
299f0 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
29a00 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
29a10 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
29a20 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
29a30 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
29a40 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
29a50 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
29a60 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
29a70 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
29a80 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
29a90 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
29aa0 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
29ab0 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
29ac0 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
29ad0 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
29ae0 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
29af0 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
29b00 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
29b10 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
29b20 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
29b30 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
29b40 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
29b50 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
29b60 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
29b70 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
29b80 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
29b90 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
29ba0 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
29bb0 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
29bc0 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
29bd0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
29be0 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
29bf0 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
29c00 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
29c10 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
29c20 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
29c30 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
29c40 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e  itted) ){.    in
29c50 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20  t p1 = pOp->p1; 
29c60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
29c70 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
29c80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
29c90 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
29ca0 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20  (1<<p1))!=0 );. 
29cb0 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69     assert( isWri
29cc0 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
29cd0 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
29ce0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
29cf0 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62  treeLockTable(db
29d00 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70  ->aDb[p1].pBt, p
29d10 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c  Op->p2, isWriteL
29d20 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72  ock);.    if( (r
29d30 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  c&0xFF)==SQLITE_
29d40 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
29d50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
29d60 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
29d70 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29d80 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29d90 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  b, "database tab
29da0 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
29db0 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ", z);.    }.  }
29dc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
29dd0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
29de0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a  T_SHARED_CACHE *
29df0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
29e00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29e10 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
29e20 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  Begin * * * P4 *
29e30 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
29e40 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
29e50 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
29e60 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20  ructure. If so, 
29e70 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65  call the .** xBe
29e80 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  gin method for t
29e90 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  hat table..**.**
29ea0 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f   Also, whether o
29eb0 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c  r not P4 is set,
29ec0 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73   check that this
29ed0 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61   is not being ca
29ee0 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74  lled from.** wit
29ef0 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  hin a callback t
29f00 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
29f10 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64  e xSync() method
29f20 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20  . If it is, the 
29f30 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69  error.** code wi
29f40 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  ll be set to SQL
29f50 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
29f60 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
29f70 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
29f80 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d  ;.  pVTab = pOp-
29f90 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
29fa0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
29fb0 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20  in(db, pVTab);. 
29fc0 20 69 66 28 20 70 56 54 61 62 20 29 7b 0a 20 20   if( pVTab ){.  
29fd0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
29fe0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
29ff0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
2a000 3d 20 70 56 54 61 62 2d 3e 70 56 74 61 62 2d 3e  = pVTab->pVtab->
2a010 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 54  zErrMsg;.    pVT
2a020 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ab->pVtab->zErrM
2a030 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  sg = 0;.  }.  br
2a040 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2a050 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2a060 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2a070 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a080 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2a090 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2a0a0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2a0b0 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2a0c0 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2a0d0 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2a0e0 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2a0f0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2a100 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2a110 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2a120 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2a130 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2a140 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2a150 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2a160 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2a170 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2a180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a190 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2a1a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a1b0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2a1c0 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2a1d0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2a1e0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2a1f0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2a200 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2a210 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2a220 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2a230 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2a240 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2a250 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2a260 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2a270 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2a280 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2a290 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2a2a0 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2a2b0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2a2c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2a2d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2a2e0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2a2f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a300 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2a310 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2a320 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2a330 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2a340 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2a350 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2a360 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2a370 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2a380 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2a390 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2a3a0 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2a3b0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2a3c0 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2a3d0 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2a3e0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2a3f0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2a400 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2a410 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2a420 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2a430 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2a440 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2a450 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2a460 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a  e;..  pCur = 0;.
2a470 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2a480 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
2a490 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2a4a0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2a4b0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2a4c0 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2a4d0 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
2a4e0 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69  && pModule);.  i
2a4f0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2a500 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
2a510 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2a520 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  se;.  rc = pModu
2a530 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
2a540 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a   &pVtabCursor);.
2a550 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2a560 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
2a570 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
2a580 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2a590 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
2a5a0 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
2a5b0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
2a5c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a5d0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66  _to_misuse;.  if
2a5e0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
2a5f0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
2a600 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
2a610 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
2a620 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
2a630 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
2a640 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
2a650 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63  nitialise vdbe c
2a660 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
2a670 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
2a680 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
2a690 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
2a6a0 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
2a6b0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
2a6c0 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
2a6d0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
2a6e0 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
2a6f0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2a700 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
2a710 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2a720 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2a730 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
2a740 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
2a750 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2a760 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2a770 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2a780 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2a790 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2a7a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2a7b0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
2a7c0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
2a7d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  4 *.**.** P1 is 
2a7e0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
2a7f0 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
2a800 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
2a810 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
2a820 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
2a830 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
2a840 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
2a850 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
2a860 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
2a870 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
2a880 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
2a890 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2a8a0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
2a8b0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
2a8c0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
2a8d0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
2a8e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2a8f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a900 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2a910 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
2a920 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
2a930 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
2a940 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
2a950 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
2a960 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
2a970 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
2a980 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
2a990 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
2a9a0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
2a9b0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
2a9c0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
2a9d0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
2a9e0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
2a9f0 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
2aa00 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
2aa10 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
2aa20 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
2aa30 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
2aa40 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
2aa50 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
2aa60 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
2aa70 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
2aa80 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
2aa90 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
2aaa0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
2aab0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
2aac0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
2aad0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
2aae0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2aaf0 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
2ab00 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
2ab10 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2ab20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
2ab30 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
2ab40 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
2ab50 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2ab60 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2ab70 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2ab80 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2ab90 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
2aba0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2abb0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
2abc0 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ry = &p->aMem[pO
2abd0 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
2abe0 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
2abf0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
2ac00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45 47 49  pOp->p1];.  REGI
2ac10 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2ac20 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
2ac30 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2ac40 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
2ac50 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
2ac60 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
2ac70 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
2ac80 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2ac90 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2aca0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
2acb0 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
2acc0 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
2acd0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
2ace0 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
2acf0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
2ad00 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
2ad10 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
2ad20 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
2ad30 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
2ad40 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
2ad50 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
2ad60 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2ad70 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  hod */.  {.    r
2ad80 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72  es = 0;.    apAr
2ad90 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
2ada0 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
2adb0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
2adc0 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
2add0 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73  gc[i+1];.      s
2ade0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2adf0 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d 29  reType(apArg[i])
2ae00 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
2ae10 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
2ae20 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
2ae30 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2ae40 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2ae50 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72  ethod = 1;.    r
2ae60 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
2ae70 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72  lter(pVtabCursor
2ae80 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
2ae90 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
2aea0 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  );.    p->inVtab
2aeb0 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20  Method = 0;.    
2aec0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2aed0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2aee0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
2aef0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2af00 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
2af10 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
2af20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2af30 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
2af40 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
2af50 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2af60 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
2af70 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
2af80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2af90 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20  isuse;..    if( 
2afa0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
2afb0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2afc0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
2afd0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
2afe0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2aff0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2b000 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2b010 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b020 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2b030 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
2b040 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
2b050 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
2b060 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2b070 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
2b080 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
2b090 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
2b0a0 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
2b0b0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
2b0c0 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
2b0d0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
2b0e0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
2b0f0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2b100 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2b110 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2b120 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
2b130 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
2b140 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
2b150 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2b160 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2b170 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2b180 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2b190 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
2b1a0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2b1b0 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
2b1c0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e  ;.  pDest = &p->
2b1d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2b1e0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
2b1f0 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
2b200 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2b210 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
2b220 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
2b230 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2b240 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
2b250 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
2b260 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
2b270 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
2b280 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n );.  memset(&s
2b290 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65  Context, 0, size
2b2a0 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a  of(sContext));..
2b2b0 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
2b2c0 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
2b2d0 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
2b2e0 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
2b2f0 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
2b300 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e  contents to sCon
2b310 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73  text.s so in cas
2b320 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  e the user-funct
2b330 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73  ion .  ** can us
2b340 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c  e the already al
2b350 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69  located buffer i
2b360 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61  nstead of alloca
2b370 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77  ting a .  ** new
2b380 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   one..  */.  sql
2b390 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
2b3a0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65  &sContext.s, pDe
2b3b0 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  st);.  MemSetTyp
2b3c0 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e  eFlag(&sContext.
2b3d0 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
2b3e0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2b3f0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
2b400 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2b410 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  suse;.  rc = pMo
2b420 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
2b430 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  ur->pVtabCursor,
2b440 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
2b450 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  >p2);.  sqlite3D
2b460 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
2b470 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
2b480 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
2b490 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
2b4a0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66  ErrMsg = 0;.  if
2b4b0 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
2b4c0 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  or ){.    rc = s
2b4d0 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b  Context.isError;
2b4e0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  .  }..  /* Copy 
2b4f0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
2b500 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
2b510 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57  e P3 register. W
2b520 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72  e.  ** do this r
2b530 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
2b540 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
2b550 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f  rror occurred to
2b560 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a   ensure any.  **
2b570 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74   dynamic allocat
2b580 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e  ion in sContext.
2b590 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29  s (a Mem struct)
2b5a0 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20   is  released.. 
2b5b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
2b5c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2b5d0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63  &sContext.s, enc
2b5e0 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
2b5f0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
2b600 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69  , pDest);.  sqli
2b610 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2b620 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2b630 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  s);.  UPDATE_MAX
2b640 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
2b650 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
2b660 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a  SafetyOn(db) ){.
2b670 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2b680 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
2b690 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
2b6a0 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
2b6b0 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
2b6c0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
2b6d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2b6e0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2b6f0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2b700 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b710 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2b720 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
2b730 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2b740 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
2b750 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
2b760 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
2b770 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
2b780 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
2b790 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
2b7a0 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
2b7b0 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
2b7c0 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
2b7d0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
2b7e0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2b7f0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2b800 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2b810 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
2b820 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
2b830 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2b840 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2b850 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2b860 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
2b870 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2b880 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
2b890 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2b8a0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2b8b0 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2b8c0 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
2b8d0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
2b8e0 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
2b8f0 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2b900 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2b910 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2b920 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2b930 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2b940 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
2b950 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
2b960 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
2b970 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
2b980 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
2b990 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
2b9a0 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
2b9b0 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
2b9c0 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
2b9d0 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
2b9e0 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
2b9f0 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
2ba00 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
2ba10 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
2ba20 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
2ba30 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
2ba40 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
2ba50 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
2ba60 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
2ba70 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
2ba80 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
2ba90 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
2baa0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
2bab0 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  rsor..  */.  if(
2bac0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
2bad0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
2bae0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2baf0 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
2bb00 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  hod = 1;.  rc = 
2bb10 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
2bb20 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2bb30 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
2bb40 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69  thod = 0;.  sqli
2bb50 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
2bb60 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
2bb70 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
2bb80 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
2bb90 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
2bba0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2bbb0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
2bbc0 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
2bbd0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2bbe0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
2bbf0 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
2bc00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2bc10 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20  e_to_misuse;..  
2bc20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
2bc30 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
2bc40 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
2bc50 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
2bc60 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2bc70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2bc80 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2bc90 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2bca0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bcb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2bcc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
2bcd0 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
2bce0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2bcf0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2bd00 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2bd10 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2bd20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2bd30 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2bd40 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2bd50 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
2bd60 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
2bd70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
2bd80 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
2bd90 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
2bda0 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
2bdb0 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
2bdc0 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
2bdd0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2bde0 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
2bdf0 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2be00 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2be10 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 70 2d  b;.  pName = &p-
2be20 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
2be30 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
2be40 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2be50 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
2be60 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
2be70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28  Name);.  assert(
2be80 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20   pName->flags & 
2be90 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66 28  MEM_Str );.  if(
2bea0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
2beb0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
2bec0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2bed0 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e  ;.  rc = pVtab->
2bee0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2bef0 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
2bf00 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
2bf10 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2bf20 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
2bf30 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
2bf40 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
2bf50 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73  Msg = 0;.  if( s
2bf60 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
2bf70 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2bf80 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
2bf90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2bfa0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2bfb0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2bfc0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2bfd0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
2bfe0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2bff0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2c000 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2c010 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2c020 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2c030 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c040 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
2c050 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
2c060 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
2c070 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
2c080 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
2c090 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
2c0a0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
2c0b0 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
2c0c0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
2c0d0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
2c0e0 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
2c0f0 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
2c100 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
2c110 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
2c120 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
2c130 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
2c140 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
2c150 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
2c160 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
2c170 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
2c180 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
2c190 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
2c1a0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
2c1b0 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
2c1c0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
2c1d0 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
2c1e0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
2c1f0 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
2c200 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
2c210 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
2c220 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
2c230 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
2c240 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
2c250 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
2c260 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
2c270 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
2c280 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
2c290 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
2c2a0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
2c2b0 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
2c2c0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
2c2d0 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
2c2e0 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
2c2f0 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
2c300 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
2c310 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
2c320 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
2c330 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
2c340 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
2c350 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
2c360 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
2c370 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
2c380 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
2c390 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
2c3a0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
2c3b0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
2c3c0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
2c3d0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2c3e0 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
2c3f0 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
2c400 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erted..*/.case O
2c410 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73  P_VUpdate: {.  s
2c420 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2c430 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f  ab;.  sqlite3_mo
2c440 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2c450 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
2c460 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
2c470 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20  64 rowid;.  Mem 
2c480 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a  **apArg;.  Mem *
2c490 70 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  pX;..  pVtab = p
2c4a0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2c4b0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2c4c0 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2c4d0 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2c4e0 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
2c4f0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
2c500 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
2c510 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
2c520 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
2c530 64 61 74 65 29 20 29 7b 0a 20 20 20 20 61 70 41  date) ){.    apA
2c540 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2c550 20 20 20 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d     pX = &p->aMem
2c560 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66  [pOp->p3];.    f
2c570 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
2c580 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
2c590 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
2c5a0 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20 61  ype(pX);.      a
2c5b0 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
2c5c0 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
2c5d0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
2c5e0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
2c5f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c600 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20  _misuse;.    rc 
2c610 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  = pModule->xUpda
2c620 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20  te(pVtab, nArg, 
2c630 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a  apArg, &rowid);.
2c640 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2c650 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2c660 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
2c670 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
2c680 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
2c690 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
2c6a0 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2c6b0 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
2c6c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2c6d0 73 65 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  se;.    if( rc==
2c6e0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
2c6f0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
2c700 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
2c710 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
2c720 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
2c730 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
2c740 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
2c750 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
2c760 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
2c770 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2c780 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2c790 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2c7a0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51   */..#ifndef  SQ
2c7b0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2c7c0 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
2c7d0 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20  e: Pagecount P1 
2c7e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
2c7f0 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
2c800 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2c810 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   in database P1 
2c820 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2c830 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  2..*/.case OP_Pa
2c840 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  gecount: {      
2c850 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2c860 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
2c870 74 20 70 31 3b 0a 20 20 69 6e 74 20 6e 50 61 67  t p1;.  int nPag
2c880 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  e;.  Pager *pPag
2c890 65 72 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  er;..  p1 = pOp-
2c8a0 3e 70 31 3b 20 0a 20 20 70 50 61 67 65 72 20 3d  >p1; .  pPager =
2c8b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2c8c0 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  er(db->aDb[p1].p
2c8d0 42 74 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  Bt);.  rc = sqli
2c8e0 74 65 33 50 61 67 65 72 50 61 67 65 63 6f 75 6e  te3PagerPagecoun
2c8f0 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61 67 65  t(pPager, &nPage
2c900 29 3b 0a 20 20 2f 2a 20 4f 50 5f 50 61 67 65 63  );.  /* OP_Pagec
2c910 6f 75 6e 74 20 69 73 20 61 6c 77 61 79 73 20 63  ount is always c
2c920 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
2c930 6e 20 61 20 72 65 61 64 20 74 72 61 6e 73 61 63  n a read transac
2c940 74 69 6f 6e 2e 20 20 54 68 65 0a 20 20 2a 2a 20  tion.  The.  ** 
2c950 70 61 67 65 20 63 6f 75 6e 74 20 68 61 73 20 61  page count has a
2c960 6c 72 65 61 64 79 20 62 65 65 6e 20 73 75 63 63  lready been succ
2c970 65 73 73 66 75 6c 6c 79 20 72 65 61 64 20 61 6e  essfully read an
2c980 64 20 63 61 63 68 65 64 2e 20 20 53 6f 20 74 68  d cached.  So th
2c990 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 50 61  e.  ** sqlite3Pa
2c9a0 67 65 72 50 61 67 65 63 6f 75 6e 74 28 29 20 63  gerPagecount() c
2c9b0 61 6c 6c 20 61 62 6f 76 65 20 63 61 6e 6e 6f 74  all above cannot
2c9c0 20 66 61 69 6c 2e 20 2a 2f 0a 20 20 69 66 28 20   fail. */.  if( 
2c9d0 41 4c 57 41 59 53 28 72 63 3d 3d 53 51 4c 49 54  ALWAYS(rc==SQLIT
2c9e0 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 70 4f 75  E_OK) ){.    pOu
2c9f0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
2ca00 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
2ca10 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20  i = nPage;.  }. 
2ca20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2ca30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ca40 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f  _OMIT_TRACE./* O
2ca50 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a  pcode: Trace * *
2ca60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66   * P4 *.**.** If
2ca70 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
2ca80 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
2ca90 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
2caa0 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
2cab0 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
2cac0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
2cad0 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
2cae0 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
2caf0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  k..*/.case OP_Tr
2cb00 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ace: {.  char *z
2cb10 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65  Trace;..  zTrace
2cb20 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
2cb30 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
2cb40 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
2cb50 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  ce ){.    if( db
2cb60 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ->xTrace ){.    
2cb70 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d    db->xTrace(db-
2cb80 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 54 72 61  >pTraceArg, zTra
2cb90 63 65 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65  ce);.    }.#ifde
2cba0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2cbb0 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67     if( (db->flag
2cbc0 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
2cbd0 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ace)!=0 ){.     
2cbe0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
2cbf0 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
2cc00 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a  %s\n", zTrace);.
2cc10 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
2cc20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2cc30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2cc40 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  endif.../* Opcod
2cc50 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
2cc60 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
2cc70 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
2cc80 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
2cc90 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
2cca0 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
2ccb0 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
2ccc0 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
2ccd0 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
2cce0 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
2ccf0 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
2cd00 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
2cd10 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
2cd20 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
2cd30 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
2cd40 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
2cd50 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
2cd60 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
2cd70 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
2cd80 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
2cd90 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
2cda0 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
2cdb0 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
2cdc0 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
2cdd0 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
2cde0 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
2cdf0 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
2ce00 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  */.  break;.}../
2ce10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ce20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ce30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ce40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ce50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
2ce60 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
2ce70 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
2ce80 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
2ce90 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
2cea0 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
2ceb0 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
2cec0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
2ced0 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
2cee0 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
2cef0 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
2cf00 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
2cf10 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
2cf20 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
2cf30 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
2cf40 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
2cf50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
2cfa0 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
2cfb0 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
2cfc0 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64       u64 elapsed
2cfd0 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
2cfe0 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  () - start;.    
2cff0 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d    pOp->cycles +=
2d000 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20   elapsed;.      
2d010 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20  pOp->cnt++;.#if 
2d020 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74  0.        fprint
2d030 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c  f(stdout, "%10ll
2d040 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20  u ", elapsed);. 
2d050 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d060 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
2d070 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f  , origPc, &p->aO
2d080 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64  p[origPc]);.#end
2d090 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  if.    }.#endif.
2d0a0 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
2d0b0 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
2d0c0 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
2d0d0 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
2d0e0 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
2d0f0 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
2d100 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
2d110 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
2d120 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
2d130 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
2d140 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
2d150 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
2d160 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
2d170 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
2d180 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
2d190 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
2d1a0 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
2d1b0 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
2d1c0 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
2d1d0 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
2d1e0 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
2d1f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2d200 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
2d210 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
2d220 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e  f( rc!=0 ) fprin
2d230 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d  tf(p->trace,"rc=
2d240 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
2d250 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20   if( opProperty 
2d260 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
2d270 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
2d280 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
2d290 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
2d2a0 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
2d2b0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50   }.      if( opP
2d2c0 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
2d2d0 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20  OUT3 ){.        
2d2e0 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
2d2f0 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c  >trace, pOp->p3,
2d300 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a   pOut);.      }.
2d310 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a      }.#endif  /*
2d320 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
2d330 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42  .#endif  /* NDEB
2d340 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68  UG */.  }  /* Th
2d350 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72  e end of the for
2d360 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f  (;;) loop the lo
2d370 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f  ops through opco
2d380 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  des */..  /* If 
2d390 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  we reach this po
2d3a0 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  int, it means th
2d3b0 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  at execution is 
2d3c0 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20  finished with.  
2d3d0 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73  ** an error of s
2d3e0 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76  ome kind..  */.v
2d3f0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a  dbe_error_halt:.
2d400 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a    assert( rc );.
2d410 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
2d420 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
2d430 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
2d440 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
2d450 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
2d460 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
2d470 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20  SQLITE_ERROR;.. 
2d480 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
2d490 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
2d4a0 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
2d4b0 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
2d4c0 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
2d4d0 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
2d4e0 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
2d4f0 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
2d500 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
2d510 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  n:.  sqlite3Btre
2d520 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76 65  eMutexArrayLeave
2d530 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20  (&p->aMutex);.  
2d540 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
2d550 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
2d560 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
2d570 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
2d580 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
2d590 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
2d5a0 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
2d5b0 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  g:.  sqlite3SetS
2d5c0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2d5d0 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f  g, db, "string o
2d5e0 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
2d5f0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2d600 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
2d610 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2d620 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2d630 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
2d640 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
2d650 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
2d660 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
2d670 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2d680 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2d690 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
2d6a0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2d6b0 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
2d6c0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2d6d0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2d6e0 72 65 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45  re for an SQLITE
2d6f0 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20  _MISUSE error.. 
2d700 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
2d710 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20  _misuse:.  rc = 
2d720 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
2d730 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e   /* Fall thru in
2d740 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2d750 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a  error */..  /* J
2d760 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
2d770 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
2d780 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
2d790 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
2d7a0 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
2d7b0 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
2d7c0 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
2d7d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
2d7e0 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
2d7f0 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
2d800 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2d810 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
2d820 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
2d830 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
2d840 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
2d850 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2d860 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2d870 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
2d880 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
2d890 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2d8a0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d8b0 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
2d8c0 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
2d8d0 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
2d8e0 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
2d8f0 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
2d900 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
2d910 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
2d920 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
2d930 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
2d940 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
2d950 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
2d960 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2d970 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2d980 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
2d990 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
2d9a0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.