/ Hex Artifact Content
Login

Artifact f0d6e7dbd4515758c188c9dd7025eb9dfcf021e0:


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 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
1ec60 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
1ec70 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
1ec80 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
1ec90 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
1eca0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
1ecb0 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
1ecc0 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
1ecd0 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
1ece0 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
1ecf0 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1ed00 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67      /* The integ
1ed10 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20  er ROWID or key 
1ed20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
1ed30 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
1ed40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ed50 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74  C;   /* Cursor t
1ed60 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69  o table into whi
1ed70 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69  ch insert is wri
1ed80 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  tten */.  int nZ
1ed90 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ero;        /* N
1eda0 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79  umber of zero-by
1edb0 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f  tes to append */
1edc0 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c  .  int seekResul
1edd0 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f  t;   /* Result o
1ede0 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20  f prior seek or 
1edf0 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52  0 if no USESEEKR
1ee00 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20  ESULT flag */.  
1ee10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
1ee20 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61    /* database na
1ee30 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
1ee40 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   update hook */.
1ee50 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1ee60 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d  bl; /* Table nam
1ee70 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
1ee80 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  opdate hook */. 
1ee90 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
1eea0 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72     /* Opcode for
1eeb0 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51   update hook: SQ
1eec0 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53  LITE_UPDATE or S
1eed0 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a  QLITE_INSERT */.
1eee0 0a 20 20 70 44 61 74 61 20 3d 20 26 70 2d 3e 61  .  pData = &p->a
1eef0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1ef00 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pKey = &p->aMem[
1ef10 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1ef20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ef30 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ef40 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ef50 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ef60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ef70 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ef80 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1ef90 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1efa0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1efb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
1efc0 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
1efd0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1efe0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1eff0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1f000 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
1f010 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1f020 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
1f030 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 70 4b 65  );..  iKey = pKe
1f040 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 4f  y->u.i;.  if( pO
1f050 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
1f060 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1f070 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
1f080 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
1f090 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
1f0a0 73 74 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e  stRowid = pKey->
1f0b0 75 2e 69 3b 0a 20 20 69 66 28 20 70 44 61 74 61  u.i;.  if( pData
1f0c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
1f0d0 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d  ll ){.    pData-
1f0e0 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74  >z = 0;.    pDat
1f0f0 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  a->n = 0;.  }els
1f100 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
1f110 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
1f120 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
1f130 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65   );.  }.  seekRe
1f140 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35  sult = ((pOp->p5
1f150 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
1f160 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
1f170 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a  eekResult : 0);.
1f180 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1f190 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1f1a0 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61  .    nZero = pDa
1f1b0 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
1f1c0 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  else{.    nZero 
1f1d0 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 0;.  }.  sqlit
1f1e0 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
1f1f0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1f200 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
1f210 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
1f220 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1f230 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
1f260 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
1f290 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73  OPFLAG_APPEND, s
1f2a0 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
1f2b0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1f2c0 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66  d = 0;.  pC->def
1f2d0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f2e0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1f2f0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1f300 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
1f310 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
1f320 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
1f330 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1f340 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
1f350 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
1f360 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44  ->p4.z ){.    zD
1f370 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1f380 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1f390 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1f3a0 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
1f3b0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
1f3c0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
1f3d0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
1f3e0 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
1f3f0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f400 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
1f410 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1f420 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
1f430 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
1f440 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1f450 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
1f460 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f470 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
1f480 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1f490 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
1f4a0 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
1f4b0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
1f4c0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1f4d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73  ..**.** The curs
1f4e0 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
1f4f0 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68  pointing at eith
1f500 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
1f510 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
1f520 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
1f530 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
1f540 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1f550 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
1f560 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
1f570 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1f580 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
1f590 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f  .  Hence it is O
1f5a0 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61  K to delete.** a
1f5b0 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
1f5c0 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70  hin an Next loop
1f5d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1f5e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1f5f0 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
1f600 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1f610 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1f620 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1f630 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
1f640 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
1f650 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
1f660 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
1f670 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
1f680 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
1f690 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
1f6a0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1f6b0 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
1f6c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1f6d0 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
1f6e0 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
1f6f0 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
1f700 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
1f710 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
1f720 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
1f730 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
1f740 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
1f750 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
1f760 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
1f770 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
1f780 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1f790 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
1f7a0 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20   {.  i64 iKey;. 
1f7b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f7c0 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20  ..  iKey = 0;.  
1f7d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f7e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f7f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1f800 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1f810 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1f820 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1f830 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1f840 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
1f850 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
1f860 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
1f870 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
1f880 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1f890 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
1f8a0 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68  , set iKey to th
1f8b0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20  e rowid of the. 
1f8c0 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65   ** row being de
1f8d0 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  leted..  */.  if
1f8e0 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
1f8f0 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1f900 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
1f910 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1f920 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1f930 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
1f940 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
1f950 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
1f960 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
1f970 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
1f980 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f  tRowid;.  }..  /
1f990 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20  * The OP_Delete 
1f9a0 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f  opcode always fo
1f9b0 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45  llows an OP_NotE
1f9c0 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74  xists or OP_Last
1f9d0 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75   or.  ** OP_Colu
1f9e0 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  mn on the same t
1f9f0 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79  able without any
1fa00 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65   intervening ope
1fa10 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a  rations that.  *
1fa20 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20  * might move or 
1fa30 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
1fa40 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75  ursor.  Hence cu
1fa50 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79  rsor pC is alway
1fa60 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20  s pointing.  ** 
1fa70 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  to the row to be
1fa80 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
1fa90 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1faa0 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61  orMoveto() opera
1fab0 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20  tion.  ** below 
1fac0 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f  is always a no-o
1fad0 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69  p and cannot fai
1fae0 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20  l.  We will run 
1faf0 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67  it anyhow, thoug
1fb00 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64  h,.  ** to guard
1fb10 20 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20   against future 
1fb20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63  changes to the c
1fb30 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20  ode generator.. 
1fb40 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70   **/.  assert( p
1fb50 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1fb60 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  o==0 );.  rc = s
1fb70 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1fb80 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
1fb90 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
1fba0 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
1fbb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fbc0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1fbd0 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1fbe0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1fbf0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1fc00 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
1fc10 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
1fc20 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1fc30 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1fc40 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1fc50 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1fc60 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1fc70 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1fc80 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1fc90 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1fca0 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1fcb0 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1fcc0 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1fcd0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1fce0 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1fcf0 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1fd00 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
1fd10 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
1fd20 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54  _DELETE, zDb, zT
1fd30 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
1fd40 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
1fd50 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  0 );.  }.  if( p
1fd60 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1fd70 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
1fd80 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ange++;.  break;
1fd90 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
1fda0 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
1fdb0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
1fdc0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
1fdd0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
1fde0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
1fdf0 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
1fe00 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
1fe10 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
1fe20 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
1fe30 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
1fe40 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
1fe50 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
1fe60 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
1fe70 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
1fe80 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
1fe90 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
1fea0 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
1feb0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
1fec0 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
1fed0 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
1fee0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
1fef0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ff00 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
1ff10 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1ff20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
1ff30 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
1ff40 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72  ete row data for
1ff50 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1ff60 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
1ff70 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
1ff80 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69   data.  .** It i
1ff90 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e  s just copied on
1ffa0 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
1ffb0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
1ffc0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
1ffd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1ffe0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
1fff0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
20000 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
20010 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
20020 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
20030 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
20040 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
20050 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  le..*/./* Opcode
20060 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a  : RowKey P1 P2 *
20070 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
20080 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
20090 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
200a0 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
200b0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
200c0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
200d0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
200e0 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
200f0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
20100 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78 61   P3 register exa
20110 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
20120 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
20130 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
20140 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
20150 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
20160 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
20170 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
20180 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
20190 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
201a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
201b0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
201c0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
201d0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
201e0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
201f0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
20200 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
20210 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
20220 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p2];..  /* 
20230 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
20240 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
20250 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
20260 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
20270 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
20280 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
20290 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
202a0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
202b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
202c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
202d0 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
202e0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20  code==OP_RowKey 
202f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20300 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d  >isIndex || pOp-
20310 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44  >opcode==OP_RowD
20320 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
20330 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
20340 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
20350 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20360 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
20370 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
20380 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
20390 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
203a0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
203b0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
203c0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
203d0 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20  pCrsr) );..  /* 
203e0 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e  The OP_RowKey an
203f0 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  d OP_RowData opc
20400 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
20410 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
20420 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e  or.  ** OP_Rewin
20430 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
20440 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
20450 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20  structions that 
20460 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
20470 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  .  ** the cursor
20480 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c  .  Hence the fol
20490 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64  lowing sqlite3Vd
204a0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
204b0 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a   call is always.
204c0 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64    ** a no-op and
204d0 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
204e0 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69    But we leave i
204f0 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20  t in place as a 
20500 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61  safety..  */.  a
20510 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
20520 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
20530 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
20540 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
20550 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
20560 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
20570 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20580 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28  to_error;..  if(
20590 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
205a0 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
205b0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
205c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
205d0 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
205e0 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72  &n64);.    asser
205f0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
20600 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62   );    /* True b
20610 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
20620 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
20630 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ove */.    if( n
20640 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  64>db->aLimit[SQ
20650 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
20660 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
20670 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
20680 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34      n = (u32)n64
20690 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
206a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
206b0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
206c0 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
206d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
206e0 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
206f0 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
20700 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
20710 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
20720 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
20730 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
20740 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
20750 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
20760 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
20770 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f   n, 0) ){.    go
20780 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
20790 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
207a0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
207b0 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
207c0 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
207d0 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  x ){.    rc = sq
207e0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43  lite3BtreeKey(pC
207f0 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
20800 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >z);.  }else{.  
20810 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20820 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30  reeData(pCrsr, 0
20830 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
20840 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
20850 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
20860 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
20870 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
20880 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
20890 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
208a0 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
208b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
208c0 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
208d0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
208e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
208f0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
20900 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
20910 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
20920 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
20930 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
20940 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
20950 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
20960 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
20970 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
20980 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
20990 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
209a0 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
209b0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
209c0 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
209d0 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
209e0 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
209f0 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
20a00 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
20a10 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
20a20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
20a30 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43  lease */.  VdbeC
20a40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
20a50 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
20a60 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
20a70 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
20a80 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
20a90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20aa0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20ab0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20ac0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20ad0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20ae0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
20af0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
20b00 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  eReg==0 );.  if(
20b10 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
20b20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e      /* Do nothin
20b30 67 20 73 6f 20 74 68 61 74 20 72 65 67 5b 50 32  g so that reg[P2
20b40 5d 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 20 2a  ] remains NULL *
20b50 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  /.    break;.  }
20b60 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
20b70 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
20b80 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
20b90 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
20ba0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
20bb0 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
20bc0 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43  e if( pC->pVtabC
20bd0 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74  ursor ){.    pVt
20be0 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75  ab = pC->pVtabCu
20bf0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20  rsor->pVtab;.   
20c00 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
20c10 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61  ->pModule;.    a
20c20 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
20c30 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 69 66  xRowid );.    if
20c40 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
20c50 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
20c60 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
20c70 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  e;.    rc = pMod
20c80 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
20c90 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
20ca0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
20cb0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
20cc0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
20cd0 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
20ce0 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
20cf0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
20d00 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
20d10 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
20d20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
20d30 73 75 73 65 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  suse;.#endif /* 
20d40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
20d50 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
20d60 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
20d70 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
20d80 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
20d90 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
20da0 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
20db0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
20dc0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20dd0 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64     if( pC->rowid
20de0 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20  IsValid ){.     
20df0 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77   v = pC->lastRow
20e00 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  id;.    }else{. 
20e10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20e20 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
20e30 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
20e40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
20e50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
20e60 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
20e70 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
20e80 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a  veto() above */.
20e90 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
20ea0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 4d 65 6d  ->u.i = v;.  Mem
20eb0 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
20ec0 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
20ed0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20ee0 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
20ef0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
20f00 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
20f10 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
20f20 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
20f30 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
20f40 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
20f50 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
20f60 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
20f70 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
20f80 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
20f90 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
20fa0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
20fb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20fc0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20fd0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20fe0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20ff0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21000 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
21010 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
21020 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21030 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e   = 0;.  if( pC->
21040 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
21050 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
21060 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
21070 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
21080 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21090 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
210a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
210b0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
210c0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
210d0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
210e0 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
210f0 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
21100 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
21110 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
21120 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
21130 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
21140 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
21150 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
21160 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
21170 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
21180 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
21190 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
211a0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
211b0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
211c0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
211d0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  n..*/.case OP_La
211e0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
211f0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
21200 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21210 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
21220 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
21230 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21240 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21250 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
21260 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21270 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21280 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
21290 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
212a0 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20   pCrsr==0 ){.   
212b0 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73   res = 1;.  }els
212c0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
212d0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
212e0 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20  sr, &res);.  }. 
212f0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
21300 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
21310 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
21320 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
21330 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
21340 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21350 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
21360 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65   pOp->p2>0 && re
21370 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
21380 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
21390 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
213a0 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
213b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
213c0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
213d0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
213e0 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
213f0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
21400 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
21410 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
21420 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
21430 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
21440 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
21450 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
21460 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
21470 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
21480 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
21490 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
214a0 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
214b0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
214c0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
214d0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
214e0 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
214f0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
21500 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
21510 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
21520 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
21530 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
21540 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
21550 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
21560 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
21570 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
21580 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
21590 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
215a0 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
215b0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
215c0 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
215d0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
215e0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
215f0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
21600 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
21610 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
21620 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
21630 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
21640 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a  ATUS_SORT-1]++;.
21650 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
21660 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
21670 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
21680 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
21690 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
216a0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
216b0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
216c0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
216d0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
216e0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
216f0 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
21700 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
21710 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
21720 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
21730 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
21740 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
21750 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
21760 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
21770 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
21780 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
21790 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
217a0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
217b0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
217c0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
217d0 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
217e0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
217f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21800 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
21810 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
21820 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21830 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21840 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
21850 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21860 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21870 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
21880 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75  (pCrsr = pC->pCu
21890 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20  rsor)!=0 ){.    
218a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
218b0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
218c0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46  es);.    pC->atF
218d0 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31  irst = res==0 ?1
218e0 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  :0;.    pC->defe
218f0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21900 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
21910 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21920 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  E;.    pC->rowid
21930 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  IsValid = 0;.  }
21940 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20  else{.    res = 
21950 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  1;.  }.  pC->nul
21960 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
21970 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21980 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
21990 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
219a0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
219b0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
219c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
219d0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
219e0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
219f0 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
21a00 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
21a10 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
21a20 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
21a30 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
21a40 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
21a50 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
21a60 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
21a70 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
21a80 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
21a90 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
21aa0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
21ab0 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
21ac0 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
21ad0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
21ae0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
21af0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
21b00 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
21b10 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
21b20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
21b30 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f   also: Prev.*/./
21b40 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
21b50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21b60 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
21b70 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
21b80 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
21b90 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
21ba0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
21bb0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
21bc0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
21bd0 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
21be0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
21bf0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
21c00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
21c10 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
21c20 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
21c30 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
21c40 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
21c50 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
21c60 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
21c70 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
21c80 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
21c90 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
21ca0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
21cb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
21cc0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
21cd0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
21ce0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
21cf0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
21d00 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
21d10 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
21d20 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
21d30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21d40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21d50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
21d60 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
21d70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
21d80 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
21d90 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
21da0 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70  #2273 */.  }.  p
21db0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
21dc0 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 3d  or;.  if( pCrsr=
21dd0 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
21de0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62  llRow = 1;.    b
21df0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20  reak;.  }.  res 
21e00 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 1;.  assert( p
21e10 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21e20 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 70  o==0 );.  rc = p
21e30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
21e40 65 78 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72  ext ? sqlite3Btr
21e50 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72  eeNext(pCrsr, &r
21e60 65 73 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20  es) :.          
21e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e80 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
21e90 50 72 65 76 69 6f 75 73 28 70 43 72 73 72 2c 20  Previous(pCrsr, 
21ea0 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
21eb0 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
21ec0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21ed0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21ee0 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
21ef0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
21f00 32 20 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70  2 - 1;.    if( p
21f10 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75  Op->p5 ) p->aCou
21f20 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b  nter[pOp->p5-1]+
21f30 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
21f40 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
21f50 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
21f60 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70  ;.#endif.  }.  p
21f70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
21f80 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
21f90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49  ./* Opcode: IdxI
21fa0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a  nsert P1 P2 P3 *
21fb0 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P5.**.** Regist
21fc0 65 72 20 50 32 20 68 6f 6c 64 73 20 61 20 53 51  er P2 holds a SQ
21fd0 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
21fe0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
21ff0 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
22000 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
22010 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
22020 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
22030 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20  index P1.  Data 
22040 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
22050 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69   nil..**.** P3 i
22060 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72  s a flag that pr
22070 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f  ovides a hint to
22080 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65   the b-tree laye
22090 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69  r that this.** i
220a0 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20  nsert is likely 
220b0 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e  to be an append.
220c0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
220d0 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
220e0 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20  ks for indices. 
220f0 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
22100 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
22110 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f  or tables is OP_
22120 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20  Insert..*/.case 
22130 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
22140 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
22150 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22160 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
22170 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79  Crsr;.  int nKey
22180 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
22190 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28  zKey;..  assert(
221a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
221b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
221c0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
221d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
221e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
221f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
22200 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
22210 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  ob );.  pCrsr = 
22220 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
22230 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
22240 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
22250 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
22260 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  0 );.    rc = Ex
22270 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
22280 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
22290 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 6e  TE_OK ){.      n
222a0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
222b0 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32       zKey = pIn2
222c0 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ->z;.      rc = 
222d0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
222e0 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  rt(pCrsr, zKey, 
222f0 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20  nKey, "", 0, 0, 
22300 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20  pOp->p3, .      
22310 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20      ((pOp->p5 & 
22320 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
22330 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
22340 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20  Result : 0).    
22350 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72    );.      asser
22360 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
22370 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
22380 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22390 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
223a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
223b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
223c0 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
223d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
223e0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
223f0 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
22400 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
22410 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
22420 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
22430 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
22440 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
22450 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
22460 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
22470 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
22480 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
22490 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
224a0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
224b0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
224c0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
224d0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
224e0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
224f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
22500 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
22510 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  >p3<=p->nMem+1 )
22520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22530 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22540 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22550 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22560 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22570 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
22580 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
22590 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
225a0 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
225b0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
225c0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
225d0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
225e0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e  )pOp->p3;.    r.
225f0 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72  flags = 0;.    r
22600 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  .aMem = &p->aMem
22610 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72  [pOp->p2];.    r
22620 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22630 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
22640 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
22650 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
22660 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
22670 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
22680 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22690 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a  eDelete(pCrsr);.
226a0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
226b0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
226c0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
226d0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
226e0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
226f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22700 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
22710 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
22720 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
22730 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
22740 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
22750 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
22760 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
22770 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
22780 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
22790 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
227a0 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
227b0 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
227c0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
227d0 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
227e0 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
227f0 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
22800 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
22810 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
22820 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
22830 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
22840 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
22850 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43  release */.  BtC
22860 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
22870 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22880 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
22890 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
228a0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
228b0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
228c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
228d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
228e0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
228f0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
22900 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
22910 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63  sr!=0) ){.    rc
22920 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
22930 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
22940 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 72 63      if( NEVER(rc
22950 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22960 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
22970 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22980 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22990 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
229a0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
229b0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
229c0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
229d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
229e0 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
229f0 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20  , &rowid);.     
22a00 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
22a10 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
22a20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22a30 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
22a40 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
22a50 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
22a60 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
22a70 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
22a80 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
22a90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
22aa0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
22ab0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
22ac0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
22ad0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
22ae0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
22af0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
22b00 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
22b10 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
22b20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
22b30 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
22b40 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
22b50 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
22b60 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
22b70 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
22b80 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
22b90 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
22ba0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
22bb0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
22bc0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
22bd0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
22be0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
22bf0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22c00 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
22c10 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
22c20 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
22c30 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
22c40 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
22c50 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
22c60 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
22c70 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
22c80 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
22c90 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
22ca0 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
22cb0 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
22cc0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
22cd0 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
22ce0 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
22cf0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
22d00 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
22d10 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
22d20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
22d30 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
22d40 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
22d50 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
22d60 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
22d70 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
22d80 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
22d90 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
22da0 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
22db0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
22dc0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
22dd0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
22de0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
22df0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
22e00 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
22e10 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
22e20 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
22e30 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
22e40 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
22e50 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
22e60 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
22e70 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
22e80 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
22e90 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
22ea0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
22eb0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
22ec0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
22ed0 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
22ee0 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a  psilon prior .**
22ef0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
22f00 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20  on.  This makes 
22f10 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
22f20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63  like IdxLE..*/.c
22f30 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
22f40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
22f50 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in3 */.case OP_I
22f60 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
22f70 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
22f80 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22f90 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
22fa0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
22fb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22fc0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22fd0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22fe0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22ff0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23000 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
23010 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
23020 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  rsor!=0) ){.    
23030 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23040 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23050 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
23060 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
23070 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  p5==1 );.    ass
23080 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
23090 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
230a0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
230b0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
230c0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
230d0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
230e0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
230f0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
23100 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
23110 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52  | UNPACKED_IGNOR
23120 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c  E_ROWID;.    }el
23130 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67  se{.      r.flag
23140 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e  s = UNPACKED_IGN
23150 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d  ORE_ROWID;.    }
23160 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70  .    r.aMem = &p
23170 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
23180 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23190 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
231a0 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
231b0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
231c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
231d0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
231e0 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
231f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23200 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
23210 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
23220 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
23230 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
23240 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
23250 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
23260 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23270 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
23280 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
23290 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
232a0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
232b0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
232c0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
232d0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
232e0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
232f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
23300 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
23310 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
23320 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
23330 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
23340 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
23350 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
23360 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
23370 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
23380 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
23390 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
233a0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
233b0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
233c0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
233d0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
233e0 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
233f0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
23400 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
23410 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
23420 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
23430 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
23440 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
23450 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
23460 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
23470 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
23480 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
23490 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
234a0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
234b0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
234c0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
234d0 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
234e0 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
234f0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
23500 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
23510 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
23520 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
23530 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
23540 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
23550 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
23560 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
23570 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
23580 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
23590 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
235a0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
235b0 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
235c0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
235d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
235e0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
235f0 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
23600 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
23610 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
23620 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
23630 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
23640 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
23650 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
23660 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23670 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23680 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
23690 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
236a0 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
236b0 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
236c0 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
236d0 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
236e0 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
236f0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
23700 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
23710 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
23720 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
23730 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
23740 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
23750 6e 64 69 66 0a 20 20 69 66 28 20 69 43 6e 74 3e  ndif.  if( iCnt>
23760 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
23770 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
23780 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
23790 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65  = OE_Abort;.  }e
237a0 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
237b0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
237c0 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20  rt( iCnt==1 );. 
237d0 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
237e0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69  treeMask & (1<<i
237f0 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72  Db))!=0 );.    r
23800 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23810 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44  DropTable(db->aD
23820 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d  b[iDb].pBt, pOp-
23830 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20  >p1, &iMoved);. 
23840 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
23850 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
23860 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
23870 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
23880 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
23890 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
238a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
238b0 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
238c0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
238d0 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61  PageMoved(&db->a
238e0 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c  Db[iDb], iMoved,
238f0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
23900 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
23910 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23920 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
23930 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
23940 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
23950 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
23960 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
23970 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
23980 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
23990 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
239a0 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
239b0 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
239c0 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
239d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
239e0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
239f0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
23a00 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
23a10 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
23a20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
23a30 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
23a40 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
23a50 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
23a60 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
23a70 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
23a80 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
23a90 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
23aa0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
23ab0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
23ac0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
23ad0 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
23ae0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
23af0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
23b00 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
23b10 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
23b20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
23b30 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
23b40 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
23b50 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
23b60 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
23b70 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
23b80 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
23b90 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
23ba0 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
23bb0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
23bc0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
23bd0 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
23be0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
23bf0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
23c00 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
23c10 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
23c20 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
23c30 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
23c40 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
23c50 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
23c60 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
23c70 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
23c80 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
23c90 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
23ca0 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
23cb0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23cc0 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
23cd0 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
23ce0 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
23cf0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
23d00 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
23d10 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
23d20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
23d30 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
23d40 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
23d50 20 20 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f        p->aMem[pO
23d60 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
23d70 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
23d80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23d90 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
23da0 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
23db0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
23dc0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
23dd0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
23de0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
23df0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
23e00 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
23e10 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
23e20 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
23e30 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
23e40 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
23e50 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
23e60 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
23e70 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
23e80 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
23e90 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
23ea0 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
23eb0 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
23ec0 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
23ed0 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
23ee0 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
23ef0 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
23f00 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
23f10 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
23f20 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
23f30 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
23f40 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
23f50 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
23f60 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
23f70 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c  2 * * *.**.** Al
23f80 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
23f90 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
23fa0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
23fb0 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
23fc0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
23fd0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
23fe0 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
23ff0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
24000 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
24010 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
24020 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
24030 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
24040 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
24050 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
24060 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
24070 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
24080 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
24090 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
240a0 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
240b0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
240c0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
240d0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
240e0 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
240f0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
24100 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
24110 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
24120 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
24130 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
24140 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24150 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
24160 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
24170 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
24180 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
24190 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
241a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
241b0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
241c0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
241d0 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
241e0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
241f0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
24200 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
24210 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c   BTREE_LEAFDATA|
24220 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
24230 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
24240 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54   = BTREE_ZERODAT
24250 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  A;.  }.  rc = sq
24260 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
24270 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
24280 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
24290 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
242a0 6f 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  o;.  MemSetTypeF
242b0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
242c0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
242d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
242e0 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50  Schema P1 P2 * P
242f0 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
24300 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
24310 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
24320 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
24330 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
24340 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
24350 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
24360 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22  P4.  P2 is the "
24370 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41  force" flag.   A
24380 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20  lways do.** the 
24390 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73  parsing if P2 is
243a0 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73   true.  If P2 is
243b0 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69   false, then thi
243c0 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a  s routine is a.*
243d0 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73  * no-op if the s
243e0 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72  chema is not cur
243f0 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20  rently loaded.  
24400 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
24410 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73  if P2.** is fals
24420 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  e, the SQLITE_MA
24430 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e  STER table is on
24440 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65  ly parsed if the
24450 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20   rest of the.** 
24460 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64  schema is alread
24470 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68  y loaded into th
24480 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a  e symbol table..
24490 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
244a0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
244b0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
244c0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
244d0 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
244e0 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
244f0 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
24500 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
24510 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
24520 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
24530 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
24540 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
24550 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
24560 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
24570 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69  a initData;..  i
24580 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
24590 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
245a0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
245b0 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70  ..  /* If pOp->p
245c0 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69  2 is 0, then thi
245d0 73 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e  s opcode is bein
245e0 67 20 65 78 65 63 75 74 65 64 20 74 6f 20 72 65  g executed to re
245f0 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  ad a.  ** single
24600 20 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c   row, for exampl
24610 65 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73  e the row corres
24620 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77  ponding to a new
24630 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61   index.  ** crea
24640 74 65 64 20 62 79 20 74 68 69 73 20 56 44 42 45  ted by this VDBE
24650 2c 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74  , from the sqlit
24660 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20  e_master table. 
24670 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65  It only.  ** doe
24680 73 20 74 68 69 73 20 69 66 20 74 68 65 20 63 6f  s this if the co
24690 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d  rresponding in-m
246a0 65 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20  emory schema is 
246b0 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c  currently.  ** l
246c0 6f 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65  oaded. Otherwise
246d0 2c 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20  , the new index 
246e0 64 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62  definition can b
246f0 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20  e loaded along. 
24700 20 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65 73   ** with the res
24710 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  t of the schema 
24720 77 68 65 6e 20 69 74 20 69 73 20 72 65 71 75 69  when it is requi
24730 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41  red..  **.  ** A
24740 6c 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65  lthough the mute
24750 78 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65  x on the BtShare
24760 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  d object that co
24770 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a  rresponds to.  *
24780 2a 20 64 61 74 61 62 61 73 65 20 69 44 62 20 28  * database iDb (
24790 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
247a0 74 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69  taining the sqli
247b0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  te_master table.
247c0 20 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69    ** read by thi
247d0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69  s instruction) i
247e0 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64  s currently held
247f0 2c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72  , it is necessar
24800 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e  y to.  ** obtain
24810 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
24820 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
24830 61 62 61 73 65 73 20 62 65 66 6f 72 65 20 63 68  abases before ch
24840 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74  ecking if.  ** t
24850 68 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62  he schema of iDb
24860 20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73   is loaded. This
24870 20 69 73 20 62 65 63 61 75 73 65 2c 20 61 74 20   is because, at 
24880 74 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a  the start of.  *
24890 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78  * the sqlite3_ex
248a0 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c  ec() call below,
248b0 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76   SQLite will inv
248c0 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  oke .  ** sqlite
248d0 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29  3BtreeEnterAll()
248e0 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73  . If all mutexes
248f0 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79   are not already
24900 20 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20   held, the.  ** 
24910 69 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65  iDb mutex may be
24920 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c   temporarily rel
24930 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64  eased to avoid d
24940 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a  eadlock. If .  *
24950 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20  * this happens, 
24960 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20  then some other 
24970 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74  thread may delet
24980 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  e the in-memory 
24990 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20  .  ** schema of 
249a0 64 61 74 61 62 61 73 65 20 69 44 62 20 62 65 66  database iDb bef
249b0 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61 74  ore the SQL stat
249c0 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20  ement runs. The 
249d0 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c  schema.  ** will
249e0 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64   not be reloaded
249f0 20 62 65 63 75 61 73 65 20 74 68 65 20 64 62 2d   becuase the db-
24a00 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20  >init.busy flag 
24a10 69 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a  is set. This.  *
24a20 2a 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20  * can result in 
24a30 61 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  a "no such table
24a40 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  : sqlite_master"
24a50 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20   or "malformed. 
24a60 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68   ** database sch
24a70 65 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67  ema" error being
24a80 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
24a90 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73   user..  */.  as
24aa0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
24ab0 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
24ac0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
24ad0 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
24ae0 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20  EnterAll(db);.  
24af0 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44  if( pOp->p2 || D
24b00 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
24b10 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
24b20 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d  oaded) ){.    zM
24b30 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
24b40 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
24b50 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
24b60 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
24b70 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
24b80 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
24b90 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
24ba0 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
24bb0 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
24bc0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
24bd0 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
24be0 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
24bf0 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20  WHERE %s",.     
24c00 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
24c10 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
24c20 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
24c30 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
24c40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
24c50 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
24c60 7b 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73 71  {.      (void)sq
24c70 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
24c80 62 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  b);.      assert
24c90 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
24ca0 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
24cb0 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
24cc0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
24cd0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
24ce0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
24cf0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
24d00 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
24d10 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
24d20 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
24d30 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
24d40 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
24d50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24d60 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
24d70 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
24d80 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
24d90 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
24da0 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 20  .busy = 0;.     
24db0 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61   (void)sqlite3Sa
24dc0 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20  fetyOn(db);.    
24dd0 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  }.  }.  sqlite3B
24de0 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29  treeLeaveAll(db)
24df0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
24e00 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
24e10 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
24e20 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
24e30 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
24e40 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
24e50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
24e60 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
24e70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
24e80 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
24e90 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
24ea0 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
24eb0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
24ec0 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
24ed0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
24ee0 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
24ef0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
24f00 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
24f10 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
24f20 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
24f30 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
24f40 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
24f50 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
24f60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24f70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
24f80 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
24f90 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
24fa0 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
24fb0 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
24fc0 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
24fd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
24fe0 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
24ff0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
25000 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
25010 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
25020 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
25030 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
25040 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
25050 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
25060 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
25070 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
25080 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
25090 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
250a0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
250b0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
250c0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
250d0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
250e0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
250f0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
25100 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
25110 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
25120 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
25130 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
25140 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
25150 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25160 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
25170 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
25180 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
25190 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
251a0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
251b0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
251c0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
251d0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
251e0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
251f0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
25200 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
25210 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
25220 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
25230 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
25240 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
25250 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
25260 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
25270 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
25280 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
25290 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
252a0 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
252b0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
252c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
252d0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
252e0 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
252f0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
25300 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
25310 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
25320 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
25330 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
25340 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
25350 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
25360 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
25370 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
25380 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
25390 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
253a0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
253b0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
253c0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
253d0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
253e0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
253f0 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
25400 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
25410 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
25420 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
25430 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
25440 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
25450 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
25460 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
25470 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
25480 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
25490 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
254a0 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
254b0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
254c0 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
254d0 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
254e0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
254f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
25500 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
25510 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
25520 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
25530 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
25540 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
25550 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
25560 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
25570 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
25580 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
25590 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
255a0 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
255b0 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
255c0 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
255d0 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
255e0 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
255f0 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
25600 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
25610 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
25620 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
25630 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
25640 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
25650 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
25660 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
25670 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
25680 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
25690 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
256a0 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
256b0 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
256c0 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
256d0 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
256e0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
256f0 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
25700 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
25710 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
25720 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
25730 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
25740 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
25750 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
25760 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
25770 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
25780 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
25790 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
257a0 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
257b0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
257c0 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
257d0 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
257e0 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
257f0 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
25800 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
25810 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
25820 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
25830 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
25840 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
25850 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
25860 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
25870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
25880 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
25890 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
258a0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
258b0 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
258c0 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
258d0 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
258e0 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
258f0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
25900 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f  ning */.  .  nRo
25910 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
25920 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
25930 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
25940 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
25950 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a  db, sizeof(int)*
25960 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69  (nRoot+1) );.  i
25970 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f  f( aRoot==0 ) go
25980 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73  to no_mem;.  ass
25990 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
259a0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
259b0 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  em );.  pnErr = 
259c0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
259d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
259e0 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
259f0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
25a00 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
25a10 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
25a20 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
25a30 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
25a40 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
25a50 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
25a60 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
25a70 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
25a80 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
25a90 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
25aa0 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
25ab0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
25ac0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
25ad0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
25ae0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29  k & (1<<pOp->p5)
25af0 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71  )!=0 );.  z = sq
25b00 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
25b10 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
25b20 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
25b30 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
25b60 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
25b70 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
25b80 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
25b90 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
25ba0 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
25bb0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
25bc0 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
25bd0 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
25be0 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
25bf0 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
25c00 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
25c10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
25c20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
25c30 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
25c40 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
25c50 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
25c60 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
25c70 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
25c80 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
25c90 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
25ca0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
25cb0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
25cc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
25cd0 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
25ce0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
25cf0 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
25d00 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
25d10 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
25d20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
25d30 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65   P2 into a boole
25d40 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64  an index.** held
25d50 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
25d60 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
25d70 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
25d80 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
25d90 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
25da0 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
25db0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
25dc0 20 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pIdx;.  Mem *p
25dd0 56 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Val;.  assert( p
25de0 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
25df0 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
25e00 20 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65    pIdx = &p->aMe
25e10 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
25e20 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
25e30 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  && pOp->p2<=p->n
25e40 4d 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20 3d 20  Mem );.  pVal = 
25e50 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
25e60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 56  ];.  assert( (pV
25e70 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  al->flags & MEM_
25e80 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  Int)!=0 );.  if(
25e90 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20   (pIdx->flags & 
25ea0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
25eb0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
25ec0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
25ed0 64 78 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  dx);.    if( (pI
25ee0 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  dx->flags & MEM_
25ef0 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
25f00 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
25f10 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
25f20 65 72 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77  ert(pIdx->u.pRow
25f30 53 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69 29 3b  Set, pVal->u.i);
25f40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25f50 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65  Opcode: RowSetRe
25f60 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ad P1 P2 P3 * *.
25f70 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
25f80 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
25f90 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e   from boolean in
25fa0 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74  dex P1 and put t
25fb0 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a  hat value into.*
25fc0 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  * register P3.  
25fd0 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69  Or, if boolean i
25fe0 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69  ndex P1 is initi
25ff0 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
26000 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
26010 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
26020 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
26030 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
26040 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
26050 6a 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20  jump, out3 */.  
26060 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69 36 34  Mem *pIdx;.  i64
26070 20 76 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20   val;.  assert( 
26080 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
26090 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
260a0 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
260b0 45 52 52 55 50 54 3b 0a 20 20 70 49 64 78 20 3d  ERRUPT;.  pIdx =
260c0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
260d0 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d  1];.  pOut = &p-
260e0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
260f0 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61    if( (pIdx->fla
26100 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
26110 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
26120 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 64  e3RowSetNext(pId
26130 78 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  x->u.pRowSet, &v
26140 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
26150 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
26160 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
26170 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
26180 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 64 78 29  MemSetNull(pIdx)
26190 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
261a0 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
261b0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
261c0 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
261d0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
261e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
261f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
26200 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 73 71  ->nMem );.    sq
26210 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
26220 6e 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29 3b  nt64(pOut, val);
26230 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26240 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
26250 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
26260 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P4.**.** Registe
26270 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
26280 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
26290 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
262a0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
262b0 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
262c0 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
262d0 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
262e0 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
262f0 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
26300 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
26310 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
26320 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
26330 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
26340 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
26350 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
26360 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
26370 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
26380 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
26390 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
263a0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
263b0 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
263c0 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
263d0 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
263e0 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
263f0 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
26400 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
26410 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
26420 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
26430 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
26440 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
26450 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
26460 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
26470 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
26480 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
26490 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
264a0 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
264b0 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
264c0 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
264d0 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
264e0 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
264f0 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
26500 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
26510 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
26520 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
26530 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
26540 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
26550 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
26560 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
26570 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
26580 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
26590 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
265a0 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
265b0 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
265c0 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
265d0 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
265e0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
265f0 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
26600 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
26610 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
26620 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
26630 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
26640 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
26650 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
26660 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
26670 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
26680 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
26690 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
266a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
266b0 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
266d0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
266e0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
266f0 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
26700 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
26710 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
26720 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
26730 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
26740 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
26750 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
26760 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
26770 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
26780 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
26790 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
267a0 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
267b0 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
267c0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
267d0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
267e0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
267f0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
26800 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
26810 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
26820 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
26830 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
26840 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
26850 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
26860 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
26870 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
26880 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
26890 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
268a0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
268b0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
268c0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268e0 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20   (u8)(iSet>=0 ? 
268f0 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66  iSet & 0xf : 0xf
26900 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f),.            
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26920 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
26930 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
26940 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
26950 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
26960 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
26970 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
26980 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
26990 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
269a0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
269b0 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
269c0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
269d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
269e0 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
269f0 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
26a00 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P4 *.**.** Execu
26a10 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
26a20 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
26a30 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
26a40 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
26a50 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
26a60 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
26a70 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
26a80 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
26a90 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
26aa0 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
26ab0 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
26ac0 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
26ad0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
26ae0 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
26af0 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
26b00 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
26b10 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
26b20 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
26b30 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
26b40 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
26b50 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
26b60 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
26b70 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
26b80 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
26b90 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
26ba0 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
26bb0 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
26bc0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
26bd0 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
26be0 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
26bf0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
26c00 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
26c10 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
26c20 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
26c30 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
26c40 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
26c50 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
26c60 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
26c70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
26c80 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
26c90 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
26ca0 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26cc0 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
26cd0 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
26ce0 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
26cf0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26d10 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
26d20 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
26d30 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
26d40 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
26d50 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
26d60 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
26d70 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
26d80 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
26d90 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
26da0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
26db0 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
26dc0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
26dd0 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
26de0 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
26df0 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
26e00 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
26e10 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
26e20 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
26e30 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
26e40 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
26e50 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
26e60 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
26e70 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
26e80 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
26e90 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
26ea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
26eb0 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
26ec0 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
26ed0 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
26ee0 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
26ef0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
26f00 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
26f10 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
26f20 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
26f30 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
26f40 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
26f50 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
26f60 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
26f70 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
26f80 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
26f90 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
26fa0 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
26fb0 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
26fc0 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
26fd0 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
26fe0 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
26ff0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
27000 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
27010 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
27020 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
27030 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
27040 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
27050 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
27060 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
27070 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
27080 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
27090 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
270a0 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
270b0 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
270c0 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
270d0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
270e0 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
270f0 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
27100 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
27110 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
27120 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
27130 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
27140 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
27150 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
27160 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
27170 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
27180 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
27190 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
271a0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
271b0 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
271c0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
271d0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
271e0 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
271f0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
27200 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
27210 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
27220 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
27230 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
27240 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
27250 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
27260 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
27270 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
27280 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
27290 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72  ursion");.    br
272a0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  eak;.  }..  /* R
272b0 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
272c0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
272d0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
272e0 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
272f0 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
27300 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
27310 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
27320 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
27330 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
27340 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
27350 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
27360 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
27370 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
27380 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
27390 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
273a0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
273b0 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
273c0 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
273d0 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
273e0 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
273f0 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
27400 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
27410 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
27420 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
27430 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
27440 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
27450 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
27460 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
27470 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
27480 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
27490 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
274a0 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
274b0 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
274c0 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
274d0 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
274e0 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
274f0 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
27500 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
27510 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
27520 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
27530 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
27540 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
27550 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
27560 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
27570 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
27580 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
27590 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
275a0 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
275b0 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20  eCursor *);.    
275c0 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
275d0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
275e0 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
275f0 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
27600 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
27610 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
27620 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
27630 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
27640 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
27650 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
27660 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
27670 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
27680 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
27690 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
276a0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
276b0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
276c0 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
276d0 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
276e0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
276f0 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
27700 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
27710 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
27720 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
27730 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
27740 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
27750 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
27760 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
27770 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
27780 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
27790 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
277a0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20  gram->token;..  
277b0 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
277c0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
277d0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
277e0 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
277f0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
27800 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
27810 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
27820 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
27830 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
27840 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
27850 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
27860 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
27870 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
27880 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
27890 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
278a0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
278b0 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
278c0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
278d0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
278e0 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
278f0 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
27900 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
27910 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
27920 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
27930 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
27940 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
27950 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
27960 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
27970 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
27980 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
27990 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
279a0 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
279b0 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
279c0 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
279d0 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
279e0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
279f0 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
27a00 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
27a10 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
27a20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
27a30 29 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  )&p->aMem[p->nMe
27a40 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  m+1];.  p->aOp =
27a50 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
27a60 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
27a70 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d  ram->nOp;.  pc =
27a80 20 2d 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d   -1;..  break;.}
27a90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
27aa0 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
27ab0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
27ac0 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
27ad0 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
27ae0 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
27af0 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
27b00 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
27b10 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
27b20 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
27b30 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
27b40 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
27b50 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
27b60 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
27b70 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
27b80 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
27b90 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
27ba0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
27bb0 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
27bc0 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
27bd0 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
27be0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
27bf0 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
27c00 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
27c10 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
27c20 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
27c30 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
27c40 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
27c50 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
27c60 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
27c70 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
27c80 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
27c90 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
27ca0 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
27cb0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27cc0 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46  lease */.  VdbeF
27cd0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
27ce0 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61  Mem *pIn;.  pFra
27cf0 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
27d00 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
27d10 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
27d20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
27d30 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
27d40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
27d50 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
27d60 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
27d70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
27d80 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
27d90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
27da0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
27db0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
27dc0 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
27dd0 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
27de0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
27df0 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
27e00 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
27e10 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
27e20 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
27e30 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
27e40 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
27e50 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
27e60 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
27e70 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
27e80 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
27e90 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
27ea0 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
27eb0 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
27ec0 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
27ed0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
27ee0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
27ef0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
27f00 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
27f10 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
27f20 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  er: {.  if( pOp-
27f30 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
27f40 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
27f50 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
27f60 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
27f70 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
27f80 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
27f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
27fa0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
27fb0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
27fc0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
27fd0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
27fe0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
27ff0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
28000 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
28010 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
28020 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
28030 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
28040 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
28050 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
28060 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
28070 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
28080 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
28090 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
280a0 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
280b0 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
280c0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
280d0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
280e0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
280f0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
28100 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
28110 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
28120 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
28130 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
28140 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
28150 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
28160 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
28170 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
28180 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
28190 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
281a0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66  Op->p1 ){.    if
281b0 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
281c0 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
281d0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
281e0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  {.    if( p->nFk
281f0 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20  Constraint==0 ) 
28200 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
28210 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
28220 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
28230 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
28240 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
28250 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28260 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
28270 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
28280 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28290 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
282a0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
282b0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
282c0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
282d0 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
282e0 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
282f0 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
28300 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
28310 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
28320 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
28330 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
28340 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
28350 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
28360 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
28370 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
28380 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
28390 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
283a0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
283b0 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
283c0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
283d0 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
283e0 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
283f0 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
28400 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
28410 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
28420 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72   *pIn1;.  VdbeFr
28430 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
28440 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
28450 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
28460 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
28470 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
28480 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
28490 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
284a0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
284b0 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
284c0 20 20 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61      pIn1 = &p->a
284d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
284e0 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
284f0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
28500 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
28510 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
28520 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
28530 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
28540 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
28550 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
28560 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
28570 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28580 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
28590 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
285a0 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
285b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
285c0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
285d0 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
285e0 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
285f0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
28600 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
28610 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
28620 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
28630 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
28640 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
28650 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
28660 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
28670 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
28680 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
28690 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
286a0 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
286b0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
286c0 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
286d0 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
286e0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
286f0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
28700 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
28710 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
28720 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
28730 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
28740 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
28750 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
28760 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
28770 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
28780 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
28790 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
287a0 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
287b0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
287c0 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
287d0 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
287e0 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
287f0 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
28800 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
28810 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
28820 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
28830 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
28840 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
28850 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
28860 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
28870 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28880 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
28890 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
288a0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
288b0 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79 20  r P1 is exactly 
288c0 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
288d0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
288e0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
288f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
28900 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
28910 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
28920 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
28930 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
28940 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
28950 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
28960 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
28970 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
28980 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
28990 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
289a0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
289b0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
289c0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
289d0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
289e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
289f0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
28a00 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
28a10 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
28a20 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
28a30 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
28a40 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
28a50 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
28a60 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
28a70 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
28a80 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
28a90 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
28aa0 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
28ab0 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
28ac0 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
28ad0 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
28ae0 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
28af0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
28b00 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
28b10 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
28b20 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
28b30 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
28b40 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
28b50 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
28b60 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
28b70 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
28b80 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
28b90 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
28ba0 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
28bb0 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  c = &p->aMem[pOp
28bc0 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d  ->p2];.  apVal =
28bd0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
28be0 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
28bf0 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  =0 );.  for(i=0;
28c00 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b   i<n; i++, pRec+
28c10 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d  +){.    apVal[i]
28c20 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 71 6c   = pRec;.    sql
28c30 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
28c40 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a  Type(pRec);.  }.
28c50 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
28c60 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
28c70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
28c80 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
28c90 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d  nMem );.  ctx.pM
28ca0 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d 3e  em = pMem = &p->
28cb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
28cc0 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
28cd0 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
28ce0 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
28cf0 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
28d00 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
28d10 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
28d20 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
28d30 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
28d40 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
28d50 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
28d60 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
28d70 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
28d80 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
28d90 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20  p>p->aOp );.    
28da0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
28db0 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
28dc0 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
28dd0 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
28de0 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
28df0 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
28e00 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
28e10 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75  ;.  }.  (ctx.pFu
28e20 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c  nc->xStep)(&ctx,
28e30 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66   n, apVal);.  if
28e40 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
28e50 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
28e60 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
28e70 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
28e80 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
28e90 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
28ea0 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
28eb0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
28ec0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
28ed0 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .s);.  break;.}.
28ee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
28ef0 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
28f00 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
28f10 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
28f20 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
28f30 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
28f40 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
28f50 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
28f60 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
28f70 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
28f80 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
28f90 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
28fa0 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
28fb0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
28fc0 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
28fd0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
28fe0 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
28ff0 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
29000 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
29010 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
29020 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
29030 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
29040 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
29050 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
29060 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
29070 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
29080 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
29090 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
290a0 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
290b0 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
290c0 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
290d0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
290e0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
290f0 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
29100 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
29110 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
29120 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
29130 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
29140 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
29150 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
29160 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
29170 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
29180 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
29190 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
291a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
291b0 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
291c0 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
291d0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
291e0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
291f0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
29200 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
29210 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
29220 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
29230 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
29240 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
29250 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
29260 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
29270 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
29280 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
29290 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
292a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
292b0 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ...#if !defined(
292c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
292d0 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
292e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
292f0 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
29300 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
29310 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
29320 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
29330 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
29340 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
29350 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
29360 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
29370 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
29380 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
29390 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
293a0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
293b0 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
293c0 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  : {.  if( sqlite
293d0 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
293e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
293f0 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63  to_misuse; .  rc
29400 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
29410 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
29420 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69   db);.  if( sqli
29430 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
29440 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29450 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72  _to_misuse;.  br
29460 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
29470 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
29480 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
29490 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
294a0 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
294b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
294c0 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
294d0 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
294e0 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
294f0 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
29500 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
29510 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
29520 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
29530 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
29540 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
29550 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
29560 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
29570 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
29580 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
29590 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
295a0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
295b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
295c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
295d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
295e0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
295f0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
29600 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
29610 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
29620 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
29630 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
29640 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
29650 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
29660 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
29670 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
29680 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
29690 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
296a0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
296b0 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
296c0 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
296d0 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
296e0 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
296f0 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
29700 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
29710 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
29720 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
29730 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
29740 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
29750 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
29760 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
29770 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
29780 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
29790 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
297a0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
297b0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
297c0 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
297d0 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
297e0 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
297f0 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
29800 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
29810 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
29820 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
29830 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
29840 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
29850 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
29860 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
29870 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29880 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
29890 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
298a0 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
298b0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
298c0 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
298d0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
298e0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
298f0 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
29900 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
29910 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
29920 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
29930 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
29940 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
29950 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
29960 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
29970 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
29980 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
29990 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
299a0 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
299b0 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
299c0 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
299d0 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
299e0 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
299f0 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
29a00 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
29a10 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
29a20 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
29a30 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
29a40 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
29a50 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
29a60 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
29a70 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
29a80 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
29a90 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
29aa0 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
29ab0 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
29ac0 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
29ad0 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
29ae0 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
29af0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
29b00 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
29b10 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
29b20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
29b30 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
29b40 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
29b50 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
29b60 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
29b70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  1))!=0 );.    as
29b80 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
29b90 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
29ba0 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
29bb0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
29bc0 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
29bd0 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
29be0 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
29bf0 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46  .    if( (rc&0xF
29c00 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
29c10 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  D ){.      const
29c20 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
29c30 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  p4.z;.      sqli
29c40 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
29c50 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64  >zErrMsg, db, "d
29c60 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
29c70 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
29c80 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
29c90 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
29ca0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
29cb0 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
29cc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29cd0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
29ce0 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
29cf0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
29d00 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
29d10 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
29d20 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
29d30 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
29d40 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
29d50 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
29d60 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
29d70 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
29d80 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
29d90 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
29da0 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
29db0 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
29dc0 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
29dd0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
29de0 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
29df0 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
29e00 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
29e10 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
29e20 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
29e30 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
29e40 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
29e50 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
29e60 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
29e70 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
29e80 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
29e90 70 56 54 61 62 20 29 7b 0a 20 20 20 20 73 71 6c  pVTab ){.    sql
29ea0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
29eb0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
29ec0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 54  p->zErrMsg = pVT
29ed0 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ab->pVtab->zErrM
29ee0 73 67 3b 0a 20 20 20 20 70 56 54 61 62 2d 3e 70  sg;.    pVTab->p
29ef0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
29f00 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
29f10 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
29f20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29f30 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
29f40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
29f50 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
29f60 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
29f70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
29f80 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
29f90 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
29fa0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
29fb0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
29fc0 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
29fd0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
29fe0 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
29ff0 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
2a000 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
2a010 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2a020 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
2a030 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
2a040 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2a050 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2a060 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2a070 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a080 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2a090 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
2a0a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2a0b0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2a0c0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2a0d0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2a0e0 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
2a0f0 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
2a100 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2a110 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
2a120 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
2a130 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
2a140 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2a150 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
2a160 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2a170 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2a180 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
2a190 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2a1a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a1b0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2a1c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2a1d0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2a1e0 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
2a1f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2a200 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2a210 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2a220 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2a230 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2a240 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
2a250 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
2a260 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
2a270 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
2a280 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
2a290 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
2a2a0 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
2a2b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
2a2c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2a2d0 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
2a2e0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2a2f0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2a300 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2a310 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2a320 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2a330 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
2a340 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
2a350 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2a360 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2a370 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2a380 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2a390 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2a3a0 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
2a3b0 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71  odule);.  if( sq
2a3c0 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
2a3d0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2a3e0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
2a3f0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2a400 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2a410 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
2a420 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
2a430 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
2a440 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2a450 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
2a460 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
2a470 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
2a480 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
2a490 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2a4a0 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c  isuse;.  if( SQL
2a4b0 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
2a4c0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2a4d0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2a4e0 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
2a4f0 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
2a500 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
2a510 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
2a520 6c 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72  lise vdbe cursor
2a530 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
2a540 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
2a550 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
2a560 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
2a570 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
2a580 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
2a590 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
2a5a0 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  r;.      pCur->p
2a5b0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75  Module = pVtabCu
2a5c0 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f  rsor->pVtab->pMo
2a5d0 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  dule;.    }else{
2a5e0 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
2a5f0 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
2a600 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
2a610 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
2a620 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2a630 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2a640 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2a650 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2a660 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a670 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2a680 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
2a690 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2a6a0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
2a6b0 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
2a6c0 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
2a6d0 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
2a6e0 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
2a6f0 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
2a700 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
2a710 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
2a720 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
2a730 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
2a740 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
2a750 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
2a760 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
2a770 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
2a780 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
2a790 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
2a7a0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
2a7b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
2a7c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2a7d0 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
2a7e0 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
2a7f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
2a800 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
2a810 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
2a820 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
2a830 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
2a840 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2a850 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
2a860 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
2a870 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
2a880 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
2a890 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
2a8a0 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
2a8b0 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
2a8c0 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
2a8d0 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
2a8e0 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
2a8f0 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
2a900 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
2a910 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
2a920 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
2a930 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
2a940 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
2a950 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
2a960 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
2a970 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
2a980 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
2a990 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
2a9a0 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
2a9b0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2a9c0 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
2a9d0 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
2a9e0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2a9f0 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
2aa00 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
2aa10 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2aa20 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
2aa30 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
2aa40 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
2aa50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2aa60 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
2aa70 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
2aa80 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
2aa90 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
2aaa0 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
2aab0 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
2aac0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2aad0 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
2aae0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
2aaf0 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
2ab00 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2ab10 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
2ab20 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
2ab30 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
2ab40 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
2ab50 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2ab60 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2ab70 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
2ab80 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
2ab90 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
2aba0 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
2abb0 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
2abc0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
2abd0 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
2abe0 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
2abf0 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
2ac00 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
2ac10 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
2ac20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2ac30 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
2ac40 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
2ac50 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
2ac60 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
2ac70 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
2ac80 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
2ac90 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
2aca0 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1];.      sqlite
2acb0 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2acc0 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20  e(apArg[i]);.   
2acd0 20 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69   }..    if( sqli
2ace0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
2acf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2ad00 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
2ad10 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2ad20 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
2ad30 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
2ad40 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
2ad50 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
2ad60 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
2ad70 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2ad80 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
2ad90 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
2ada0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
2adb0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2adc0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
2add0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
2ade0 30 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  0;.    if( rc==S
2adf0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2ae00 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
2ae10 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f  >xEof(pVtabCurso
2ae20 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  r);.    }.    if
2ae30 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2ae40 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
2ae50 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2ae60 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  ;..    if( res )
2ae70 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2ae80 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
2ae90 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
2aea0 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
2aeb0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2aec0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2aed0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2aee0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2aef0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2af00 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
2af10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2af20 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
2af30 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
2af40 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
2af50 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
2af60 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
2af70 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
2af80 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
2af90 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
2afa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
2afb0 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
2afc0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2afd0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2afe0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2aff0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
2b000 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2b010 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
2b020 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
2b030 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2b040 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2b050 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2b060 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b070 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2b080 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
2b090 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  Dest = &p->aMem[
2b0a0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
2b0b0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
2b0c0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2b0d0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
2b0e0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2b0f0 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
2b100 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
2b110 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2b120 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2b130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
2b140 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
2b150 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
2b160 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
2b170 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20  ontext));..  /* 
2b180 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
2b190 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
2b1a0 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
2b1b0 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
2b1c0 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
2b1d0 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e  nts to sContext.
2b1e0 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65  s so in case the
2b1f0 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a   user-function .
2b200 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65    ** can use the
2b210 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
2b220 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61  ed buffer instea
2b230 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20  d of allocating 
2b240 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e  a .  ** new one.
2b250 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2b260 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e  dbeMemMove(&sCon
2b270 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a  text.s, pDest);.
2b280 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2b290 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45  (&sContext.s, ME
2b2a0 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20  M_Null);..  if( 
2b2b0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
2b2c0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2b2d0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2b2e0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2b2f0 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70  >xColumn(pCur->p
2b300 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f  VtabCursor, &sCo
2b310 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  ntext, pOp->p2);
2b320 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
2b330 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
2b340 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
2b350 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
2b360 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
2b370 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 43 6f  g = 0;.  if( sCo
2b380 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
2b390 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
2b3a0 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
2b3b0 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
2b3c0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
2b3d0 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20  ction to the P3 
2b3e0 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a  register. We.  *
2b3f0 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64  * do this regard
2b400 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
2b410 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  or not an error 
2b420 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75  occurred to ensu
2b430 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61  re any.  ** dyna
2b440 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  mic allocation i
2b450 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20  n sContext.s (a 
2b460 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20  Mem struct) is  
2b470 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20  released..  */. 
2b480 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2b490 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e  geEncoding(&sCon
2b4a0 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  text.s, encoding
2b4b0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
2b4c0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
2b4d0 73 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  st);.  sqlite3Vd
2b4e0 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c  beMemMove(pDest,
2b4f0 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20   &sContext.s);. 
2b500 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2b510 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
2b520 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2b530 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 67  yOn(db) ){.    g
2b540 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b550 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69  _misuse;.  }.  i
2b560 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
2b570 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
2b580 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
2b590 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
2b5a0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2b5b0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2b5c0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2b5d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2b5e0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2b5f0 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
2b600 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
2b610 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
2b620 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
2b630 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
2b640 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
2b650 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2b660 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
2b670 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2b680 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
2b690 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
2b6a0 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
2b6b0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2b6c0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2b6d0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2b6e0 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
2b6f0 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
2b700 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2b710 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2b720 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2b730 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
2b740 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
2b750 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
2b760 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2b770 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b780 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2b790 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
2b7a0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2b7b0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
2b7c0 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
2b7d0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2b7e0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2b7f0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2b800 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
2b810 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
2b820 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
2b830 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
2b840 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
2b850 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
2b860 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
2b870 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
2b880 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
2b890 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
2b8a0 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
2b8b0 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
2b8c0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
2b8d0 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
2b8e0 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
2b8f0 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
2b900 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
2b910 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
2b920 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
2b930 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
2b940 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
2b950 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
2b960 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
2b970 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
2b980 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
2b990 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
2b9a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2b9b0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 70  e_to_misuse;.  p
2b9c0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2b9d0 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   1;.  rc = pModu
2b9e0 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
2b9f0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2ba00 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2ba10 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  = 0;.  sqlite3Db
2ba20 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
2ba30 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
2ba40 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
2ba50 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
2ba60 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
2ba70 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2ba80 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
2ba90 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
2baa0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2bab0 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
2bac0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
2bad0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2bae0 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21  misuse;..  if( !
2baf0 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
2bb00 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
2bb10 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
2bb20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2bb30 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2bb40 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2bb50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2bb60 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2bb70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2bb80 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2bb90 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31  code: VRename P1
2bba0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2bbb0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2bbc0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2bbd0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2bbe0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2bbf0 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
2bc00 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2bc10 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
2bc20 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54  Rename method. T
2bc30 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72  he value.** in r
2bc40 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61  egister P1 is pa
2bc50 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d  ssed as the zNam
2bc60 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
2bc70 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
2bc80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65  ..*/.case OP_VRe
2bc90 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  name: {.  sqlite
2bca0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2bcb0 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20   Mem *pName;..  
2bcc0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2bcd0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2bce0 70 4e 61 6d 65 20 3d 20 26 70 2d 3e 61 4d 65 6d  pName = &p->aMem
2bcf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2bd00 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
2bd10 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
2bd20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2bd30 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29  (pOp->p1, pName)
2bd40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d  ;.  assert( pNam
2bd50 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  e->flags & MEM_S
2bd60 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
2bd70 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
2bd80 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2bd90 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72  e_to_misuse;.  r
2bda0 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
2bdb0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
2bdc0 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
2bdd0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2bde0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2bdf0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
2be00 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
2be10 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
2be20 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
2be30 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
2be40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2be50 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65  o_misuse;..  bre
2be60 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2be70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2be80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2be90 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
2bea0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
2beb0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2bec0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2bed0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2bee0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2bef0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2bf00 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2bf10 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2bf20 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
2bf30 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
2bf40 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
2bf50 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
2bf60 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
2bf70 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
2bf80 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
2bf90 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
2bfa0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
2bfb0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
2bfc0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
2bfd0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
2bfe0 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
2bff0 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
2c000 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
2c010 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
2c020 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
2c030 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
2c040 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
2c050 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
2c060 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
2c070 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
2c080 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
2c090 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
2c0a0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
2c0b0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
2c0c0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
2c0d0 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
2c0e0 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
2c0f0 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
2c100 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
2c110 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
2c120 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2c130 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
2c140 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
2c150 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
2c160 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
2c170 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
2c180 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
2c190 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
2c1a0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
2c1b0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
2c1c0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
2c1d0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
2c1e0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
2c1f0 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
2c200 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
2c210 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
2c220 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
2c230 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
2c240 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
2c250 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
2c260 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
2c270 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
2c280 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
2c290 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
2c2a0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2c2b0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
2c2c0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
2c2d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
2c2e0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
2c2f0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2c300 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2c310 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2c320 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
2c330 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
2c340 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
2c350 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
2c360 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2c370 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2c380 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
2c390 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
2c3a0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2c3b0 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
2c3c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c3d0 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
2c3e0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
2c3f0 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29  Module->xUpdate)
2c400 20 29 7b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   ){.    apArg = 
2c410 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
2c420 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
2c430 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
2c440 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
2c450 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2c460 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
2c470 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
2c480 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
2c490 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  X++;.    }.    i
2c4a0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2c4b0 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
2c4c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2c4d0 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  se;.    rc = pMo
2c4e0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
2c4f0 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
2c500 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 73  , &rowid);.    s
2c510 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2c520 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2c530 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
2c540 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
2c550 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
2c560 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 73  g = 0;.    if( s
2c570 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
2c580 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2c590 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
2c5a0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2c5b0 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
2c5c0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2c5d0 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
2c5e0 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
2c5f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
2c600 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
2c610 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
2c620 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e  ;.    }.    p->n
2c630 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20  Change++;.  }.  
2c640 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2c650 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2c660 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2c670 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
2c680 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
2c690 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  AS./* Opcode: Pa
2c6a0 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  gecount P1 P2 * 
2c6b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
2c6c0 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62  the current numb
2c6d0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64  er of pages in d
2c6e0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65  atabase P1 to me
2c6f0 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f  mory cell P2..*/
2c700 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75  .case OP_Pagecou
2c710 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
2c720 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2c730 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  ase */.  int p1;
2c740 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 0a 20 20  .  int nPage;.  
2c750 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 0a  Pager *pPager;..
2c760 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20    p1 = pOp->p1; 
2c770 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2c780 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62  te3BtreePager(db
2c790 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 29 3b 0a  ->aDb[p1].pBt);.
2c7a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
2c7b0 67 65 72 50 61 67 65 63 6f 75 6e 74 28 70 50 61  gerPagecount(pPa
2c7c0 67 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a 20 20  ger, &nPage);.  
2c7d0 2f 2a 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 20  /* OP_Pagecount 
2c7e0 69 73 20 61 6c 77 61 79 73 20 63 61 6c 6c 65 64  is always called
2c7f0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 72   from within a r
2c800 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ead transaction.
2c810 20 20 54 68 65 0a 20 20 2a 2a 20 70 61 67 65 20    The.  ** page 
2c820 63 6f 75 6e 74 20 68 61 73 20 61 6c 72 65 61 64  count has alread
2c830 79 20 62 65 65 6e 20 73 75 63 63 65 73 73 66 75  y been successfu
2c840 6c 6c 79 20 72 65 61 64 20 61 6e 64 20 63 61 63  lly read and cac
2c850 68 65 64 2e 20 20 53 6f 20 74 68 65 0a 20 20 2a  hed.  So the.  *
2c860 2a 20 73 71 6c 69 74 65 33 50 61 67 65 72 50 61  * sqlite3PagerPa
2c870 67 65 63 6f 75 6e 74 28 29 20 63 61 6c 6c 20 61  gecount() call a
2c880 62 6f 76 65 20 63 61 6e 6e 6f 74 20 66 61 69 6c  bove cannot fail
2c890 2e 20 2a 2f 0a 20 20 69 66 28 20 41 4c 57 41 59  . */.  if( ALWAY
2c8a0 53 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  S(rc==SQLITE_OK)
2c8b0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
2c8c0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2c8d0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e     pOut->u.i = n
2c8e0 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Page;.  }.  brea
2c8f0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2c900 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c910 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65  _TRACE./* Opcode
2c920 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34  : Trace * * * P4
2c930 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63   *.**.** If trac
2c940 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
2c950 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
2c960 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
2c970 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
2c980 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
2c990 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
2c9a0 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
2c9b0 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  ace callback..*/
2c9c0 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20  .case OP_Trace: 
2c9d0 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  {.  char *zTrace
2c9e0 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70  ;..  zTrace = (p
2c9f0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
2ca00 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b  p4.z : p->zSql);
2ca10 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b  .  if( zTrace ){
2ca20 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54 72  .    if( db->xTr
2ca30 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ace ){.      db-
2ca40 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
2ca50 63 65 41 72 67 2c 20 7a 54 72 61 63 65 29 3b 0a  ceArg, zTrace);.
2ca60 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
2ca70 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
2ca80 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
2ca90 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
2caa0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2cab0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
2cac0 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
2cad0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d  , zTrace);.    }
2cae0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2caf0 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20  E_DEBUG */.  }. 
2cb00 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2cb10 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  .../* Opcode: No
2cb20 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  op * * * * *.**.
2cb30 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20  ** Do nothing.  
2cb40 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2cb50 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c   is often useful
2cb60 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65   as a jump.** de
2cb70 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  stination..*/./*
2cb80 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78  .** The magic Ex
2cb90 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65  plain opcode are
2cba0 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77   only inserted w
2cbb0 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28  hen explain==2 (
2cbc0 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73  which.** is to s
2cbd0 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c  ay when the EXPL
2cbe0 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73  AIN QUERY PLAN s
2cbf0 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a  yntax is used.).
2cc00 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  ** This opcode r
2cc10 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69  ecords informati
2cc20 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69  on from the opti
2cc30 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68  mizer.  It is th
2cc40 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73  e.** the same as
2cc50 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20   a no-op.  This 
2cc60 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70  opcodesnever app
2cc70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56  ears in a real V
2cc80 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65  M program..*/.de
2cc90 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20  fault: {        
2cca0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61    /* This is rea
2ccb0 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20  lly OP_Noop and 
2ccc0 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20  OP_Explain */.  
2ccd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
2cce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ccf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd20 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
2cd30 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
2cd40 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
2cd50 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
2cd60 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
2cd70 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
2cd80 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
2cd90 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
2cda0 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
2cdb0 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
2cdc0 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
2cdd0 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
2cde0 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
2cdf0 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
2ce00 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
2ce10 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
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 2a 2a 2a  ****************
2ce60 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
2ce70 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
2ce80 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
2ce90 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71  u64 elapsed = sq
2cea0 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20  lite3Hwtime() - 
2ceb0 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70  start;.      pOp
2cec0 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70  ->cycles += elap
2ced0 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  sed;.      pOp->
2cee0 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20  cnt++;.#if 0.   
2cef0 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
2cf00 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20  out, "%10llu ", 
2cf10 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20  elapsed);.      
2cf20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
2cf30 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69  ntOp(stdout, ori
2cf40 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72 69  gPc, &p->aOp[ori
2cf50 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  gPc]);.#endif.  
2cf60 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
2cf70 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
2cf80 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69   code adds nothi
2cf90 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ng to the actual
2cfa0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20   functionality. 
2cfb0 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f     ** of the pro
2cfc0 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c  gram.  It is onl
2cfd0 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69  y here for testi
2cfe0 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
2cff0 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20  ..    ** On the 
2d000 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64  other hand, it d
2d010 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63  oes burn CPU cyc
2d020 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74  les every time t
2d030 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68  hrough.    ** th
2d040 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70  e evaluator loop
2d050 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61  .  So we can lea
2d060 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e  ve it out when N
2d070 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
2d080 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66  ..    */.#ifndef
2d090 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65   NDEBUG.    asse
2d0a0 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63  rt( pc>=-1 && pc
2d0b0 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64  <p->nOp );..#ifd
2d0c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2d0d0 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
2d0e0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
2d0f0 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d  !=0 ) fprintf(p-
2d100 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22  >trace,"rc=%d\n"
2d110 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
2d120 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
2d130 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
2d140 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  SE ){.        re
2d150 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
2d160 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 70  race, pOp->p2, p
2d170 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Out);.      }.  
2d180 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
2d190 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  ty & OPFLG_OUT3 
2d1a0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
2d1b0 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
2d1c0 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  e, pOp->p3, pOut
2d1d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2d1e0 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
2d1f0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
2d200 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
2d210 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
2d220 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
2d230 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
2d240 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
2d250 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
2d260 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
2d270 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
2d280 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
2d290 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
2d2a0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
2d2b0 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
2d2c0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
2d2d0 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
2d2e0 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
2d2f0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
2d300 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d310 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
2d320 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
2d330 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
2d340 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54  E_ERROR;..  /* T
2d350 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
2d360 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20  way out of this 
2d370 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68  procedure.  We h
2d380 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65  ave to.  ** rele
2d390 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20  ase the mutexes 
2d3a0 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77  on btrees that w
2d3b0 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20  ere acquired at 
2d3c0 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f  the.  ** top. */
2d3d0 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20  .vdbe_return:.  
2d3e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65  sqlite3BtreeMute
2d3f0 78 41 72 72 61 79 4c 65 61 76 65 28 26 70 2d 3e  xArrayLeave(&p->
2d400 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  aMutex);.  retur
2d410 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  n rc;..  /* Jump
2d420 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74   to here if a st
2d430 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72  ring or blob lar
2d440 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f  ger than SQLITE_
2d450 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20  MAX_LENGTH.  ** 
2d460 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
2d470 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20    */.too_big:.  
2d480 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2d490 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d4a0 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  , "string or blo
2d4b0 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72  b too big");.  r
2d4c0 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
2d4d0 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  G;.  goto vdbe_e
2d4e0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
2d4f0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
2d500 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
2d510 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  s..  */.no_mem:.
2d520 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2d530 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
2d540 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d550 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74  ErrMsg, db, "out
2d560 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20   of memory");.  
2d570 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2d580 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  M;.  goto vdbe_e
2d590 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
2d5a0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f   Jump to here fo
2d5b0 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  r an SQLITE_MISU
2d5c0 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a 61  SE error..  */.a
2d5d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2d5e0 73 65 3a 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  se:.  rc = SQLIT
2d5f0 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f 2a 20 46  E_MISUSE;.  /* F
2d600 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20 61 62  all thru into ab
2d610 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d620 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74   */..  /* Jump t
2d630 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
2d640 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
2d650 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
2d660 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
2d670 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
2d680 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
2d690 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
2d6a0 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
2d6b0 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
2d6c0 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
2d6d0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
2d6e0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
2d6f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2d700 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
2d710 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2d720 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2d730 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2d740 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
2d750 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
2d760 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
2d770 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
2d780 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
2d790 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
2d7a0 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
2d7b0 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
2d7c0 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
2d7d0 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
2d7e0 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
2d7f0 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
2d800 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
2d810 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
2d820 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
2d830 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2d840 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2d850 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
2d860 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
2d870 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.