/ Hex Artifact Content
Login

Artifact a158f0f3efbf2a66037dbfe4024398719cf61596:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 37 34 20 32 30 30 39  e.c,v 1.874 2009
0850: 2f 30 37 2f 32 34 20 31 37 3a 35 38 3a 35 33 20  /07/24 17:58:53 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08b0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08c0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08d0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08e0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08f0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0900: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
0910: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0920: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0930: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0940: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0950: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0960: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0970: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0980: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0990: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09a0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09b0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09c0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09d0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09e0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a00: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a10: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a30: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a40: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a50: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a60: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a70: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a80: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a90: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0aa0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ab0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ac0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0ad0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0ae0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0af0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b00: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b10: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b20: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b30: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b40: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b50: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b60: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b80: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0ba0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0bc0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0be0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bf0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c00: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c10: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c20: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c30: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c40: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c50: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c60: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c70: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c80: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c90: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0ca0: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0cb0: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0cc0: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0cd0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ce0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0d00: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0d10: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0d30: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d40: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d50: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d60: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d70: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d80: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d90: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0da0: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0db0: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0dc0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0dd0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0de0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0df0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0e00: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0e10: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0e20: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0e30: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e40: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e50: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e60: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e70: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e80: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0ea0: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0eb0: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0ec0: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0ed0: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ee0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0ef0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0f00: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0f10: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0f20: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0f30: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f50: 2a 20 54 65 73 74 20 61 20 72 65 67 69 73 74 65  * Test a registe
0f60: 72 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 65  r to see if it e
0f70: 78 63 65 65 64 73 20 74 68 65 20 63 75 72 72 65  xceeds the curre
0f80: 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62 20  nt maximum blob 
0f90: 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74 20 64  size..** If it d
0fa0: 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  oes, record the 
0fb0: 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62  new maximum blob
0fc0: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   size..*/.#if de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
0fe0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
0ff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1000: 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  IN_TEST).# defin
1010: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
1020: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
1030: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
1040: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
1050: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1060: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1070: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1080: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1090: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
10a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
10b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
10c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
10d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
10e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
10f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1100: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1110: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1120: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1130: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1140: 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20 7b  P,enc)) \.     {
1150: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a   goto no_mem; }.
1160: 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65  ./*.** An epheme
1170: 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ral string value
1180: 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74   (signified by t
1190: 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61  he MEM_Ephem fla
11a0: 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  g) contains.** a
11b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79   pointer to a dy
11c0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
11d0: 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65  ted string where
11e0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69   some other enti
11f0: 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73  ty.** is respons
1200: 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63  ible for dealloc
1210: 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e  ating that strin
1220: 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  g.  Because the 
1230: 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73  register.** does
1240: 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65   not control the
1250: 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68   string, it migh
1260: 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74  t be deleted wit
1270: 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65  hout the registe
1280: 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e  r.** knowing it.
1290: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
12a0: 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  ine converts an 
12b0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12c0: 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61   into a dynamica
12d0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  lly allocated.**
12e0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65   string that the
12f0: 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66   register itself
1300: 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f   controls.  In o
1310: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a  ther words, it.*
1320: 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45  * converts an ME
1330: 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69  M_Ephem string i
1340: 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e 20 73  nto an MEM_Dyn s
1350: 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tring..*/.#defin
1360: 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  e Deephemeralize
1370: 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50  (P) \.   if( ((P
1380: 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68  )->flags&MEM_Eph
1390: 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20  em)!=0 \.       
13a0: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
13b0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50  mMakeWriteable(P
13c0: 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ) ){ goto no_mem
13d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20 73  ;}../*.** Call s
13e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
13f0: 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74 68 65  andBlob() on the
1400: 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75 65 20   supplied value 
1410: 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a 20 50  (type Mem*).** P
1420: 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   if required..*/
1430: 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42  .#define ExpandB
1440: 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c  lob(P) (((P)->fl
1450: 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71  ags&MEM_Zero)?sq
1460: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
1470: 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a 2f 2a  ndBlob(P):0)../*
1480: 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65  .** Argument pMe
1490: 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 72 65  m points at a re
14a0: 67 69 73 74 65 72 20 74 68 61 74 20 77 69 6c 6c  gister that will
14b0: 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 61 0a   be passed to a.
14c0: 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ** user-defined 
14d0: 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74 75  function or retu
14e0: 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
14f0: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f   as the result o
1500: 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68  f a query..** Th
1510: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
1520: 74 2c 20 27 64 62 5f 65 6e 63 27 20 69 73 20 74  t, 'db_enc' is t
1530: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1540: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 64 62   used by the vdb
1550: 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69 73 74 65  e for.** registe
1560: 72 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54 68  r variables.  Th
1570: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
1580: 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61 6e  the pMem->enc an
1590: 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a 20  d pMem->type.** 
15a0: 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20 62  variables used b
15b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
15c0: 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65 73  lue_*() routines
15d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74 6f  ..*/.#define sto
15e0: 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29 20  reTypeInfo(A,B) 
15f0: 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41  _storeTypeInfo(A
1600: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 73  ).static void _s
1610: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65 6d  toreTypeInfo(Mem
1620: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1630: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1640: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1650: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1660: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1670: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1680: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1690: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
16a0: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
16b0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
16c0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16d0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
16e0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
16f0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
1700: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1710: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1720: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1730: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1740: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1750: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1760: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1770: 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69 65 73 20  *.** Properties 
1780: 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  of opcodes.  The
1790: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
17a0: 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63  ER macro is.** c
17b0: 72 65 61 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f  reated by mkopco
17c0: 64 65 68 2e 61 77 6b 20 64 75 72 69 6e 67 20 63  deh.awk during c
17d0: 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74  ompilation.  Dat
17e0: 61 20 69 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  a is obtained.**
17f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e   from the commen
1800: 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1810: 20 22 63 61 73 65 20 4f 50 5f 78 78 78 78 3a 22   "case OP_xxxx:"
1820: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a   statements in.*
1830: 2a 20 74 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a  * this file.  .*
1840: 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75  /.static const u
1850: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 70 63  nsigned char opc
1860: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20  odeProperty[] = 
1870: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
1880: 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  R;../*.** Return
1890: 20 74 72 75 65 20 69 66 20 61 6e 20 6f 70 63 6f   true if an opco
18a0: 64 65 20 68 61 73 20 61 6e 79 20 6f 66 20 74 68  de has any of th
18b0: 65 20 4f 50 46 4c 47 5f 78 78 78 20 70 72 6f 70  e OPFLG_xxx prop
18c0: 65 72 74 69 65 73 0a 2a 2a 20 73 70 65 63 69 66  erties.** specif
18d0: 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a  ied by mask..*/.
18e0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4f  int sqlite3VdbeO
18f0: 70 63 6f 64 65 48 61 73 50 72 6f 70 65 72 74 79  pcodeHasProperty
1900: 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74  (int opcode, int
1910: 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73 65 72 74   mask){.  assert
1920: 28 20 6f 70 63 6f 64 65 3e 30 20 26 26 20 6f 70  ( opcode>0 && op
1930: 63 6f 64 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66  code<(int)sizeof
1940: 28 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29  (opcodeProperty)
1950: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70   );.  return (op
1960: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63  codeProperty[opc
1970: 6f 64 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d  ode]&mask)!=0;.}
1980: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1990: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
19a0: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
19b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
19c0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
19d0: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
19e0: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
19f0: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1a00: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1a10: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
1a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a30: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
1a40: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
1a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a60: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1a70: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1a80: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1a90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aa0: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1ab0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1ac0: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
1ae0: 6e 20 64 61 74 61 62 61 73 65 20 74 68 65 20 63  n database the c
1af0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1b00: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74  , or -1 */.  int
1b10: 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 20   isBtreeCursor  
1b20: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 42     /* True for B
1b30: 2d 54 72 65 65 20 76 73 2e 20 70 73 65 75 64 6f  -Tree vs. pseudo
1b40: 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a  -table or vtab *
1b50: 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74  /.){.  /* Find t
1b60: 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
1b70: 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
1b80: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c   to store the bl
1b90: 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a  ob of memory.  *
1ba0: 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  * required for t
1bb0: 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73  his VdbeCursor s
1bc0: 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20  tructure. It is 
1bd0: 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73  convenient to us
1be0: 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d  e a .  ** vdbe m
1bf0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61  emory cell to ma
1c00: 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  nage the memory 
1c10: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69  allocation requi
1c20: 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56  red for a.  ** V
1c30: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1c40: 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c  ure for the foll
1c50: 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20  owing reasons:. 
1c60: 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d   **.  **   * Som
1c70: 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75  etimes cursor nu
1c80: 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66  mbers are used f
1c90: 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64  or a couple of d
1ca0: 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20  ifferent.  **   
1cb0: 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20    purposes in a 
1cc0: 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68  vdbe program. Th
1cd0: 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73  e different uses
1ce0: 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20   might require. 
1cf0: 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e   **     differen
1d00: 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69  t sized allocati
1d10: 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ons. Memory cell
1d20: 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62  s provide growab
1d30: 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f  le.  **     allo
1d40: 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  cations..  **.  
1d50: 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e  **   * When usin
1d60: 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  g ENABLE_MEMORY_
1d70: 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f  MANAGEMENT, memo
1d80: 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20  ry cell buffers 
1d90: 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20  can.  **     be 
1da0: 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61  freed lazily via
1db0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c   the sqlite3_rel
1dc0: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50  ease_memory() AP
1dd0: 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20  I. This.  **    
1de0: 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e   minimizes the n
1df0: 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20  umber of malloc 
1e00: 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68  calls made by th
1e10: 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20  e system..  **. 
1e20: 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73   ** Memory cells
1e30: 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65   for cursors are
1e40: 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68   allocated at th
1e50: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64  e top of the add
1e60: 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e  ress.  ** space.
1e70: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   Memory cell (p-
1e80: 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e  >nMem) correspon
1e90: 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20  ds to cursor 0. 
1ea0: 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63  Space for.  ** c
1eb0: 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67  ursor 1 is manag
1ec0: 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c  ed by memory cel
1ed0: 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65  l (p->nMem-1), e
1ee0: 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  tc..  */.  Mem *
1ef0: 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
1f00: 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a  p->nMem-iCur];..
1f10: 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56    int nByte;.  V
1f20: 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d  dbeCursor *pCx =
1f30: 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20   0;.  nByte = . 
1f40: 20 20 20 20 20 73 69 7a 65 6f 66 28 56 64 62 65       sizeof(Vdbe
1f50: 43 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20 20  Cursor) + .     
1f60: 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72 3f   (isBtreeCursor?
1f70: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1f80: 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20  orSize():0) + . 
1f90: 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69       2*nField*si
1fa0: 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61 73  zeof(u32);..  as
1fb0: 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43  sert( iCur<p->nC
1fc0: 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
1fd0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b  ->apCsr[iCur] ){
1fe0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1ff0: 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
2000: 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20  >apCsr[iCur]);. 
2010: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2020: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ] = 0;.  }.  if(
2030: 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69   SQLITE_OK==sqli
2040: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
2050: 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29  Mem, nByte, 0) )
2060: 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  {.    p->apCsr[i
2070: 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64  Cur] = pCx = (Vd
2080: 62 65 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e  beCursor*)pMem->
2090: 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d  z;.    memset(pM
20a0: 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29  em->z, 0, nByte)
20b0: 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d  ;.    pCx->iDb =
20c0: 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e   iDb;.    pCx->n
20d0: 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a  Field = nField;.
20e0: 20 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29      if( nField )
20f0: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79  {.      pCx->aTy
2100: 70 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65  pe = (u32 *)&pMe
2110: 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65  m->z[sizeof(Vdbe
2120: 43 75 72 73 6f 72 29 5d 3b 0a 20 20 20 20 7d 0a  Cursor)];.    }.
2130: 20 20 20 20 69 66 28 20 69 73 42 74 72 65 65 43      if( isBtreeC
2140: 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70  ursor ){.      p
2150: 43 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42  Cx->pCursor = (B
2160: 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  tCursor*).      
2170: 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a      &pMem->z[siz
2180: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 2b  eof(VdbeCursor)+
2190: 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28  2*nField*sizeof(
21a0: 75 33 32 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d  u32)];.    }.  }
21b0: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
21c0: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
21d0: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
21e0: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
21f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
2200: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
2210: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
2220: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
2230: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2240: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
2250: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
2260: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
2270: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
2280: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
2290: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
22a0: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
22b0: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
22c0: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
22d0: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
22e0: 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63  ec){.  if( (pRec
22f0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52  ->flags & (MEM_R
2300: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30  eal|MEM_Int))==0
2310: 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c   ){.    int real
2320: 6e 75 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  num;.    sqlite3
2330: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
2340: 61 74 65 28 70 52 65 63 29 3b 0a 20 20 20 20 69  ate(pRec);.    i
2350: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  f( (pRec->flags&
2360: 4d 45 4d 5f 53 74 72 29 0a 20 20 20 20 20 20 20  MEM_Str).       
2370: 20 20 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75    && sqlite3IsNu
2380: 6d 62 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72  mber(pRec->z, &r
2390: 65 61 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65 6e  ealnum, pRec->en
23a0: 63 29 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20  c) ){.      i64 
23b0: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  value;.      sql
23c0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
23d0: 63 6f 64 69 6e 67 28 70 52 65 63 2c 20 53 51 4c  coding(pRec, SQL
23e0: 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20  ITE_UTF8);.     
23f0: 20 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26   if( !realnum &&
2400: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70   sqlite3Atoi64(p
2410: 52 65 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29 20  Rec->z, &value) 
2420: 29 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d  ){.        pRec-
2430: 3e 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20  >u.i = value;.  
2440: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
2450: 46 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49  Flag(pRec, MEM_I
2460: 6e 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  nt);.      }else
2470: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
2480: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
2490: 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pRec);.      }. 
24a0: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
24b0: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
24c0: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
24d0: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
24e0: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
24f0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2500: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2510: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
2520: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
2530: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
2540: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
2550: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2560: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
2570: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2580: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2590: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
25a0: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
25b0: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
25c0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
25d0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
25e0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
25f0: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2600: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2610: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
2620: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
2630: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2640: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
2650: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
2660: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
2670: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2680: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2690: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
26a0: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
26b0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
26c0: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
26d0: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
26e0: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
26f0: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2700: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2710: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
2720: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
2730: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
2740: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
2750: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
2760: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
2770: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2780: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2790: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
27a0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
27b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
27c0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
27d0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
27e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
27f0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
2800: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
2810: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
2820: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
2830: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
2840: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
2850: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
2860: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
2870: 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  tion..    */.   
2880: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2890: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26  lags&MEM_Str) &&
28a0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d   (pRec->flags&(M
28b0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29  EM_Real|MEM_Int)
28c0: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
28d0: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
28e0: 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20  fy(pRec, enc);. 
28f0: 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66     }.    pRec->f
2900: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65  lags &= ~(MEM_Re
2910: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  al|MEM_Int);.  }
2920: 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74  else if( affinit
2930: 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  y!=SQLITE_AFF_NO
2940: 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  NE ){.    assert
2950: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2960: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c  TE_AFF_INTEGER |
2970: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2980: 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20  TE_AFF_REAL.    
2990: 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69           || affi
29a0: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
29b0: 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20  _NUMERIC );.    
29c0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
29d0: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20  nity(pRec);.    
29e0: 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
29f0: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
2a00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
2a10: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
2a20: 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Rec);.    }.  }.
2a30: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
2a40: 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65  convert the type
2a50: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61   of a function a
2a60: 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73  rgument or a res
2a70: 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e  ult column.** in
2a80: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
2a90: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73  resentation.  Us
2aa0: 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52  e either INTEGER
2ab0: 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76   or REAL whichev
2ac0: 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72  er.** is appropr
2ad0: 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20  iate.  But only 
2ae0: 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  do the conversio
2af0: 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69  n if it is possi
2b00: 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c  ble without.** l
2b10: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2b20: 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  on and return th
2b30: 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f  e revised type o
2b40: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a  f the argument..
2b50: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e  **.** This is an
2b60: 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 61 70   EXPERIMENTAL ap
2b70: 69 20 61 6e 64 20 69 73 20 73 75 62 6a 65 63 74  i and is subject
2b80: 20 74 6f 20 63 68 61 6e 67 65 20 6f 72 20 72 65   to change or re
2b90: 6d 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71  moval..*/.int sq
2ba0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65  lite3_value_nume
2bb0: 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33  ric_type(sqlite3
2bc0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
2bd0: 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65   Mem *pMem = (Me
2be0: 6d 2a 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79  m*)pVal;.  apply
2bf0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2c00: 70 4d 65 6d 29 3b 0a 20 20 73 74 6f 72 65 54 79  pMem);.  storeTy
2c10: 70 65 49 6e 66 6f 28 70 4d 65 6d 2c 20 30 29 3b  peInfo(pMem, 0);
2c20: 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e  .  return pMem->
2c30: 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  type;.}../*.** E
2c40: 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20  xported version 
2c50: 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  of applyAffinity
2c60: 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72  (). This one wor
2c70: 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61  ks on sqlite3_va
2c80: 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68  lue*, .** not th
2c90: 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20  e internal Mem* 
2ca0: 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  type..*/.void sq
2cb0: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2cc0: 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74  ffinity(.  sqlit
2cd0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20  e3_value *pVal, 
2ce0: 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20  .  u8 affinity, 
2cf0: 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61  .  u8 enc.){.  a
2d00: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65  pplyAffinity((Me
2d10: 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69  m *)pVal, affini
2d20: 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66  ty, enc);.}..#if
2d30: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2d40: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
2d50: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
2d60: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2d70: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
2d80: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
2d90: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
2da0: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
2db0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
2dc0: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
2dd0: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
2de0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
2df0: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
2e00: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
2e10: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
2e20: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
2e30: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
2e40: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
2e50: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
2e60: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
2e70: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
2e80: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
2e90: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
2ea0: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
2eb0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2ec0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2ed0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2ee0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2ef0: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
2f00: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
2f10: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2f20: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
2f30: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2f40: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2f50: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
2f60: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
2f70: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f80: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
2f90: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2fa0: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
2fb0: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  ';.    }..    sq
2fc0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
2fd0: 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20  00, zCsr, "%c", 
2fe0: 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  c);.    zCsr += 
2ff0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3000: 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCsr);.    sqlit
3010: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3020: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
3030: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
3040: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3050: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
3060: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3070: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3080: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3090: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
30a0: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
30b0: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
30c0: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
30d0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
30e0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
30f0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3100: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3110: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
3120: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
3130: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
3140: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
3150: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
3160: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
3170: 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  z;.    }..    sq
3180: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3190: 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c  00, zCsr, "]%s",
31a0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
31b0: 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20  enc]);.    zCsr 
31c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  30(zCsr);.    if
31e0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
31f0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3200: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3210: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3220: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3230: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3240: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3250: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3260: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3270: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3280: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3290: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
32a0: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
32b0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
32c0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
32d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
32e0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
32f0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3300: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3310: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3320: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3330: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3340: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3350: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3360: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3370: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3380: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3390: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
33a0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
33b0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
33c0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
33d0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
33e0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
33f0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3400: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3410: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3420: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3430: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3440: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3450: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3460: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3470: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3480: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3490: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
34a0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
34b0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
34c0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34d0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
34e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
34f0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3500: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3510: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3520: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3530: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3540: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3550: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3560: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3570: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3580: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3590: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
35a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35b0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
35c0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
35d0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
35e0: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
35f0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3600: 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20  TracePrint(FILE 
3610: 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  *out, Mem *p){. 
3620: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3630: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3640: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3650: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3660: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3670: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3680: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3690: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
36a0: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
36b0: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
36c0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36d0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
36e0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36f0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
3700: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3710: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3720: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3730: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3740: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3750: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3760: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3770: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3780: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3790: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
37a0: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
37b0: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
37c0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
37d0: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
37e0: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37f0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
3800: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
3810: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
3820: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
3830: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
3840: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3850: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3860: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3870: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3880: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3890: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
38a0: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
38b0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
38c0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
38d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
38e0: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
38f0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
3900: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
3910: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
3920: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
3930: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3940: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3950: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3960: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3970: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3980: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3990: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
39a0: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
39b0: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
39c0: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
39d0: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
39e0: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
39f0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
3a00: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
3a10: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
3a20: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
3a30: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
3a40: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a50: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a60: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a70: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3a80: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3a90: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3aa0: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3ab0: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3ac0: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3ad0: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3ae0: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3af0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3b00: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3b10: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3b20: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3b30: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3b40: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b50: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b60: 61 74 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  at we needed.  B
3b70: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3b80: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3b90: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3ba0: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3bb0: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3bc0: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3bd0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3be0: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3bf0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3c00: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3c10: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3c20: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3c30: 44 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74  DEBUG.static int
3c40: 20 66 69 6c 65 45 78 69 73 74 73 28 73 71 6c 69   fileExists(sqli
3c50: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
3c60: 68 61 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69  har *zFile){.  i
3c70: 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e  nt res = 0;.  in
3c80: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
3c90: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
3ca0: 54 45 53 54 0a 20 20 2f 2a 20 49 66 20 77 65 20  TEST.  /* If we 
3cb0: 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 74 65  are currently te
3cc0: 73 74 69 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c  sting IO errors,
3cd0: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c   then do not cal
3ce0: 6c 20 4f 73 41 63 63 65 73 73 28 29 20 74 6f 0a  l OsAccess() to.
3cf0: 20 20 2a 2a 20 74 65 73 74 20 66 6f 72 20 74 68    ** test for th
3d00: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 7a 46  e presence of zF
3d10: 69 6c 65 2e 20 54 68 69 73 20 69 73 20 62 65 63  ile. This is bec
3d20: 61 75 73 65 20 61 6e 79 20 49 4f 20 65 72 72 6f  ause any IO erro
3d30: 72 20 74 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75  r that.  ** occu
3d40: 72 73 20 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74  rs here will not
3d50: 20 62 65 20 72 65 70 6f 72 74 65 64 2c 20 63 61   be reported, ca
3d60: 75 73 69 6e 67 20 74 68 65 20 74 65 73 74 20 74  using the test t
3d70: 6f 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65  o fail..  */.  e
3d80: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
3d90: 33 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69  3_io_error_pendi
3da0: 6e 67 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  ng;.  if( sqlite
3db0: 33 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69  3_io_error_pendi
3dc0: 6e 67 3c 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20  ng<=0 ).#endif. 
3dd0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
3de0: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
3df0: 2c 20 7a 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  , zFile, SQLITE_
3e00: 41 43 43 45 53 53 5f 45 58 49 53 54 53 2c 20 26  ACCESS_EXISTS, &
3e10: 72 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  res);.  return (
3e20: 72 65 73 20 26 26 20 72 63 3d 3d 53 51 4c 49 54  res && rc==SQLIT
3e30: 45 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  E_OK);.}.#endif.
3e40: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
3e50: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
3e60: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
3e70: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
3e80: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
3e90: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
3ea0: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
3eb0: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
3ec0: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
3ed0: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
3ee0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
3ef0: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
3f00: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
3f10: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
3f20: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
3f30: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
3f40: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
3f50: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
3f60: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
3f70: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
3f80: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
3f90: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
3fa0: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
3fb0: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
3fc0: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
3fd0: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
3fe0: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
3ff0: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
4000: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
4010: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
4020: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
4030: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
4040: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
4050: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  if../*.** Execut
4060: 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56  e as much of a V
4070: 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77  DBE program as w
4080: 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72  e can then retur
4090: 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  n..**.** sqlite3
40a0: 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20  VdbeMakeReady() 
40b0: 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62  must be called b
40c0: 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69  efore this routi
40d0: 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
40e0: 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67  * close the prog
40f0: 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c  ram with a final
4100: 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20   OP_Halt and to 
4110: 73 65 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62  set up the callb
4120: 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  acks.** and the 
4130: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f  error message po
4140: 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  inter..**.** Whe
4150: 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72  never a row or r
4160: 65 73 75 6c 74 20 64 61 74 61 20 69 73 20 61 76  esult data is av
4170: 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f  ailable, this ro
4180: 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65  utine will eithe
4190: 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20  r.** invoke the 
41a0: 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20  result callback 
41b0: 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65  (if there is one
41c0: 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68  ) or return with
41d0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a  .** SQLITE_ROW..
41e0: 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65  **.** If an atte
41f0: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f  mpt is made to o
4200: 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74  pen a locked dat
4210: 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73  abase, then this
4220: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c   routine.** will
4230: 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74   either invoke t
4240: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
4250: 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e   (if there is on
4260: 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a  e) or it will.**
4270: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
4280: 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  USY..**.** If an
4290: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61   error occurs, a
42a0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
42b0: 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65  is written to me
42c0: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
42d0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
42e0: 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45  lloc() and p->zE
42f0: 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f  rrMsg is made to
4300: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d   point to that m
4310: 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72  emory..** The er
4320: 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72  ror code is stor
4330: 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20  ed in p->rc and 
4340: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
4350: 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f  urns SQLITE_ERRO
4360: 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  R..**.** If the 
4370: 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65  callback ever re
4380: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
4390: 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d  then the program
43a0: 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69   exits.** immedi
43b0: 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69  ately.  There wi
43c0: 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d  ll be no error m
43d0: 65 73 73 61 67 65 20 62 75 74 20 74 68 65 20 70  essage but the p
43e0: 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a  ->rc field is.**
43f0: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41   set to SQLITE_A
4400: 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f  BORT and this ro
4410: 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72  utine will retur
4420: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
4430: 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61  **.** A memory a
4440: 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20  llocation error 
4450: 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20  causes p->rc to 
4460: 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
4470: 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a  _NOMEM and this.
4480: 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65  ** routine to re
4490: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
44a0: 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66  R..**.** Other f
44b0: 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75  atal errors retu
44c0: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
44d0: 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69  .**.** After thi
44e0: 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69  s routine has fi
44f0: 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56  nished, sqlite3V
4500: 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68  dbeFinalize() sh
4510: 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20  ould be.** used 
4520: 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20  to clean up the 
4530: 6d 65 73 73 20 74 68 61 74 20 77 61 73 20 6c 65  mess that was le
4540: 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e  ft behind..*/.in
4550: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
4560: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4580: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
4590: 7b 0a 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20  {.  int pc;     
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
45b0: 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  * The program co
45c0: 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 70  unter */.  Op *p
45d0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
45e0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
45f0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4600: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
4610: 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61  OK;        /* Va
4620: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f  lue to return */
4630: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
4640: 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a   p->db;       /*
4650: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   The database */
4660: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4670: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4680: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
4690: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20  coding */.  Mem 
46a0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
46b0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
46c0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
46d0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
46f0: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4700: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
4710: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4720: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
4730: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4740: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4750: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4760: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20  operand */.  u8 
4770: 6f 70 50 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e  opProperty;.  in
4780: 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20  t iCompare = 0; 
4790: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
47a0: 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f  lt of last OP_Co
47b0: 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20  mpare operation 
47c0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
47d0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
47e0: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
47f0: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4800: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64  _Compare */.#ifd
4810: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4820: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4840: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
4850: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
4860: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67  de */.  int orig
4870: 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Pc;             
4880: 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f     /* Program co
4890: 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f  unter at start o
48a0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
48b0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
48c0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
48d0: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 6e  CALLBACK.  int n
48e0: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
48f0: 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73        /* Opcodes
4900: 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20   executed since 
4910: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4920: 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f  k. */.#endif.  /
4930: 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b  *** INSERT STACK
4940: 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f   UNION HERE ***/
4950: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d  ..  assert( p->m
4960: 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
4970: 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69  _RUN );  /* sqli
4980: 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66  te3_step() verif
4990: 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73  ies this */.  as
49a0: 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d  sert( db->magic=
49b0: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
49c0: 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  SY );.  sqlite3V
49d0: 64 62 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74  dbeMutexArrayEnt
49e0: 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e  er(p);.  if( p->
49f0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
4a00: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
4a10: 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c  happens if a mal
4a20: 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63  loc() inside a c
4a30: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  all to sqlite3_c
4a40: 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a  olumn_text() or.
4a50: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63      ** sqlite3_c
4a60: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66  olumn_text16() f
4a70: 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67  ailed.  */.    g
4a80: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
4a90: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d    assert( p->rc=
4aa0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
4ab0: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  >rc==SQLITE_BUSY
4ac0: 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51   );.  p->rc = SQ
4ad0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
4ae0: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4af0: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
4b00: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
4b10: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
4b20: 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   = 0;.  CHECK_FO
4b30: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73  R_INTERRUPT;.  s
4b40: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4b50: 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66 20  eSql(p);.#ifdef 
4b60: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4b70: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4b80: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4b90: 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26 26   p->pc==0 .   &&
4ba0: 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20   ((p->db->flags 
4bb0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  & SQLITE_VdbeLis
4bc0: 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78 69  ting) || fileExi
4bd0: 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65 78  sts(db, "vdbe_ex
4be0: 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20 20  plain")).  ){.  
4bf0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69    int i;.    pri
4c00: 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61  ntf("VDBE Progra
4c10: 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a  m Listing:\n");.
4c20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4c30: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4c40: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4c50: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  p; i++){.      s
4c60: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4c70: 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70 2d  p(stdout, i, &p-
4c80: 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  >aOp[i]);.    }.
4c90: 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45 78    }.  if( fileEx
4ca0: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 74  ists(db, "vdbe_t
4cb0: 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70 2d  race") ){.    p-
4cc0: 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74 3b  >trace = stdout;
4cd0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4ce0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4cf0: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4d00: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4d10: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4d20: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
4d30: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
4d40: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
4d50: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
4d60: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
4d70: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
4d80: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
4d90: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4da0: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4db0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e 61  .    pOp = &p->a
4dc0: 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20  Op[pc];..    /* 
4dd0: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69  Only allow traci
4de0: 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ng if SQLITE_DEB
4df0: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
4e00: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4e10: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
4e20: 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
4e30: 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b      if( pc==0 ){
4e40: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
4e50: 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20  "VDBE Execution 
4e60: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20  Trace:\n");.    
4e70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4e80: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4e90: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4ea0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e  3VdbePrintOp(p->
4eb0: 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b  trace, pc, pOp);
4ec0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4ed0: 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70 63  ->trace==0 && pc
4ee0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
4ef0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4f00: 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20 69  alloc();.      i
4f10: 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  f( fileExists(db
4f20: 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63 65  , "vdbe_sqltrace
4f30: 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ") ){.        sq
4f40: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4f50: 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  l(p);.      }.  
4f60: 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65      sqlite3EndBe
4f70: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
4f80: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
4f90: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
4fa0: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
4fb0: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
4fc0: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
4fd0: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
4fe0: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
4ff0: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
5000: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
5010: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
5020: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
5030: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5040: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
5050: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5060: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
5070: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5080: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
5090: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
50a0: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
50b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
50c0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
50d0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
50e0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a  _CALLBACK.    /*
50f0: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
5100: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
5110: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
5120: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
5130: 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f   number.    ** o
5140: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
5150: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
5160: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
5170: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
5180: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62     ** sqlite3Vdb
5190: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
51a0: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
51b0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
51c0: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
51d0: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
51e0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
51f0: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
5200: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
5210: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
5220: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
5230: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
5240: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
5250: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
5260: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  .      if( db->n
5270: 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72  ProgressOps==nPr
5280: 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20  ogressOps ){.   
5290: 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20       int prc;.  
52a0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
52b0: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
52c0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
52d0: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20  to_misuse;.     
52e0: 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72 6f     prc =db->xPro
52f0: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
5300: 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20  essArg);.       
5310: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
5320: 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
5330: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
5340: 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28  use;.        if(
5350: 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20   prc!=0 ){.     
5360: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
5370: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
5380: 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
5390: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20  error_halt;.    
53a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50      }.        nP
53b0: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
53c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50        }.      nP
53d0: 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20  rogressOps++;.  
53e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
53f0: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
5400: 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  up processing fo
5410: 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68 61  r any opcode tha
5420: 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20 20  t is marked.    
5430: 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75 74  ** with the "out
5440: 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74 61  2-prerelease" ta
5450: 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65 73  g.  Such opcodes
5460: 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a 20   have a single. 
5470: 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68 69     ** output whi
5480: 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ch is specified 
5490: 62 79 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  by the P2 parame
54a0: 74 65 72 2e 20 20 54 68 65 20 50 32 20 72 65 67  ter.  The P2 reg
54b0: 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73 20  ister.    ** is 
54c0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 61  initialized to a
54d0: 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20   NULL..    */.  
54e0: 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 6f    opProperty = o
54f0: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
5500: 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20  p->opcode];.    
5510: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5520: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
5530: 52 45 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a 20  RELEASE)!=0 ){. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5550: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5560: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5570: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5580: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
5590: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
55a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
55b0: 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
55c0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75  pOut);.      pOu
55d0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
55e0: 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  ull;.      pOut-
55f0: 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  >n = 0;.    }els
5600: 65 0a 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f  e. .    /* Do co
5610: 6d 6d 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f  mmon setup for o
5620: 70 63 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69  pcodes marked wi
5630: 74 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  th one of the fo
5640: 6c 6c 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63  llowing.    ** c
5650: 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70  ombinations of p
5660: 72 6f 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a  roperties..    *
5670: 2a 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  *.    **        
5680: 20 20 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20     in1.    **   
5690: 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a          in1 in2.
56a0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
56b0: 20 69 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20   in1 in2 out3.  
56c0: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
56d0: 6e 31 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20  n1 in3.    **.  
56e0: 20 20 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70    ** Variables p
56f0: 49 6e 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70  In1, pIn2, and p
5700: 49 6e 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20  In3 are made to 
5710: 70 6f 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72  point to appropr
5720: 69 61 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69  iate.    ** regi
5730: 73 74 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73  sters for inputs
5740: 2e 20 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74  .  Variable pOut
5750: 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f   points to the o
5760: 75 74 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a  utput register..
5770: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
5780: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5790: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
57a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57b0: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
57c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
57d0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
57e0: 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn1 = &p->aMem
57f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20  [pOp->p1];.     
5800: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5810: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
5820: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5830: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5840: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
5850: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5860: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5870: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
5880: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5890: 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
58a0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
58b0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
58c0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32  CE(pOp->p2, pIn2
58d0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
58e0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
58f0: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5900: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
5910: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5920: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5930: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5940: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f   );.          pO
5950: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
5960: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
5970: 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
5980: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5990: 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b  OPFLG_IN3)!=0 ){
59a0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
59b0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
59c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59d0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
59e0: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d  ;.        pIn3 =
59f0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5a00: 33 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  3];.        REGI
5a10: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5a20: 70 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20  p3, pIn3);.     
5a30: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
5a40: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5a50: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5a60: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5a70: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5a80: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5a90: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5aa0: 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d     pIn2 = &p->aM
5ab0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
5ac0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5ad0: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29  E(pOp->p2, pIn2)
5ae0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
5af0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5b00: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
5b10: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5b20: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5b30: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5b40: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5b50: 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65    pIn3 = &p->aMe
5b60: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
5b70: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5b80: 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b  (pOp->p3, pIn3);
5b90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74  .    }..    swit
5ba0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
5bb0: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
5bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5be0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c00: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
5c10: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
5c20: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5c30: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
5c40: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
5c50: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
5c60: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
5c70: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
5c80: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
5c90: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
5ca0: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
5cb0: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
5cc0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
5cd0: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
5ce0: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
5cf0: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
5d00: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
5d10: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
5d20: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
5d30: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5d40: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
5d50: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
5d60: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
5d70: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
5d80: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
5d90: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
5da0: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
5db0: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
5dc0: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
5dd0: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
5de0: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
5df0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
5e00: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
5e10: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
5e20: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
5e30: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
5e40: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
5e50: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
5e60: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
5e70: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
5e80: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
5e90: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
5ea0: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
5eb0: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
5ec0: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
5ed0: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
5ee0: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
5ef0: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
5f00: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
5f10: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
5f20: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
5f30: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
5f40: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
5f50: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
5f60: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
5f70: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
5f80: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
5f90: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
5fa0: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
5fb0: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
5fc0: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
5fd0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
5fe0: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
5ff0: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
6000: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
6010: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
6020: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
6030: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
6040: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
6050: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
6060: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
6070: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
6080: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
6090: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
60a0: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
60b0: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
60c0: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
60d0: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
60e0: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
60f0: 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65   out2_prerelease
6100: 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53  , out2, out3.  S
6110: 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f  ee.** the mkopco
6120: 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66  deh.awk script f
6130: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
6140: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
6150: 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   Documentation a
6160: 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65  bout VDBE opcode
6170: 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  s is generated b
6180: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20  y scanning this 
6190: 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65  file.** for line
61a0: 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69  s of that contai
61b0: 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68  n "Opcode:".  Th
61c0: 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20  at line and all 
61d0: 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f  subsequent.** co
61e0: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20  mment lines are 
61f0: 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
6200: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  ration of the op
6210: 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65  code.html docume
6220: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e  ntation.** file.
6230: 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a  .**.** SUMMARY:.
6240: 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74  **.**     Format
6250: 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e  ting is importan
6260: 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61  t to scripts tha
6270: 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65  t scan this file
6280: 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20  ..**     Do not 
6290: 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65  deviate from the
62a0: 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c   formatting styl
62b0: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
62c0: 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  se..**.*********
62d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6310: 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ****/../* Opcode
6320: 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a  :  Goto * P2 * *
6330: 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f   *.**.** An unco
6340: 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74  nditional jump t
6350: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  o address P2..**
6360: 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   The next instru
6370: 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77  ction executed w
6380: 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f  ill be .** the o
6390: 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66  ne at index P2 f
63a0: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
63b0: 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67  g of.** the prog
63c0: 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
63d0: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
63e0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
63f0: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
6400: 52 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70  RUPT;.  pc = pOp
6410: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61  ->p2 - 1;.  brea
6420: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6430: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
6440: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
6450: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
6460: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
6470: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
6480: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6490: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
64a0: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
64b0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
64c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
64d0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
64e0: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
64f0: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d   );.  pIn1 = &p-
6500: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
6510: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
6520: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
6530: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
6540: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6550: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
6560: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
6570: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6580: 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  1);.  pc = pOp->
6590: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
65a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
65b0: 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20  Return P1 * * * 
65c0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
65d0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
65e0: 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61  tion after the a
65f0: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
6600: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
6610: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
6620: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
6630: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6640: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
6650: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
6660: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61  In1->u.i;.  brea
6670: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6680: 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a    Yield P1 * * *
6690: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
66a0: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
66b0: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
66c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
66d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
66e0: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
66f0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  /* in1 */.  int 
6700: 70 63 44 65 73 74 3b 0a 20 20 61 73 73 65 72 74  pcDest;.  assert
6710: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6720: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6730: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6740: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
6750: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
6760: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
6770: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6780: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6790: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
67a0: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
67b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
67c0: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
67d0: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  P3 P4 *.**.** Ch
67e0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
67f0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
6800: 66 20 69 73 20 69 73 20 4e 55 4c 4c 20 74 68 65  f is is NULL the
6810: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
6820: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
6830: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6840: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6850: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6860: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6870: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
6880: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
6890: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
68a0: 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
68b0: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
68c0: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
68d0: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
68e0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
68f0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6900: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
6910: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
6920: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6930: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
6940: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
6950: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
6960: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
6970: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
6980: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
6990: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
69a0: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
69b0: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
69c0: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
69d0: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
69e0: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
69f0: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6a00: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6a10: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
6a20: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
6a30: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
6a40: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
6a50: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
6a60: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
6a70: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
6a80: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
6a90: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
6aa0: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
6ab0: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
6ac0: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
6ad0: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6ae0: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6af0: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6b00: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
6b10: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
6b20: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
6b30: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
6b40: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
6b50: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
6b60: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
6b70: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
6b80: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
6b90: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
6ba0: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
6bb0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6bc0: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6bd0: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6be0: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6bf0: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6c00: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6c10: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
6c20: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
6c30: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
6c40: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
6c50: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
6c60: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
6c70: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6c80: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
6c90: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
6ca0: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6cb0: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6cc0: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6cd0: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6ce0: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6cf0: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6d00: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
6d10: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
6d20: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
6d30: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
6d40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6d50: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
6d60: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6d70: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6d80: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6d90: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  me);.    if( pOp
6da0: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
6db0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
6dc0: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
6dd0: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
6de0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
6df0: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
6e00: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
6e10: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
6e20: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
6e30: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
6e40: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
6e50: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
6e60: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
6e70: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
6e80: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
6e90: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
6ea0: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
6eb0: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
6ec0: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
6ed0: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
6ee0: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
6ef0: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
6f00: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
6f10: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
6f20: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  -1;.    }.    br
6f30: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72  eak;.  }..  p->r
6f40: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
6f50: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
6f60: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
6f70: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
6f80: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
6f90: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
6fa0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
6fb0: 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  db, "%s", pOp->p
6fc0: 34 2e 7a 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  4.z);.  }.  rc =
6fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
6fe0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
6ff0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
7000: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
7010: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7020: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7030: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7040: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7050: 65 7b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  e{.    rc = p->r
7060: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7070: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7080: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7090: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
70a0: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
70b0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
70c0: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
70d0: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
70e0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
70f0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7100: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
7110: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7120: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
7130: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7140: 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  _Int;.  pOut->u.
7150: 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62  i = pOp->p1;.  b
7160: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7170: 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a  de: Int64 * P2 *
7180: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
7190: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
71a0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
71b0: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
71c0: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
71d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
71e0: 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b  case OP_Int64: {
71f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7200: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7210: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7220: 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20  p4.pI64!=0 );.  
7230: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7240: 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75  M_Int;.  pOut->u
7250: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
7260: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
7270: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20  /* Opcode: Real 
7280: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
7290: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
72a0: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
72b0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
72c0: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
72d0: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
72e0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
72f0: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
7300: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7310: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
7320: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7330: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7340: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
7350: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
7360: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
7370: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d  ) );.  pOut->r =
7380: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
7390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
73a0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
73b0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  * P2 * P4 *.**.*
73c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
73d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
73e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
73f0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7400: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
7410: 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62  o an OP_String b
7420: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
7430: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
7440: 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65  st time..*/.case
7450: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
7460: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7470: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
7480: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7490: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
74a0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
74b0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
74c0: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
74d0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
74e0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
74f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7500: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
7510: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
7520: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
7530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7540: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7550: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7560: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7570: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
7580: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
7590: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
75a0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
75b0: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
75c0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
75d0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
75e0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
75f0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7600: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7610: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7620: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
7630: 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74  _Dyn );.    pOut
7640: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
7650: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
7660: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
7670: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
7680: 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69   ~MEM_Dyn;.    i
7690: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
76a0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
76b0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
76c0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
76d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
76e0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
76f0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
7700: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
7710: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
7720: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
7730: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7740: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7750: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7760: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
7770: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
7780: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
7790: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
77a0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
77b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
77c0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
77d0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
77e0: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
77f0: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7800: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7810: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7820: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7830: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7840: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7850: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7860: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
7870: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
7880: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
7890: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
78a0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
78b0: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
78c0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
78d0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
78e0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
78f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7900: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20   Opcode: Null * 
7910: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
7920: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
7930: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7940: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
7950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7960: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7970: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
7980: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
7990: 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50   P2 * P4.**.** P
79a0: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
79b0: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
79c0: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
79d0: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
79e0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 54 68   register P2. Th
79f0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
7a00: 73 20 6e 6f 74 20 63 6f 64 65 64 20 64 69 72 65  s not coded dire
7a10: 63 74 6c 79 0a 2a 2a 20 62 79 20 74 68 65 20 63  ctly.** by the c
7a20: 6f 6d 70 69 6c 65 72 2e 20 49 6e 73 74 65 61 64  ompiler. Instead
7a30: 2c 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c  , the compiler l
7a40: 61 79 65 72 20 73 70 65 63 69 66 69 65 73 0a 2a  ayer specifies.*
7a50: 2a 20 61 6e 20 4f 50 5f 48 65 78 42 6c 6f 62 20  * an OP_HexBlob 
7a60: 6f 70 63 6f 64 65 2c 20 77 69 74 68 20 74 68 65  opcode, with the
7a70: 20 68 65 78 20 73 74 72 69 6e 67 20 72 65 70 72   hex string repr
7a80: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a  esentation of.**
7a90: 20 74 68 65 20 62 6c 6f 62 20 61 73 20 50 34 2e   the blob as P4.
7aa0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
7ab0: 74 72 61 6e 73 66 6f 72 6d 65 64 20 74 6f 20 61  transformed to a
7ac0: 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65  n OP_Blob.** the
7ad0: 20 66 69 72 73 74 20 74 69 6d 65 20 69 74 20 69   first time it i
7ae0: 73 20 65 78 65 63 75 74 65 64 2e 0a 2a 2f 0a 63  s executed..*/.c
7af0: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7b10: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7b20: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7b30: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
7b40: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
7b50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7b60: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7b70: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
7b80: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
7b90: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
7ba0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7bb0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7bc0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7bd0: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
7be0: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
7bf0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
7c00: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
7c10: 6d 65 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  meters P1..P1+P3
7c20: 2d 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  -1 into register
7c30: 73 0a 2a 2a 20 50 32 2e 2e 50 32 2b 50 33 2d 31  s.** P2..P2+P3-1
7c40: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  ..**.** If the p
7c50: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
7c60: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
7c70: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20 61   appears in P4 a
7c80: 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65  nd P3==1..** The
7c90: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
7ca0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
7cb0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
7cc0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
7cd0: 61 72 69 61 62 6c 65 3a 20 7b 0a 20 20 69 6e 74  ariable: {.  int
7ce0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
7cf0: 20 56 61 72 69 61 62 6c 65 20 74 6f 20 63 6f 70   Variable to cop
7d00: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
7d10: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
7d20: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7d30: 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20   to */.  int n; 
7d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7d50: 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6c 65  ber of values le
7d60: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
7d70: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
7d80: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
7d90: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
7da0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    p1 = pOp->p1 -
7db0: 20 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   1;.  p2 = pOp->
7dc0: 70 32 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  p2;.  n = pOp->p
7dd0: 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e  3;.  assert( p1>
7de0: 3d 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e  =0 && p1+n<=p->n
7df0: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
7e00: 20 70 32 3e 3d 31 20 26 26 20 70 32 2b 6e 2d 31   p2>=1 && p2+n-1
7e10: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
7e20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7e30: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  ==0 || pOp->p3==
7e40: 31 20 29 3b 0a 0a 20 20 77 68 69 6c 65 28 20 6e  1 );..  while( n
7e50: 2d 2d 20 3e 20 30 20 29 7b 0a 20 20 20 20 70 56  -- > 0 ){.    pV
7e60: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 31  ar = &p->aVar[p1
7e70: 2b 2b 5d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ++];.    if( sql
7e80: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
7e90: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 20  g(pVar) ){.     
7ea0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7eb0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20     }.    pOut = 
7ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 2b 5d 3b 0a  &p->aMem[p2++];.
7ed0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7ee0: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
7ef0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75  l(pOut);.    pOu
7f00: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
7f10: 75 6c 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ull;.    sqlite3
7f20: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
7f30: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
7f40: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
7f50: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7f60: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20  IZE(pOut);.  }. 
7f70: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7f80: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
7f90: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f   P3 * *.**.** Mo
7fa0: 76 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ve the values in
7fb0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
7fc0: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
7fd0: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
7fe0: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
7ff0: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31  ters P1..P1+P1-1
8000: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
8010: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
8020: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
8030: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
8040: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
8050: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
8060: 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63  to overlap..*/.c
8070: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
8080: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
8090: 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72    /* Holding var
80a0: 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61  iable for alloca
80b0: 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  ted memory */.  
80c0: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
80d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
80e0: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
80f0: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
8100: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
8110: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
8120: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
8130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
8140: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
8150: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
8160: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
8170: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
8180: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
8190: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
81a0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
81b0: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
81c0: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
81d0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20   &p->aMem[p1];. 
81e0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
81f0: 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e  [p2];.  while( n
8200: 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  -- ){.    assert
8210: 28 20 70 4f 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d  ( pOut<=&p->aMem
8220: 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20  [p->nMem] );.   
8230: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
8240: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  p->aMem[p->nMem]
8250: 20 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20   );.    zMalloc 
8260: 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
8270: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
8280: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  oc = 0;.    sqli
8290: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
82a0: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20  Out, pIn1);.    
82b0: 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pIn1->zMalloc = 
82c0: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47  zMalloc;.    REG
82d0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
82e0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
82f0: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
8300: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8310: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
8320: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8330: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
8340: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
8350: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8360: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
8370: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
8380: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
8390: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
83a0: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
83b0: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
83c0: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
83d0: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
83e0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
83f0: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
8400: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73    /* in1 */.  as
8410: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
8420: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8430: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
8440: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
8450: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
8460: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
8470: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
8480: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
8490: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
84a0: 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68  _Ephem);.  Deeph
84b0: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
84c0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
84d0: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
84e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
84f0: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
8500: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
8510: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
8520: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
8530: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
8540: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
8550: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
8560: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
8570: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
8580: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
8590: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
85a0: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
85b0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
85c0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
85d0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
85e0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
85f0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
8600: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
8610: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
8620: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
8630: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
8640: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
8650: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
8660: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
8670: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
8680: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
8690: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
86a0: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
86b0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
86c0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
86d0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
86e0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
86f0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
8700: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 52 45    /* in1 */.  RE
8710: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
8720: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 61  ->p1, pIn1);.  a
8730: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
8740: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
8750: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
8760: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
8770: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
8780: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
8790: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
87a0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
87b0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
87c0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 52 45 47 49  M_Ephem);.  REGI
87d0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
87e0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
87f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8800: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
8810: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
8820: 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74  e registers P1 t
8830: 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63  hrough P1+P2-1 c
8840: 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
8850: 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74  row of.** result
8860: 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63  s. This opcode c
8870: 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65  auses the sqlite
8880: 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f  3_step() call to
8890: 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69   terminate.** wi
88a0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57  th an SQLITE_ROW
88b0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
88c0: 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20   it sets up the 
88d0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20  sqlite3_stmt.** 
88e0: 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f  structure to pro
88f0: 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74  vide access to t
8900: 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73  he top P1 values
8910: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   as the result.*
8920: 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  * row..*/.case O
8930: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
8940: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
8950: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
8960: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
8970: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
8980: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
8990: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
89a0: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  1+pOp->p2<=p->nM
89b0: 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  em+1 );..  /* If
89c0: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
89d0: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
89e0: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
89f0: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
8a00: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
8a10: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
8a20: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
8a30: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8a40: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
8a50: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
8a60: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
8a70: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
8a80: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
8a90: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8aa0: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
8ab0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
8ac0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
8ad0: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
8ae0: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
8af0: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
8b00: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
8b10: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
8b20: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
8b30: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
8b40: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
8b50: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
8b60: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
8b70: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
8b80: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
8b90: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
8ba0: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
8bb0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
8bc0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
8bd0: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
8be0: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
8bf0: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
8c00: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
8c10: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
8c20: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
8c30: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
8c40: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
8c50: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8c60: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
8c70: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
8c80: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
8c90: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
8ca0: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
8cb0: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
8cc0: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
8cd0: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
8ce0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
8cf0: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
8d00: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
8d10: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
8d20: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8d30: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
8d40: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
8d50: 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  ASE);.  if( NEVE
8d60: 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
8d70: 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
8d80: 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64   }..  /* Invalid
8d90: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
8da0: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
8db0: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
8dc0: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
8dd0: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
8de0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
8df0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
8e00: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
8e10: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
8e20: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
8e30: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
8e40: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
8e50: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
8e60: 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65   as.  ** as side
8e70: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
8e80: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
8e90: 74 53 65 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  tSet = &p->aMem[
8ea0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
8eb0: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
8ec0: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
8ed0: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
8ee0: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
8ef0: 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66      storeTypeInf
8f00: 6f 28 26 70 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f  o(&pMem[i], enco
8f10: 64 69 6e 67 29 3b 0a 20 20 20 20 52 45 47 49 53  ding);.    REGIS
8f20: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8f30: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
8f40: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
8f50: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
8f60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
8f70: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
8f80: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
8f90: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
8fa0: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
8fb0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8fc0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
8fd0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
8fe0: 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  *.**.** Add the 
8ff0: 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72  text in register
9000: 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64   P1 onto the end
9010: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a   of the text in.
9020: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61  ** register P2 a
9030: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9040: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9050: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9060: 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65   the P1 or P2 te
9070: 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  xt are NULL then
9080: 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50   store NULL in P
9090: 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20  3..**.**   P3 = 
90a0: 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49  P2 || P1.**.** I
90b0: 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72  t is illegal for
90c0: 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65   P1 and P3 to be
90d0: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
90e0: 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a  er. Sometimes,.*
90f0: 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73  * if P3 is the s
9100: 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20  ame register as 
9110: 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  P2, the implemen
9120: 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a  tation is able.*
9130: 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d  * to avoid a mem
9140: 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cpy()..*/.case O
9150: 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20  P_Concat: {     
9160: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9170: 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c   TK_CONCAT, in1,
9180: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9190: 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 61 73  i64 nByte;..  as
91a0: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
91b0: 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
91c0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
91d0: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
91e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
91f0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
9200: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
9210: 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64    }.  if( Expand
9220: 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78  Blob(pIn1) || Ex
9230: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29  pandBlob(pIn2) )
9240: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
9250: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
9260: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72  encoding);.  Str
9270: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
9280: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
9290: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
92a0: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
92b0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
92c0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
92d0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
92e0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _big;.  }.  MemS
92f0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
9300: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
9310: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
9320: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
9330: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
9340: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
9350: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66  no_mem;.  }.  if
9360: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
9370: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
9380: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
9390: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
93a0: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
93b0: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
93c0: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
93d0: 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a  ->z[nByte] = 0;.
93e0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
93f0: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
9400: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
9410: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
9420: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
9430: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
9440: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
9450: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
9460: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9470: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
9480: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
9490: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
94a0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
94b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
94c0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
94d0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
94e0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
94f0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
9500: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
9510: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9520: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
9530: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
9540: 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74   *.**.**.** Mult
9550: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
9560: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
9570: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9580: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
9590: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
95a0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
95b0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
95c0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
95d0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
95e0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
95f0: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
9600: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74  3 * *.**.** Subt
9610: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
9620: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
9630: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
9640: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9650: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9660: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9670: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9680: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9690: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
96a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
96b0: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
96c0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69  3 * *.**.** Divi
96d0: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
96e0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
96f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9700: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
9710: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9720: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
9730: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
9740: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
9750: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
9760: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
9770: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
9780: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9790: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
97a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
97b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
97c0: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
97d0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65   *.**.** Compute
97e0: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
97f0: 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76  fter integer div
9800: 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c  ision of the val
9810: 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  ue in.** registe
9820: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9830: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9840: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9850: 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a  esult in P3. .**
9860: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
9870: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
9880: 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20  zero the result 
9890: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65  is NULL..** If e
98a0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
98b0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
98c0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
98d0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
98f0: 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c  same as TK_PLUS,
9900: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9910: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72  */.case OP_Subtr
9920: 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  act:            
9930: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9940: 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  MINUS, in1, in2,
9950: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9960: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20  _Multiply:      
9970: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9980: 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c  as TK_STAR, in1,
9990: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
99a0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20  se OP_Divide:   
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
99c0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48  same as TK_SLASH
99d0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
99e0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61   */.case OP_Rema
99f0: 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20  inder: {        
9a00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9a10: 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _REM, in1, in2, 
9a20: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  out3 */.  int fl
9a30: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
9a40: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
9a50: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
9a60: 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  ts */.  i64 iA; 
9a70: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
9a80: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
9a90: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
9aa0: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
9ab0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
9ac0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
9ad0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
9ae0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
9af0: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
9b00: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
9b10: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
9b20: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9b30: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 61 70 70  perand */..  app
9b40: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9b50: 79 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79  y(pIn1);.  apply
9b60: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9b70: 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d  pIn2);.  flags =
9b80: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
9b90: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
9ba0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
9bb0: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
9bc0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9bd0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
9be0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
9bf0: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
9c00: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
9c10: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
9c20: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9c30: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9c40: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9c50: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9c60: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9c70: 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20  iB += iA;       
9c80: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9c90: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
9ca0: 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20    iB -= iA;     
9cb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9cc0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9cd0: 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20      iB *= iA;   
9ce0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9cf0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
9d00: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9d10: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9d20: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9d30: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f  _null;.        /
9d40: 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c  * Dividing the l
9d50: 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
9d60: 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20  negative 64-bit 
9d70: 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20  integer (1<<63) 
9d80: 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d  by .        ** -
9d90: 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74  1 returns an int
9da0: 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74  eger too large t
9db0: 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d  o store in a 64-
9dc0: 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f  bit data-type. O
9dd0: 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d  n.        ** som
9de0: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c  e architectures,
9df0: 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66   the value overf
9e00: 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e  lows to (1<<63).
9e10: 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20   On others,.    
9e20: 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20      ** a SIGFPE 
9e30: 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66  is issued. The f
9e40: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
9e50: 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68  nt normalizes th
9e60: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  is.        ** be
9e70: 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61  havior so that a
9e80: 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73  ll architectures
9e90: 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e   behave as if in
9ea0: 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a  teger .        *
9eb0: 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  * overflow occur
9ec0: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  red..        */.
9ed0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9ee0: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
9ef0: 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20  ST_INT64 ) iA = 
9f00: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  1;.        iB /=
9f10: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
9f20: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9f30: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
9f40: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
9f50: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9f60: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9f70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9f80: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
9f90: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
9fa0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9fb0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9fc0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
9fd0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
9fe0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
9ff0: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
a000: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
a010: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
a020: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
a030: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
a040: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
a050: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
a060: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
a070: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
a080: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
a090: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
a0a0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
a0b0: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
a0c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a0d0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
a0e0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
a0f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a100: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
a110: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
a120: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
a130: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
a140: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
a150: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
a160: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
a170: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a180: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a190: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
a1a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a1b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a1c0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a1d0: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
a1e0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
a1f0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
a200: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
a210: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a220: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
a230: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
a240: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
a250: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
a260: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
a270: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
a280: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
a290: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
a2a0: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
a2b0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a2c0: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
a2d0: 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  t->r = rB;.    M
a2e0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a2f0: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20  ut, MEM_Real);. 
a300: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
a310: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
a320: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a330: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
a340: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20  (pOut);.    }.  
a350: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
a360: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a370: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
a380: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
a390: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
a3a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
a3b0: 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  lSeq * * P4.**.*
a3c0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
a3d0: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73  r to a CollSeq s
a3e0: 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65  truct. If the ne
a3f0: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
a400: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
a410: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
a420: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
a430: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
a440: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a450: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
a460: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
a470: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
a480: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
a490: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
a4a0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
a4b0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
a4c0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
a4d0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
a4e0: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
a4f0: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
a500: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
a510: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
a520: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
a530: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
a540: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
a550: 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66  , only to user f
a560: 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64  unctions defined
a570: 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63   in func.c..*/.c
a580: 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20  ase OP_CollSeq: 
a590: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
a5a0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
a5b0: 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  SEQ );.  break;.
a5c0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
a5d0: 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  nction P1 P2 P3 
a5e0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  P4 P5.**.** Invo
a5f0: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
a600: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
a610: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f  ter to a Functio
a620: 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  n structure that
a630: 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20  .** defines the 
a640: 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50  function) with P
a650: 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65  5 arguments take
a660: 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
a670: 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73  P2 and.** succes
a680: 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c  sors.  The resul
a690: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
a6a0: 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  n is stored in r
a6b0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52  egister P3..** R
a6c0: 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20  egister P3 must 
a6d0: 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  not be one of th
a6e0: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74  e function input
a6f0: 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  s..**.** P1 is a
a700: 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20   32-bit bitmask 
a710: 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
a720: 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61  er or not each a
a730: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a  rgument to the .
a740: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ** function was 
a750: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65  determined to be
a760: 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d   constant at com
a770: 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68  pile time. If th
a780: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
a790: 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74  ent was constant
a7a0: 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50   then bit 0 of P
a7b0: 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69  1 is set. This i
a7c0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
a7d0: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d  ine.** whether m
a7e0: 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  eta data associa
a7f0: 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20  ted with a user 
a800: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
a810: 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73  t using the.** s
a820: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61  qlite3_set_auxda
a830: 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20  ta() API may be 
a840: 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20  safely retained 
a850: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a  until the next.*
a860: 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  * invocation of 
a870: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
a880: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67  ** See also: Agg
a890: 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61  Step and AggFina
a8a0: 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e  l.*/.case OP_Fun
a8b0: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
a8c0: 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20  ;.  Mem *pArg;. 
a8d0: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
a8e0: 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
a8f0: 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20  value **apVal;. 
a900: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
a910: 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20  Op->p5;.  apVal 
a920: 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
a930: 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
a940: 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  ==0 );..  assert
a950: 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
a960: 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
a970: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b  n<=p->nMem+1) );
a980: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a990: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
a9a0: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
a9b0: 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 70 2d   );.  pArg = &p-
a9c0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
a9d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
a9e0: 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20  i++, pArg++){.  
a9f0: 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72    apVal[i] = pAr
aa00: 67 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65  g;.    storeType
aa10: 49 6e 66 6f 28 70 41 72 67 2c 20 65 6e 63 6f 64  Info(pArg, encod
aa20: 69 6e 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ing);.    REGIST
aa30: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
aa40: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
aa50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
aa60: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
aa70: 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
aa80: 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20  P4_VDBEFUNC );. 
aa90: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
aaa0: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a  ==P4_FUNCDEF ){.
aab0: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
aac0: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
aad0: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
aae0: 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
aaf0: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
ab00: 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f   = (VdbeFunc*)pO
ab10: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b  p->p4.pVdbeFunc;
ab20: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
ab30: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e   ctx.pVdbeFunc->
ab40: 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73  pFunc;.  }..  as
ab50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
ab60: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
ab70: 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
ab80: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
ab90: 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  ];.  ctx.s.flags
aba0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
abb0: 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
abc0: 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
abd0: 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
abe0: 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  = 0;..  /* The o
abf0: 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
ac00: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
ac10: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
ac20: 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f  Move.  ** the po
ac30: 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73  inter to ctx.s s
ac40: 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
ac50: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  er-function can 
ac60: 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72  use.  ** the alr
ac70: 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
ac80: 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
ac90: 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65   allocating a ne
aca0: 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
acb0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
acc0: 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a  (&ctx.s, pOut);.
acd0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ace0: 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  (&ctx.s, MEM_Nul
acf0: 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72  l);..  ctx.isErr
ad00: 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  or = 0;.  if( ct
ad10: 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
ad20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
ad30: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
ad40: 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20  ert( pOp>p->aOp 
ad50: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
ad60: 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
ad70: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20  4_COLLSEQ );.   
ad80: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
ad90: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
ada0: 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70  Seq );.    ctx.p
adb0: 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  Coll = pOp[-1].p
adc0: 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69  4.pColl;.  }.  i
add0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
ade0: 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
adf0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
ae00: 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e  se;.  (*ctx.pFun
ae10: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
ae20: 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28  n, apVal);.  if(
ae30: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
ae40: 28 64 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  (db) ){.    sqli
ae50: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
ae60: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
ae70: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
ae80: 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69  _misuse;.  }.  i
ae90: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
aea0: 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76  led ){.    /* Ev
aeb0: 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c  en though a mall
aec0: 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c  oc() has failed,
aed0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
aee0: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ion of the.    *
aef0: 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  * user function 
af00: 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20  may have called 
af10: 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  an sqlite3_resul
af20: 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e  t_XXX() function
af30: 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72  .    ** to retur
af40: 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66  n a value. The f
af50: 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65  ollowing call re
af60: 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75  leases any resou
af70: 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f  rces.    ** asso
af80: 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68  ciated with such
af90: 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2a   a value..    **
afa0: 0a 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61  .    ** Note: Ma
afb0: 79 62 65 20 4d 65 6d 52 65 6c 65 61 73 65 28 29  ybe MemRelease()
afc0: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
afd0: 64 20 69 66 20 73 71 6c 69 74 65 33 53 61 66 65  d if sqlite3Safe
afe0: 74 79 4f 6e 28 29 0a 20 20 20 20 2a 2a 20 66 61  tyOn().    ** fa
aff0: 69 6c 73 20 61 6c 73 6f 20 28 74 68 65 20 69 66  ils also (the if
b000: 28 2e 2e 2e 29 20 73 74 61 74 65 6d 65 6e 74 20  (...) statement 
b010: 61 62 6f 76 65 29 2e 20 42 75 74 20 69 66 20 70  above). But if p
b020: 65 6f 70 6c 65 20 61 72 65 0a 20 20 20 20 2a 2a  eople are.    **
b030: 20 6d 69 73 75 73 69 6e 67 20 73 71 6c 69 74 65   misusing sqlite
b040: 2c 20 74 68 65 79 20 68 61 76 65 20 62 69 67 67  , they have bigg
b050: 65 72 20 70 72 6f 62 6c 65 6d 73 20 74 68 61 6e  er problems than
b060: 20 61 20 6c 65 61 6b 65 64 20 76 61 6c 75 65 2e   a leaked value.
b070: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
b080: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
b090: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
b0a0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
b0b0: 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78  .  /* If any aux
b0c0: 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63  iliary data func
b0d0: 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20  tions have been 
b0e0: 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75  called by this u
b0f0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  ser function,.  
b100: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63  ** immediately c
b110: 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74  all the destruct
b120: 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73  or for any non-s
b130: 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20  tatic values..  
b140: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64  */.  if( ctx.pVd
b150: 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71  beFunc ){.    sq
b160: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
b170: 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65  uxData(ctx.pVdbe
b180: 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  Func, pOp->p1);.
b190: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62      pOp->p4.pVdb
b1a0: 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  eFunc = ctx.pVdb
b1b0: 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e  eFunc;.    pOp->
b1c0: 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45  p4type = P4_VDBE
b1d0: 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  FUNC;.  }..  /* 
b1e0: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
b1f0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
b200: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
b210: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63  ption */.  if( c
b220: 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
b230: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
b240: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
b250: 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
b260: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
b270: 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
b280: 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
b290: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
b2a0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
b2b0: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
b2c0: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c  ster P3 */.  sql
b2d0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
b2e0: 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65  coding(&ctx.s, e
b2f0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
b300: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
b310: 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20  Out, &ctx.s);.  
b320: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b330: 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29  emTooBig(pOut) )
b340: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
b350: 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54  ig;.  }.  REGIST
b360: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
b370: 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
b380: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
b390: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
b3a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
b3b0: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
b3c0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
b3d0: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
b3e0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
b3f0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
b400: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
b410: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b420: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b430: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b440: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b450: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b460: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
b470: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b480: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
b490: 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  e OR of the valu
b4a0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
b4b0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
b4c0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b4d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b4e0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b4f0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b500: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b510: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
b520: 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50  hiftLeft P1 P2 P
b530: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b540: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b550: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b560: 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62  P2 to the left b
b570: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
b580: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
b590: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
b5a0: 20 69 6e 20 72 65 67 69 73 65 72 20 50 31 2e 0a   in regiser P1..
b5b0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b5c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b5d0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b5e0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b5f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b600: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b610: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
b620: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b630: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
b640: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
b650: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
b660: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
b670: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
b680: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
b690: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
b6a0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
b6b0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b6c0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b6d0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b6e0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b6f0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b700: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b720: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
b730: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
b740: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
b750: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
b760: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b770: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
b780: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b790: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b7b0: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
b7c0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b7d0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
b7e0: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
b7f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b800: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
b810: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
b820: 34 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20  4 a;.  i64 b;.. 
b830: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
b840: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
b850: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
b860: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b870: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
b880: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
b890: 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   a = sqlite3Vdbe
b8a0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
b8b0: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62    b = sqlite3Vdb
b8c0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
b8d0: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
b8e0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
b8f0: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
b900: 20 20 20 61 20 26 3d 20 62 3b 20 20 20 20 20 62     a &= b;     b
b910: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
b920: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 61  P_BitOr:       a
b930: 20 7c 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   |= b;     break
b940: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 53 68  ;.    case OP_Sh
b950: 69 66 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d  iftLeft:   a <<=
b960: 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   b;    break;.  
b970: 20 20 64 65 66 61 75 6c 74 3a 20 20 61 73 73 65    default:  asse
b980: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
b990: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 29  =OP_ShiftRight )
b9a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
b9b0: 20 20 20 20 20 20 20 20 20 20 20 61 20 3e 3e 3d             a >>=
b9c0: 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   b;    break;.  
b9d0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
b9e0: 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  a;.  MemSetTypeF
b9f0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
ba00: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
ba10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
ba20: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
ba30: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
ba40: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
ba50: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ba60: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
ba70: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
ba80: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
ba90: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
baa0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
bab0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
bac0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
bad0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
bae0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
baf0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
bb00: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
bb10: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
bb20: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
bb30: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
bb40: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
bb50: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
bb60: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
bb70: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
bb80: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
bb90: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
bba0: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
bbb0: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
bbc0: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
bbd0: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
bbe0: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
bbf0: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
bc00: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
bc10: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
bc20: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
bc30: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
bc40: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
bc50: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
bc60: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
bc70: 20 69 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41   in1 */.  applyA
bc80: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
bc90: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
bca0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
bcb0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
bcc0: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
bcd0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
bce0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
bcf0: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  = SQLITE_MISMATC
bd00: 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  H;.      goto ab
bd10: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
bd20: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
bd30: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
bd40: 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  - 1;.    }.  }el
bd50: 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  se{.    MemSetTy
bd60: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
bd70: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
bd80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bd90: 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50  : RealAffinity P
bda0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
bdb0: 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68  If register P1 h
bdc0: 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
bdd0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
bde0: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  real value..**.*
bdf0: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
be00: 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61   used when extra
be10: 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  cting informatio
be20: 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  n from a column 
be30: 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c  that.** has REAL
be40: 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68   affinity.  Such
be50: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d   column values m
be60: 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72  ay still be stor
be70: 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72  ed as.** integer
be80: 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66  s, for space eff
be90: 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74  iciency, but aft
bea0: 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65  er extraction we
beb0: 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f   want them.** to
bec0: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61   have only a rea
bed0: 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  l value..*/.case
bee0: 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79   OP_RealAffinity
bef0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
bf00: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
bf10: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
bf20: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
bf30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
bf40: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
bf50: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
bf60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
bf70: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
bf80: 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a  e: ToText P1 * *
bf90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
bfa0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bfb0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
bfc0: 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  text..** If the 
bfd0: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
bfe0: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  , convert it to 
bff0: 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74  a string using t
c000: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
c010: 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42   of printf().  B
c020: 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75  lob values are u
c030: 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20  nchanged and.** 
c040: 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73  are afterwards s
c050: 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65  imply interprete
c060: 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a  d as text..**.**
c070: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
c080: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
c090: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
c0a0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
c0b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78  */.case OP_ToTex
c0c0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
c0d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c0e0: 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31   TK_TO_TEXT, in1
c0f0: 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   */.  if( pIn1->
c100: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c110: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
c120: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
c130: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
c140: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
c150: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
c160: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
c170: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
c180: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
c190: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
c1a0: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
c1b0: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
c1c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c1d0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
c1e0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
c1f0: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c200: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
c210: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
c220: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
c230: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
c240: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c250: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
c260: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c270: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c280: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c290: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
c2a0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c2b0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
c2c0: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
c2d0: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
c2e0: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
c2f0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
c300: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
c310: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
c320: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
c330: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c340: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c350: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c360: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c370: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c380: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
c390: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c3a0: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
c3b0: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e  in1 */.  if( pIn
c3c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c3d0: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
c3e0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c3f0: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
c400: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
c410: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c420: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
c430: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
c440: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c450: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
c460: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
c470: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
c480: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pIn1, MEM_Blob
c490: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
c4a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
c4b0: 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d  (MEM_TypeMask&~M
c4c0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20  EM_Blob);.  }.  
c4d0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
c4e0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
c4f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c500: 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a  : ToNumeric P1 *
c510: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c520: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c530: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c540: 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65  e numeric (eithe
c550: 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20  r an.** integer 
c560: 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  or a floating-po
c570: 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20  int number.).** 
c580: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c590: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c5a0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c5b0: 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a  to an using the.
c5c0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c5d0: 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28   atoi() or atof(
c5e0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c5f0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c600: 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69  ion .** is possi
c610: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
c620: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c630: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c640: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c650: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c660: 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20  e OP_ToNumeric: 
c670: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c680: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c690: 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31  _TO_NUMERIC, in1
c6a0: 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
c6b0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 4e 75  >flags & (MEM_Nu
c6c0: 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  ll|MEM_Int|MEM_R
c6d0: 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eal))==0 ){.    
c6e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
c6f0: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
c700: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
c710: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
c720: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
c730: 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20  pcode: ToInt P1 
c740: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c750: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c760: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 20   register P1 be 
c770: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a  an integer.  If.
c780: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
c790: 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c  currently a real
c7a0: 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74   number, drop it
c7b0: 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
c7c0: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c7d0: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
c7e0: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
c7f0: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
c800: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
c810: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c820: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
c830: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
c840: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69  version is possi
c850: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
c860: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c870: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c880: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c890: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c8a0: 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20  e OP_ToInt: {   
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8c0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c8d0: 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  INT, in1 */.  if
c8e0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c8f0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
c900: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c910: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
c920: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c930: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
c940: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
c950: 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20   Opcode: ToReal 
c960: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
c970: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
c980: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c990: 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  to be a floating
c9a0: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a   point number..*
c9b0: 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69  * If The value i
c9c0: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69  s currently an i
c9d0: 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20  nteger, convert 
c9e0: 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  it..** If the va
c9f0: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
ca00: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
ca10: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
ca20: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
ca30: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
ca40: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
ca50: 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20   0.0 if no such 
ca60: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f  conversion is po
ca70: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
ca80: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
ca90: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
caa0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
cab0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
cac0: 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20  case OP_ToReal: 
cad0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
cae0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
caf0: 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f  _TO_REAL, in1 */
cb00: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
cb10: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
cb20: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
cb30: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
cb40: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
cb50: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
cb60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
cb70: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
cb80: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
cb90: 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  5.**.** Compare 
cba0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
cbb0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
cbc0: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
cbd0: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
cbe0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
cbf0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  .  .**.** If the
cc00: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
cc10: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
cc20: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
cc30: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
cc40: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
cc50: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  n take the jump.
cc60: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
cc70: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
cc80: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
cc90: 20 66 61 6c 6c 20 74 68 72 75 20 69 66 20 65 69   fall thru if ei
cca0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
ccb0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
ccc0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ccd0: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
cce0: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
ccf0: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
cd00: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
cd10: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
cd20: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
cd30: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
cd40: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
cd50: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
cd60: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
cd70: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
cd80: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
cd90: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
cda0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
cdb0: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
cdc0: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
cdd0: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
cde0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
cdf0: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
ce00: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
ce10: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
ce20: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
ce30: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
ce40: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
ce50: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
ce60: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
ce70: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
ce80: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
ce90: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
cea0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
ceb0: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
cec0: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
ced0: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
cee0: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
cef0: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
cf00: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
cf10: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
cf20: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
cf30: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
cf40: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
cf50: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
cf60: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
cf70: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
cf80: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
cf90: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
cfa0: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
cfb0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
cfc0: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
cfd0: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
cfe0: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
cff0: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
d000: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
d010: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
d020: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
d030: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
d040: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
d050: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
d060: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
d070: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
d080: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
d090: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
d0a0: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
d0b0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
d0c0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
d0d0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
d0e0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
d0f0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
d100: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
d110: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
d120: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
d130: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
d140: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
d150: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
d160: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
d170: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d180: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
d190: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
d1a0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
d1b0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
d1c0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
d1d0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
d1e0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
d1f0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
d200: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
d210: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
d220: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d230: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d240: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
d250: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d260: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d270: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d280: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d290: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d2a0: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
d2b0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
d2c0: 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a  P3 are equal..**
d2d0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
d2e0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
d2f0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
d300: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
d310: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
d320: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
d330: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
d340: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
d350: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
d360: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
d370: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
d380: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
d390: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
d3a0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
d3b0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
d3c0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d3d0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
d3e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
d3f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
d400: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d410: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d420: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d430: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d440: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d450: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
d460: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
d470: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
d480: 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e   than the conten
d490: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d4a0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d4b0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d4c0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d4d0: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
d4e0: 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ge P1 P2 P3 P4
d4f0: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d500: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d510: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d520: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d530: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d540: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
d550: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
d560: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
d570: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
d580: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
d590: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
d5a0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
d5b0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
d5c0: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
d5d0: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
d5e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d5f0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
d600: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
d610: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
d620: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
d630: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
d640: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d660: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
d670: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
d680: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d6a0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
d6b0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d6c0: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
d6d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d6e0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
d6f0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d700: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
d710: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d720: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
d730: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
d740: 6e 74 20 66 6c 61 67 73 3b 0a 20 20 69 6e 74 20  nt flags;.  int 
d750: 72 65 73 3b 0a 20 20 63 68 61 72 20 61 66 66 69  res;.  char affi
d760: 6e 69 74 79 3b 0a 0a 20 20 66 6c 61 67 73 20 3d  nity;..  flags =
d770: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 7c 70 49 6e   pIn1->flags|pIn
d780: 33 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 69 66 28  3->flags;..  if(
d790: 20 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20   flags&MEM_Null 
d7a0: 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 65 69 74  ){.    /* If eit
d7b0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d7c0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d7d0: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
d7e0: 4c 4c 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 6a  LL..    ** The j
d7f0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
d800: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
d810: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
d820: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
d830: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
d840: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
d850: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
d860: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
d870: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
d880: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
d890: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
d8a0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
d8b0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73   pOut);.    }els
d8c0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
d8d0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d8e0: 4c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  L ){.      pc = 
d8f0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d  pOp->p2-1;.    }
d900: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
d910: 0a 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f  .  affinity = pO
d920: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
d930: 46 46 5f 4d 41 53 4b 3b 0a 20 20 69 66 28 20 61  FF_MASK;.  if( a
d940: 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 61  ffinity ){.    a
d950: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d960: 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  1, affinity, enc
d970: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 70 70 6c  oding);.    appl
d980: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
d990: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
d9a0: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ng);.    if( db-
d9b0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
d9c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
d9d0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
d9e0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
d9f0: 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
da00: 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 45 78 70  Coll==0 );.  Exp
da10: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
da20: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
da30: 29 3b 0a 20 20 72 65 73 20 3d 20 73 71 6c 69 74  );.  res = sqlit
da40: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
da50: 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
da60: 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73 77 69 74 63  .pColl);.  switc
da70: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
da80: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
da90: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
daa0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
dab0: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
dac0: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
dad0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
dae0: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
daf0: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
db00: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
db10: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
db20: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
db30: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
db40: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
db50: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
db60: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
db70: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
db80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
db90: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
dba0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
dbb0: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  .    pOut = &p->
dbc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
dbd0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
dbe0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
dbf0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
dc00: 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53  = res;.    REGIS
dc10: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
dc20: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  2, pOut);.  }els
dc30: 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20  e if( res ){.   
dc40: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
dc50: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
dc60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
dc70: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
dc80: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
dc90: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
dca0: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
dcb0: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
dcc0: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
dcd0: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
dce0: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
dcf0: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
dd00: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
dd10: 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61   next OP_Permuta
dd20: 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65  tion, OP_Compare
dd30: 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72  ,.** OP_Halt, or
dd40: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20   OP_ResultRow.  
dd50: 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
dd60: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
dd70: 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d  uld occur.** imm
dd80: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
dd90: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
dda0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
ddb0: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
ddc0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ddd0: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
dde0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
ddf0: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
de00: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
de10: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
de20: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
de30: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
de40: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f  **.** Compare to
de50: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
de60: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
de70: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
de80: 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20  all this.** one 
de90: 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
dea0: 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
deb0: 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
dec0: 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
ded0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
dee0: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
def0: 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
df00: 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  uct..**.** P4 is
df10: 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
df20: 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
df30: 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
df40: 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a  ences and sort.*
df50: 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65  * orders for the
df60: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
df70: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70  e permutation ap
df80: 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65  plies to registe
df90: 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  rs.** only.  The
dfa0: 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74   KeyInfo element
dfb0: 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65  s are used seque
dfc0: 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54  ntially..**.** T
dfd0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
dfe0: 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73   a sort comparis
dff0: 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d  on, so NULLs com
e000: 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e  pare equal,.** N
e010: 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68  ULLs are less th
e020: 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62  an numbers, numb
e030: 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ers are less tha
e040: 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e  n strings,.** an
e050: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65  d strings are le
e060: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e070: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72  /.case OP_Compar
e080: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  e: {.  int n;.  
e090: 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b  int i;.  int p1;
e0a0: 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e  .  int p2;.  con
e0b0: 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
e0c0: 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Info;.  int idx;
e0d0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
e0e0: 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  l;    /* Collati
e0f0: 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75  ng sequence to u
e100: 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20  se on this term 
e110: 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20  */.  int bRev;  
e120: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
e130: 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73  for DESCENDING s
e140: 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20  ort order */..  
e150: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
e160: 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
e170: 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
e180: 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
e190: 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
e1a0: 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
e1b0: 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
e1c0: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d  p1>0 && p1+n<=p-
e1d0: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 32 20  >nMem+1 );.  p2 
e1e0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
e1f0: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
e200: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
e210: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
e220: 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
e230: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
e240: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
e250: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
e260: 31 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b  1+idx, &p->aMem[
e270: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
e280: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
e290: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  idx, &p->aMem[p2
e2a0: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
e2b0: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
e2c0: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
e2d0: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
e2e0: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
e2f0: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
e300: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
e310: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
e320: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
e330: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  p->aMem[p1+idx],
e340: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
e350: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
e360: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
e370: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
e380: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
e390: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
e3a0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
e3b0: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
e3c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e3d0: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
e3e0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
e3f0: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
e400: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
e410: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
e420: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
e430: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
e440: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
e450: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
e460: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
e470: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
e480: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
e490: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
e4a0: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
e4b0: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
e4c0: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
e4d0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
e4e0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
e4f0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
e500: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
e510: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
e520: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
e530: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
e540: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
e550: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
e560: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e570: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
e580: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
e590: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
e5a0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
e5b0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e5c0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
e5d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
e5e0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
e5f0: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
e600: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
e610: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
e620: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
e630: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
e640: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
e650: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
e660: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
e670: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
e680: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
e690: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
e6a0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
e6b0: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
e6c0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
e6d0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
e6e0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
e6f0: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
e700: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
e710: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
e720: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
e730: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
e740: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
e750: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
e760: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
e770: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
e780: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
e790: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
e7a0: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
e7b0: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
e7c0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e7d0: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
e7e0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
e7f0: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
e800: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e810: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
e820: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
e830: 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
e840: 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
e850: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
e860: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
e870: 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
e880: 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
e890: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
e8a0: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
e8b0: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70  NULL */..  if( p
e8c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e8d0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
e8e0: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
e8f0: 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
e900: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
e910: 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
e920: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
e930: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
e940: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
e950: 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
e960: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
e970: 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
e980: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
e990: 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
e9a0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
e9b0: 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
e9c0: 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
e9d0: 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
e9e0: 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
e9f0: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
ea00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
ea10: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
ea20: 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
ea30: 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
ea40: 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
ea50: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
ea60: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
ea70: 20 7d 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29   }.  if( v1==2 )
ea80: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
ea90: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
eaa0: 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
eab0: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
eac0: 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
ead0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
eae0: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
eaf0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
eb00: 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a   Not P1 P2 * * *
eb10: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
eb20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
eb30: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
eb40: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
eb50: 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
eb60: 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
eb70: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
eb80: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
eb90: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
eba0: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
ebb0: 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
ebc0: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
ebd0: 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
ebe0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ebf0: 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f  s TK_NOT, in1 */
ec00: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
ec10: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
ec20: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
ec30: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
ec40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
ec50: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
ec60: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
ec70: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
ec80: 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33  4(pOut, !sqlite3
ec90: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
eca0: 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
ecb0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ecc0: 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
ecd0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
ece0: 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
ecf0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
ed00: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
ed10: 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
ed20: 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
ed30: 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
ed40: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
ed50: 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
ed60: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
ed70: 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
ed80: 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
ed90: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
eda0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
edb0: 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75  OT, in1 */.  pOu
edc0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
edd0: 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
ede0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
edf0: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
ee00: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
ee10: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
ee20: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ee30: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
ee40: 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , ~sqlite3VdbeIn
ee50: 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
ee60: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
ee70: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
ee80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
ee90: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
eea0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
eeb0: 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
eec0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   The value is.**
eed0: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
eee0: 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
eef0: 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
ef00: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
ef10: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
ef20: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
ef30: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
ef40: 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ue..*/./* Opcode
ef50: 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
ef60: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
ef70: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
ef80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ef90: 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
efa0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
efb0: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
efc0: 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
efd0: 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
efe0: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
eff0: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
f000: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
f010: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
f020: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ue..*/.case OP_I
f030: 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
f040: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
f050: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
f060: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
f070: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
f080: 20 69 6e 74 20 63 3b 0a 20 20 69 66 28 20 70 49   int c;.  if( pI
f090: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f0a0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
f0b0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
f0c0: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
f0d0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
f0e0: 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
f0f0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
f100: 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
f110: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
f120: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
f130: 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
f140: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
f150: 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
f160: 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66  c = !c;.  }.  if
f170: 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ( c ){.    pc = 
f180: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
f190: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f1a0: 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
f1b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  P2 * * *.**.** J
f1c0: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
f1d0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
f1e0: 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
f1f0: 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
f200: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
f210: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
f220: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
f230: 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
f240: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
f250: 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  !=0 ){.    pc = 
f260: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
f270: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f280: 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
f290: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f2a0: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
f2b0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
f2c0: 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
f2d0: 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
f2e0: 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
f2f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f300: 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
f310: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
f320: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f330: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
f340: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
f350: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
f360: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f370: 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  e: SetNumColumns
f380: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
f390: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73 65  * This opcode se
f3a0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
f3b0: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68 65   columns for the
f3c0: 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62   cursor opened b
f3d0: 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  y the.** followi
f3e0: 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ng instruction t
f3f0: 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f  o P2..**.** An O
f400: 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20  P_SetNumColumns 
f410: 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20 69  is only useful i
f420: 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d 65  f it occurs imme
f430: 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 0a  diately before .
f440: 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ** one of the fo
f450: 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 3a  llowing opcodes:
f460: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 52  .**.**     OpenR
f470: 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 57  ead.**     OpenW
f480: 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  rite.**     Open
f490: 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20  Pseudo.**.** If 
f4a0: 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
f4b0: 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65 78  code is to be ex
f4c0: 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72 73  ecuted on a curs
f4d0: 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  or, then.** this
f4e0: 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
f4f0: 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61 74  present immediat
f500: 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20 6f  ely before the o
f510: 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f 70  pcode that.** op
f520: 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ens the cursor..
f530: 2a 2f 0a 23 69 66 20 30 0a 63 61 73 65 20 4f 50  */.#if 0.case OP
f540: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20  _SetNumColumns: 
f550: 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  {.  break;.}.#en
f560: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
f570: 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
f580: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  P4 *.**.** Inter
f590: 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
f5a0: 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
f5b0: 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
f5c0: 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
f5d0: 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
f5e0: 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
f5f0: 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
f600: 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
f610: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
f620: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f630: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
f640: 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
f650: 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
f660: 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
f670: 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
f680: 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
f690: 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
f6a0: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
f6b0: 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
f6c0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
f6d0: 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
f6e0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
f6f0: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
f700: 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
f710: 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
f720: 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
f730: 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
f740: 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
f750: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
f760: 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
f770: 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
f780: 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
f790: 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  result..*/.case 
f7a0: 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75  OP_Column: {.  u
f7b0: 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  32 payloadSize; 
f7c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
f7d0: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
f7e0: 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c  rd */.  i64 payl
f7f0: 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
f800: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
f810: 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
f820: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
f830: 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20      /* P1 value 
f840: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f  of the opcode */
f850: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
f860: 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
f870: 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
f880: 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
f890: 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
f8a0: 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
f8b0: 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20  .  char *zRec;  
f8c0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
f8d0: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63   to complete rec
f8e0: 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74  ord-data */.  Bt
f8f0: 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
f900: 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
f910: 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
f920: 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
f930: 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
f940: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
f950: 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
f960: 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
f970: 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
f980: 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
f990: 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
f9a0: 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
f9b0: 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  umn */.  int nFi
f9c0: 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e  eld;        /* n
f9d0: 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
f9e0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
f9f0: 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
fa00: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
fa10: 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
fa20: 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
fa30: 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
fa40: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
fa50: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
fa60: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61  r */.  char *zDa
fa70: 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72  ta;       /* Par
fa80: 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
fa90: 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
faa0: 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
fab0: 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
fac0: 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
fad0: 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
fae0: 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
faf0: 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
fb00: 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
fb10: 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
fb20: 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
fb30: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
fb40: 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38  o header */.  u8
fb50: 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20   *zEndHdr;      
fb60: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
fb70: 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
fb80: 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
fb90: 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
fba0: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
fbb0: 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
fbc0: 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20  u64 offset64;   
fbd0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66     /* 64-bit off
fbe0: 73 65 74 2e 20 20 36 34 20 62 69 74 73 20 6e 65  set.  64 bits ne
fbf0: 65 64 65 64 20 74 6f 20 63 61 74 63 68 20 6f 76  eded to catch ov
fc00: 65 72 66 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20  erflow */.  int 
fc10: 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f  szHdr;         /
fc20: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
fc30: 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
fc40: 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
fc50: 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69  rd */.  int avai
fc60: 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
fc70: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
fc80: 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
fc90: 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  */...  p1 = pOp-
fca0: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
fcb0: 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20  >p2;.  pC = 0;. 
fcc0: 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
fcd0: 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
fce0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d  .  assert( p1<p-
fcf0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
fd00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
fd10: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
fd20: 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
fd30: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
fd40: 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  3];.  MemSetType
fd50: 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
fd60: 4e 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20  Null);.  zRec = 
fd70: 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  0;..  /* This bl
fd80: 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
fd90: 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
fda0: 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
fdb0: 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
fdc0: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
fdd0: 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
fde0: 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
fdf0: 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
fe00: 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
fe10: 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
fe20: 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
fe30: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
fe40: 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
fe50: 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
fe60: 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
fe70: 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
fe80: 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
fe90: 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
fea0: 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
feb0: 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
fec0: 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
fed0: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
fee0: 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
fef0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
ff00: 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
ff10: 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
ff20: 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
ff30: 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
ff40: 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
ff50: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
ff60: 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
ff70: 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
ff80: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
ff90: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
ffa0: 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
ffb0: 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
ffc0: 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
ffd0: 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
ffe0: 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
fff0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10000 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
10010 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
10020 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
10030 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
10040 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
10050 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
10060 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
10070 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72  stored in a B-Tr
10080 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  ee */.    rc = s
10090 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
100a0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
100b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
100c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
100d0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
100e0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
100f0 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
10100 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
10110 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
10120 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
10130 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10140 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
10150 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20  e;.      zRec = 
10160 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b  (char*)pC->aRow;
10170 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
10180 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
10190 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
101a0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
101b0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
101c0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
101d0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
101e0 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
101f0 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73  ze64);.      ass
10200 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
10210 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20  OK );   /* True 
10220 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
10230 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
10240 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  bove */.      /*
10250 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
10260 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
10270 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
10280 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
10290 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
102a0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
102b0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
102c0 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
102d0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72  .      ** larger
102e0 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
102f0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10300 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
10310 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
10320 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
10330 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61  ze64 );.      pa
10340 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
10350 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
10360 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10370 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
10380 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
10390 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
103a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
103b0 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
103c0 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
103d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
103e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
103f0 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
10400 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
10410 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
10420 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  f( pC->pseudoTab
10430 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
10440 20 72 65 63 6f 72 64 20 69 73 20 74 68 65 20 73   record is the s
10450 6f 6c 65 20 65 6e 74 72 79 20 6f 66 20 61 20 70  ole entry of a p
10460 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
10470 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
10480 20 70 43 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20   pC->nData;.    
10490 7a 52 65 63 20 3d 20 70 43 2d 3e 70 44 61 74 61  zRec = pC->pData
104a0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
104b0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
104c0 41 4c 45 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ALE;.    assert(
104d0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
104e0 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20  || zRec!=0 );.  
104f0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f  }else{.    /* Co
10500 6e 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74  nsider the row t
10510 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  o be NULL */.   
10520 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
10530 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
10540 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
10550 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
10560 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28   a NULL */.  if(
10570 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
10580 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
10590 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
105a0 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  Null );.    goto
105b0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
105c0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62    }.  assert( db
105d0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
105e0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30  LIMIT_LENGTH]>=0
105f0 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61   );.  if( payloa
10600 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
10610 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10620 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
10630 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
10640 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
10650 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  = pC->nField;.  
10660 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c  assert( p2<nFiel
10670 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20  d );..  /* Read 
10680 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61  and parse the ta
10690 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f  ble header.  Sto
106a0 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
106b0 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a  f the parse.  **
106c0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
106d0 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69   header cache fi
106e0 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73  elds of the curs
106f0 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65  or..  */.  aType
10700 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20   = pC->aType;.  
10710 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
10720 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus==p->cacheCtr
10730 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20   ){.    aOffset 
10740 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
10750 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10760 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61  rt(aType);.    a
10770 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43  vail = 0;.    pC
10780 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66  ->aOffset = aOff
10790 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69  set = &aType[nFi
107a0 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61  eld];.    pC->pa
107b0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c  yloadSize = payl
107c0 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d  oadSize;.    pC-
107d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
107e0 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20  ->cacheCtr;..   
107f0 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68   /* Figure out h
10800 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72  ow many bytes ar
10810 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  e in the header 
10820 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  */.    if( zRec 
10830 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  ){.      zData =
10840 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65   zRec;.    }else
10850 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  {.      if( pC->
10860 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
10870 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
10880 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  *)sqlite3BtreeKe
10890 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
108a0 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c  vail);.      }el
108b0 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
108c0 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  a = (char*)sqlit
108d0 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
108e0 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
108f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
10900 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f  * If KeyFetch()/
10910 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61  DataFetch() mana
10920 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65  ged to get the e
10930 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20  ntire payload,. 
10940 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65       ** save the
10950 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20   payload in the 
10960 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
10970 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20   That will save 
10980 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a  us from.      **
10990 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20   having to make 
109a0 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73  additional calls
109b0 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f   to fetch the co
109c0 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66  ntent portion of
109d0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65  .      ** the re
109e0 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  cord..      */. 
109f0 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
10a00 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  il>=0 );.      i
10a10 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c  f( payloadSize <
10a20 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a  = (u32)avail ){.
10a30 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a          zRec = z
10a40 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43  Data;.        pC
10a50 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44  ->aRow = (u8*)zD
10a60 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ata;.      }else
10a70 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  {.        pC->aR
10a80 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ow = 0;.      }.
10a90 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65      }.    /* The
10aa0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
10ab0 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c  t is true in all
10ac0 20 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68   cases accept wh
10ad0 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61  en.    ** the da
10ae0 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
10af0 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65  been corrupted e
10b00 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a  xternally..    *
10b10 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65  *    assert( zRe
10b20 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70  c!=0 || avail>=p
10b30 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76  ayloadSize || av
10b40 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20  ail>=9 ); */.   
10b50 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69   szHdr = getVari
10b60 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c  nt32((u8*)zData,
10b70 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f   offset);..    /
10b80 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
10b90 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
10ba0 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
10bb0 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
10bc0 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
10bd0 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
10be0 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
10bf0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
10c00 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
10c10 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
10c20 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
10c30 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
10c40 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
10c50 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
10c60 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
10c70 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
10c80 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
10c90 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
10ca0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
10cb0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
10cc0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
10cd0 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
10ce0 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
10cf0 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
10d00 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
10d10 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
10d20 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
10d30 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
10d40 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
10d50 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
10d60 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
10d70 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
10d80 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a  fset > 98307 ){.
10d90 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
10da0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
10db0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
10dc0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
10dd0 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20  .    /* Compute 
10de0 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65  in len the numbe
10df0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
10e00 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65  ta we need to re
10e10 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20  ad in order.    
10e20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64  ** to get nField
10e30 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f   type values.  o
10e40 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65  ffset is an uppe
10e50 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e  r bound on this.
10e60 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69    But.    ** nFi
10e70 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67  eld might be sig
10e80 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20  nificantly less 
10e90 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75  than the true nu
10ea0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
10eb0 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61      ** in the ta
10ec0 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74  ble, and in that
10ed0 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b   case, 5*nField+
10ee0 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c  3 might be small
10ef0 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a  er than offset..
10f00 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74      ** We want t
10f10 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69  o minimize len i
10f20 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74  n order to limit
10f30 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
10f40 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61   memory.    ** a
10f50 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63  llocation, espec
10f60 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75  ially if a corru
10f70 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
10f80 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73   has caused offs
10f90 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  et.    ** to be 
10fa0 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65  oversized. Offse
10fb0 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  t is limited to 
10fc0 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75  98307 above.  Bu
10fd0 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20  t 98307 might.  
10fe0 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65    ** still excee
10ff0 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  d Robson memory 
11000 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11010 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67  s on some config
11020 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a  urations..    **
11030 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74   On systems that
11040 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65   cannot tolerate
11050 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
11060 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c  locations, nFiel
11070 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c  d*5+3.    ** wil
11080 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68  l likely be much
11090 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e   smaller since n
110a0 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c  Field will likel
110b0 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20  y be less than. 
110c0 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20     ** 20 or so. 
110d0 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68   This insures th
110e0 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  at Robson memory
110f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
11100 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f  ts are.    ** no
11110 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20  t exceeded even 
11120 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61  for corrupt data
11130 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20  base files..    
11140 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69  */.    len = nFi
11150 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69  eld*5 + 3;.    i
11160 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66  f( len > (int)of
11170 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e  fset ) len = (in
11180 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  t)offset;..    /
11190 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29  * The KeyFetch()
111a0 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20   or DataFetch() 
111b0 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61  above are fast a
111c0 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20  nd will get the 
111d0 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65  entire.    ** re
111e0 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d  cord header in m
111f0 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20  ost cases.  But 
11200 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74  they will fail t
11210 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65  o get the comple
11220 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  te.    ** record
11230 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72   header if the r
11240 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65  ecord header doe
11250 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73  s not fit on a s
11260 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a  ingle page.    *
11270 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e  * in the B-Tree.
11280 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
11290 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33  ens, use sqlite3
112a0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
112b0 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71  () to.    ** acq
112c0 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  uire the complet
112d0 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20  e header text.. 
112e0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a     */.    if( !z
112f0 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e  Rec && avail<len
11300 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
11310 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
11320 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
11330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
11340 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11350 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70  pCrsr, 0, len, p
11360 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
11370 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
11380 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
11390 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
113a0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
113b0 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
113c0 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20   sMem.z;.    }. 
113d0 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38     zEndHdr = (u8
113e0 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a   *)&zData[len];.
113f0 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a      zIdx = (u8 *
11400 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a  )&zData[szHdr];.
11410 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65  .    /* Scan the
11420 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20   header and use 
11430 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68  it to fill in th
11440 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f  e aType[] and aO
11450 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61  ffset[].    ** a
11460 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d  rrays.  aType[i]
11470 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
11480 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66  e type integer f
11490 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20  or the i-th.    
114a0 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f  ** column and aO
114b0 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f  ffset[i] will co
114c0 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74  ntain the offset
114d0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
114e0 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ing.    ** of th
114f0 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20  e record to the 
11500 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74  start of the dat
11510 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63  a for the i-th c
11520 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20  olumn.    */.   
11530 20 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73   offset64 = offs
11540 65 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  et;.    for(i=0;
11550 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
11560 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
11570 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
11580 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
11590 28 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20  (u32)offset64;. 
115a0 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67         zIdx += g
115b0 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
115c0 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20   aType[i]);.    
115d0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
115e0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
115f0 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69  lTypeLen(aType[i
11600 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ]);.      }else{
11610 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69  .        /* If i
11620 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46   is less that nF
11630 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ield, then there
11640 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73   are less fields
11650 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20   in this.       
11660 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20   ** record than 
11670 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e  SetNumColumns in
11680 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72  dicated there ar
11690 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
116a0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
116b0 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65  e. Set the offse
116c0 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20  t for any extra 
116d0 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73  columns not pres
116e0 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a  ent in.        *
116f0 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  * the record to 
11700 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f  0. This tells co
11710 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72  de below to stor
11720 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  e a NULL.       
11730 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64   ** instead of d
11740 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76  eserializing a v
11750 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65  alue from the re
11760 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  cord..        */
11770 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
11780 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  [i] = 0;.      }
11790 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
117a0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
117b0 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65  (&sMem);.    sMe
117c0 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
117d0 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77  ll;..    /* If w
117e0 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65  e have read more
117f0 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61   header data tha
11800 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20  n was contained 
11810 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20  in the header,. 
11820 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20     ** or if the 
11830 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
11840 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
11850 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64   be past the end
11860 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72   of the.    ** r
11870 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65  ecord, or if the
11880 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
11890 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
118a0 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  o be before the 
118b0 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  end.    ** of th
118c0 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61  e record (when a
118d0 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e  ll fields presen
118e0 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74  t), then we must
118f0 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20   be dealing .   
11900 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
11910 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
11920 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64   */.    if( (zId
11930 78 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28  x > zEndHdr)|| (
11940 6f 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f  offset64 > paylo
11950 61 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20  adSize).     || 
11960 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
11970 26 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34  & offset64!=(u64
11980 29 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b  )payloadSize) ){
11990 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
119a0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
119b0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
119c0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
119d0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74  .  }..  /* Get t
119e0 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d  he column inform
119f0 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65  ation. If aOffse
11a00 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72  t[p2] is non-zer
11a10 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65  o, then .  ** de
11a20 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61  serialize the va
11a30 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
11a40 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b  ord. If aOffset[
11a50 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a  p2] is zero,.  *
11a60 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  * then there are
11a70 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c   not enough fiel
11a80 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
11a90 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a   to satisfy the.
11aa0 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49    ** request.  I
11ab0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74  n this case, set
11ac0 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
11ad0 6f 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69  or to P4 if P4 i
11ae0 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72  s.  ** a pointer
11af0 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74   to a Mem object
11b00 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66  ..  */.  if( aOf
11b10 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20  fset[p2] ){.    
11b20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
11b30 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28  TE_OK );.    if(
11b40 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73   zRec ){.      s
11b50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
11b60 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65  easeExternal(pDe
11b70 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  st);.      sqlit
11b80 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
11b90 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66  (u8 *)&zRec[aOff
11ba0 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b  set[p2]], aType[
11bb0 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  p2], pDest);.   
11bc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65   }else{.      le
11bd0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
11be0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79  erialTypeLen(aTy
11bf0 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73  pe[p2]);.      s
11c00 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
11c10 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b  e(&sMem, pDest);
11c20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
11c30 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
11c40 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
11c50 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d  et[p2], len, pC-
11c60 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
11c70 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
11c80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11c90 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
11ca0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
11cb0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
11cc0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  Mem.z;.      sql
11cd0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
11ce0 74 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54  t((u8*)zData, aT
11cf0 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b  ype[p2], pDest);
11d00 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74  .    }.    pDest
11d10 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
11d20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
11d30 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
11d40 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
11d50 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
11d60 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
11d70 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
11d80 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
11d90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
11da0 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67  ert( pDest->flag
11db0 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  s&MEM_Null );.  
11dc0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66    }.  }..  /* If
11dd0 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
11de0 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
11df0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
11e00 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71   (in the.  ** sq
11e10 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
11e20 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f  Btree() call abo
11e30 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65  ve) then transfe
11e40 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61  r control of tha
11e50 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c  t.  ** dynamical
11e60 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
11e70 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70  ce over to the p
11e80 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a  Dest structure..
11e90 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e    ** This preven
11ea0 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79  ts a memory copy
11eb0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65  ..  */.  if( sMe
11ec0 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20  m.zMalloc ){.   
11ed0 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d   assert( sMem.z=
11ee0 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b  =sMem.zMalloc );
11ef0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70  .    assert( !(p
11f00 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
11f10 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73  M_Dyn) );.    as
11f20 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
11f30 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
11f40 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44  |MEM_Str)) || pD
11f50 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29  est->z==sMem.z )
11f60 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
11f70 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65  gs &= ~(MEM_Ephe
11f80 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  m|MEM_Static);. 
11f90 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
11fa0 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20  |= MEM_Term;.   
11fb0 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d   pDest->z = sMem
11fc0 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  .z;.    pDest->z
11fd0 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d  Malloc = sMem.zM
11fe0 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63  alloc;.  }..  rc
11ff0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
12000 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
12010 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d  Dest);..op_colum
12020 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f  n_out:.  UPDATE_
12030 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
12040 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
12050 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
12060 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
12070 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
12080 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
12090 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  4 *.**.** Apply 
120a0 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
120b0 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
120c0 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
120d0 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
120e0 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
120f0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
12100 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
12110 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
12120 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
12130 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
12140 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
12150 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
12160 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
12170 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
12180 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
12190 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
121a0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
121b0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
121c0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
121d0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61   */.  Mem *pData
121e0 30 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  0;       /* Firs
121f0 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68  t register to wh
12200 69 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66  ich to apply aff
12210 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a  inity */.  Mem *
12220 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pLast;        /*
12230 20 4c 61 73 74 20 72 65 67 69 73 74 65 72 20 74   Last register t
12240 6f 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79  o which to apply
12250 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d   affinity */.  M
12260 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
12270 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 72 65 67    /* Current reg
12280 69 73 74 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66  ister */..  zAff
12290 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
122a0 7a 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70  z;.  pData0 = &p
122b0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
122c0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
122d0 61 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20  a0[pOp->p2-1];. 
122e0 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
122f0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
12300 52 65 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61  Rec++){.    Expa
12310 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
12320 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
12330 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
12340 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
12350 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62  coding);.  }.  b
12360 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12370 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
12380 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
12390 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
123a0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
123b0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61  g with P1 into a
123c0 20 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a   single entry.**
123d0 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73   suitable for us
123e0 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
123f0 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
12400 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
12410 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
12420 78 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  x.  The details 
12430 6f 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72  of the format ar
12440 65 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20  e irrelevant as 
12450 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f  long as.** the O
12460 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
12470 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
12480 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20  ecord later..** 
12490 52 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20  Refer to source 
124a0 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  code comments fo
124b0 72 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66  r the details of
124c0 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66   the record.** f
124d0 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ormat..**.** P4 
124e0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
124f0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
12500 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
12510 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
12520 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
12530 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
12540 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
12550 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
12560 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
12570 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
12580 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
12590 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
125a0 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
125b0 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
125c0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
125d0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
125e0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
125f0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
12600 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
12610 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
12620 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
12630 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
12640 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
12650 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
12660 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
12670 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
12680 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
12690 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
126a0 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
126b0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
126c0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
126d0 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
126e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
126f0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
12700 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
12710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12720 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12730 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
12740 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
12750 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12760 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
12770 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
12780 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
12790 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
127a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
127b0 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
127c0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
127d0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
127e0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
127f0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12800 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
12810 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
12820 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
12830 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
12840 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
12850 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
12860 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
12870 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
12880 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
12890 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
128a0 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
128b0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
128c0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
128d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
128e0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
128f0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
12900 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
12910 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
12920 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
12930 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
12940 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
12950 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
12960 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
12970 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
12980 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
12990 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
129a0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
129b0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
129d0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
129e0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
129f0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
12a00 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
12a10 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
12a20 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
12a30 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
12a40 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
12a50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12a60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12a70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12a80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
12a90 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
12aa0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
12ab0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
12ac0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
12ad0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
12ae0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
12af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
12b30 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
12b40 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
12b50 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
12b60 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
12b70 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
12b80 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
12b90 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
12ba0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
12bb0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
12bc0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
12bd0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
12be0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
12bf0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
12c00 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12c10 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
12c20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
12c30 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
12c40 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
12c50 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
12c60 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
12c70 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
12c80 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
12c90 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
12ca0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12cb0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
12cc0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
12cd0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12ce0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
12cf0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
12d00 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  Byte = 0;       
12d10 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
12d20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
12d30 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a  s record */.  nZ
12d40 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
12d50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
12d60 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
12d70 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
12d80 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
12d90 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
12da0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
12db0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
12dc0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
12dd0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
12de0 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  eld<=p->nMem+1 )
12df0 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d  ;.  pData0 = &p-
12e00 3e 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  >aMem[nField];. 
12e10 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
12e20 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
12e30 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
12e40 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
12e50 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
12e60 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f  ormat;..  /* Loo
12e70 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
12e80 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
12e90 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
12ea0 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
12eb0 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
12ec0 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
12ed0 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
12ee0 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  cord..  */.  for
12ef0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
12f00 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
12f10 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66  +){.    if( zAff
12f20 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
12f30 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
12f40 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
12f50 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
12f60 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ing);.    }.    
12f70 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26  if( pRec->flags&
12f80 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63  MEM_Zero && pRec
12f90 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ->n>0 ){.      s
12fa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
12fb0 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
12fc0 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f     }.    serial_
12fd0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
12fe0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
12ff0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
13000 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
13010 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13020 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
13030 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  ;.    nData += l
13040 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  en;.    nHdr += 
13050 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
13060 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
13070 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
13080 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
13090 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  .      /* Only p
130a0 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  ure zero-filled 
130b0 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70  BLOBs can be inp
130c0 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64  ut to this Opcod
130d0 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64  e..      ** We d
130e0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62  o not allow blob
130f0 73 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20  s with a prefix 
13100 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65  and a zero-fille
13110 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20  d tail. */.     
13120 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
13130 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
13140 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20  se if( len ){.  
13150 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
13160 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41     }.  }..  /* A
13170 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68  dd the initial h
13180 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64  eader varint and
13190 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20   total the size 
131a0 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  */.  nHdr += nVa
131b0 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
131c0 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
131d0 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
131e0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
131f0 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b  dr) ){.    nHdr+
13200 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  +;.  }.  nByte =
13210 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72   nHdr+nData-nZer
13220 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  o;.  if( nByte>d
13230 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
13240 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
13250 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
13260 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
13270 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
13280 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
13290 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
132a0 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
132b0 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
132c0 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
132d0 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
132e0 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
132f0 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
13300 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
13310 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
13320 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
13330 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
13340 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29  te3VdbeMemGrow()
13350 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
13360 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
13370 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
13380 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13390 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
133a0 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
133b0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
133c0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
133d0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c  ->p3];.  if( sql
133e0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
133f0 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
13400 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
13410 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
13420 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
13430 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
13440 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
13450 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
13460 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
13470 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28  d, nHdr);.  for(
13480 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13490 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
134a0 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  ){.    serial_ty
134b0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
134c0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
134d0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
134e0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
134f0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
13500 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
13510 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c  ;      /* serial
13520 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66   type */.  }.  f
13530 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
13540 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13550 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c  c++){  /* serial
13560 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b   data */.    i +
13570 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13580 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
13590 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79  rd[i], (int)(nBy
135a0 74 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65  te-i), pRec,file
135b0 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20  _format);.  }.  
135c0 61 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65  assert( i==nByte
135d0 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
135e0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
135f0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
13600 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
13610 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
13620 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
13630 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f   | MEM_Dyn;.  pO
13640 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  ut->xDel = 0;.  
13650 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
13660 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
13670 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
13680 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
13690 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
136a0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
136b0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
136c0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
136d0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
136e0 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
136f0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
13700 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
13710 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
13720 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
13730 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
13740 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
13750 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
13760 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
13770 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
13780 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
13790 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
137a0 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
137b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
137c0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
137d0 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
137e0 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
137f0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
13800 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
13810 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
13820 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
13830 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ..  pCrsr = p->a
13840 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70  pCsr[pOp->p1]->p
13850 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
13860 72 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  rsr ){.    rc = 
13870 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
13880 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
13890 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
138a0 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a  nEntry = 0;.  }.
138b0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
138c0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d  MEM_Int;.  pOut-
138d0 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
138e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
138f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61  ../* Opcode: Sta
13900 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20  tement P1 * * * 
13910 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e  *.**.** Begin an
13920 20 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74   individual stat
13930 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
13940 6e 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20  n which is part 
13950 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74  of a larger.** t
13960 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69  ransaction.  Thi
13970 73 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74  s is needed so t
13980 68 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hat the statemen
13990 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c  t.** can be roll
139a0 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
139b0 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
139c0 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
139d0 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
139e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
139f0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
13a00 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75  nsaction will au
13a10 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63  tomatically.** c
13a20 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
13a30 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
13a40 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
13a50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
13a60 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f  urrently in auto
13a70 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61  commit mode (tha
13a80 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c  t .** is to say,
13a90 20 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74   if it is in bet
13aa0 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43  ween BEGIN and C
13ab0 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66  OMMIT).** and if
13ac0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74   there are no ot
13ad0 68 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65  her active state
13ae0 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d  ments on the sam
13af0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
13b00 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nnection, then t
13b10 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
13b20 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74   a no-op.  No st
13b30 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
13b40 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64  ion.** is needed
13b50 20 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72   since any error
13b60 20 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72   can use the nor
13b70 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  mal ROLLBACK pro
13b80 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20  cess to.** undo 
13b90 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  changes..**.** I
13ba0 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  f a statement tr
13bb0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
13bc0 72 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61  rted, then a sta
13bd0 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66  tement journal f
13be0 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61  ile.** will be a
13bf0 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69  llocated and ini
13c00 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20  tialized..**.** 
13c10 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  The statement is
13c20 20 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61   begun on the da
13c30 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68  tabase file with
13c40 20 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20   index P1.  The 
13c50 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  main.** database
13c60 20 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64   file has an ind
13c70 65 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20  ex of 0 and the 
13c80 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
13c90 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a  mporary tables.*
13ca0 2a 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  * has an index o
13cb0 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f 1..*/.case OP_
13cc0 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 42  Statement: {.  B
13cd0 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 66 28  tree *pBt;.  if(
13ce0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
13cf0 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
13d00 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
13d10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
13d20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
13d30 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
13d40 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 70 4f  sert( db->aDb[pO
13d50 70 2d 3e 70 31 5d 2e 70 42 74 21 3d 30 20 29 3b  p->p1].pBt!=0 );
13d60 0a 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  .    pBt = db->a
13d70 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
13d80 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
13d90 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
13da0 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61  ns(pBt) );.    a
13db0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
13dc0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
13dd0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 69  p1))!=0 );.    i
13de0 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
13df0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ==0 ){.      ass
13e00 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
13e10 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
13e20 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
13e30 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
13e40 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 70 2d  ent++; .      p-
13e50 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
13e60 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
13e70 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
13e80 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
13e90 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
13ea0 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61  tmt(pBt, p->iSta
13eb0 74 65 6d 65 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  tement);.  }.  b
13ec0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13ed0 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31  de: Savepoint P1
13ee0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
13ef0 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72  Open, release or
13f00 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61   rollback the sa
13f10 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79  vepoint named by
13f20 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64   parameter P4, d
13f30 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74  epending.** on t
13f40 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20  he value of P1. 
13f50 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61  To open a new sa
13f60 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20  vepoint, P1==0. 
13f70 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
13f80 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69  it) an.** existi
13f90 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ng savepoint, P1
13fa0 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62  ==1, or to rollb
13fb0 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
13fc0 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e  savepoint P1==2.
13fd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65  .*/.case OP_Save
13fe0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70  point: {.  int p
13ff0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
14000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
14010 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e  lue of P1 operan
14020 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  d */.  char *zNa
14030 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
14040 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
14050 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20  f savepoint */. 
14060 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61   int nName;.  Sa
14070 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20  vepoint *pNew;. 
14080 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
14090 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f  epoint;.  Savepo
140a0 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74  int *pTmp;.  int
140b0 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69   iSavepoint;.  i
140c0 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70  nt ii;..  p1 = p
140d0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20  Op->p1;.  zName 
140e0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20  = pOp->p4.z;..  
140f0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
14100 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
14110 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
14120 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
14130 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
14140 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
14150 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
14160 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
14170 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
14180 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
14190 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
141a0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
141b0 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
141c0 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
141d0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
141e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
141f0 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
14200 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
14210 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
14220 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
14230 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14240 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
14250 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66  unt(db) );..  if
14260 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
14270 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
14280 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
14290 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  t>0 ){.      /* 
142a0 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
142b0 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
142c0 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
142d0 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
142e0 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
142f0 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
14300 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
14310 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
14320 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14330 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
14340 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
14350 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
14360 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
14370 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
14380 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
14390 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
143a0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
143b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
143c0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
143d0 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20  len30(zName);.. 
143e0 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
143f0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
14400 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
14410 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
14420 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
14430 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
14440 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
14450 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
14460 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
14470 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
14480 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
14490 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
144a0 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
144b0 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
144c0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
144d0 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
144e0 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
144f0 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
14500 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
14510 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
14520 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
14530 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
14540 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
14550 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
14560 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
14570 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14580 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
14590 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
145a0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
145b0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
145c0 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
145d0 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
145e0 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
145f0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
14600 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
14610 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
14620 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
14630 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
14640 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
14650 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  w;.      }.    }
14660 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
14670 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
14680 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
14690 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
146a0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
146b0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
146c0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
146d0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
146e0 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
146f0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
14700 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
14710 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
14720 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
14730 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
14740 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
14750 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
14760 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
14770 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
14780 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
14790 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
147a0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
147b0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
147c0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
147d0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
147e0 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
147f0 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
14800 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
14810 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
14820 20 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20    }else if( .   
14830 20 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64       db->writeVd
14840 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d  beCnt>0 || (p1==
14850 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14860 43 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  CK && db->active
14870 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
14880 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
14890 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
148a0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
148b0 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
148c0 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
148d0 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
148e0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  te statements. I
148f0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
14900 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20  e to rollback a 
14910 73 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20  savepoint.      
14920 2a 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ** if there are 
14930 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65  any active state
14940 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20  ments at all..  
14950 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
14960 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
14970 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
14980 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
14990 25 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  %s savepoint - S
149a0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
149b0 20 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20   progress",.    
149c0 20 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49      (p1==SAVEPOI
149d0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72  NT_ROLLBACK ? "r
149e0 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61  ollback": "relea
149f0 73 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  se").      );.  
14a00 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
14a10 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
14a20 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
14a30 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
14a40 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
14a50 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
14a60 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
14a70 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
14a80 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
14a90 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
14aa0 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
14ab0 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
14ac0 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
14ad0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
14ae0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
14af0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
14b00 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
14b10 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
14b20 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
14b30 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
14b40 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
14b50 45 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  E ){.        db-
14b60 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
14b70 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
14b80 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
14b90 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
14ba0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
14bb0 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20  = pc;.          
14bc0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
14bd0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
14be0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
14bf0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
14c00 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
14c10 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
14c20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
14c30 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
14c40 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
14c50 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
14c60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
14c70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
14c80 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
14c90 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
14ca0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
14cb0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
14cc0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
14cd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
14ce0 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
14cf0 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
14d00 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
14d10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
14d20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
14d30 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
14d40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
14d50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14d60 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
14d70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
14d80 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
14d90 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
14da0 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
14db0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
14dc0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
14dd0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
14de0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14df0 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
14e00 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20  ema(db, 0);.    
14e10 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
14e20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
14e30 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
14e40 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
14e50 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
14e60 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
14e70 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
14e80 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
14e90 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
14ea0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
14eb0 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
14ec0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
14ed0 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
14ee0 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
14ef0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
14f00 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
14f10 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
14f20 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
14f30 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
14f40 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
14f50 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
14f60 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
14f70 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
14f80 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
14f90 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
14fa0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
14fb0 6f 6e 20 74 6f 6f 20 2a 2f 0a 20 20 20 20 20 20  on too */.      
14fc0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
14fd0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
14fe0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
14ff0 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
15000 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
15010 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
15020 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
15030 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
15040 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
15050 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
15060 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
15070 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
15080 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
15090 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
150a0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
150b0 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
150c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
150d0 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
150e0 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
150f0 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
15100 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
15110 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
15120 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
15130 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
15140 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
15150 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
15160 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
15170 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
15180 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
15190 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
151a0 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
151b0 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
151c0 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
151d0 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
151e0 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
151f0 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
15200 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
15210 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
15220 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
15230 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
15240 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
15250 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
15260 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
15270 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
15280 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
15290 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
152a0 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
152b0 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
152c0 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
152d0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
152e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
152f0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
15300 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
15310 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
15320 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
15330 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
15340 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
15350 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
15360 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76 65  sert( db->active
15370 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f 2a  VdbeCnt>0 );  /*
15380 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f   At least this o
15390 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20  ne VM is active 
153a0 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e  */..  if( turnOn
153b0 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20  AC && iRollback 
153c0 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  && db->activeVdb
153d0 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a  eCnt>1 ){.    /*
153e0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
153f0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
15400 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f  a ROLLBACK and o
15410 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20  ther VMs are.   
15420 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e   ** still runnin
15430 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63  g, and a transac
15440 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20  tion is active, 
15450 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
15460 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a  indicating.    *
15470 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  * that the other
15480 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
15490 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
154a0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
154b0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
154c0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
154d0 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
154e0 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
154f0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
15500 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
15510 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15520 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
15530 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69  ( turnOnAC && !i
15540 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
15550 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29  writeVdbeCnt>0 )
15560 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
15570 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
15580 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
15590 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
155a0 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
155b0 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
155c0 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
155d0 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
155e0 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
155f0 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
15600 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15610 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15620 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
15630 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
15640 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
15650 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
15660 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
15670 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
15680 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
15690 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
156a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
156b0 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
156c0 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
156d0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
156e0 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
156f0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
15700 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64  All(db);.      d
15710 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15720 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
15730 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
15740 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
15750 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
15760 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
15770 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
15780 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
15790 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
157a0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
157b0 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
157c0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
157d0 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
157e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
157f0 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  Y;.        goto 
15800 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
15810 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
15820 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
15830 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
15840 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
15850 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
15860 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
15870 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
15880 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
15890 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
158a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
158b0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
158c0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
158d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
158e0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
158f0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20  ->zErrMsg, db,. 
15900 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
15910 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
15920 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
15930 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
15940 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
15950 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
15960 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
15970 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
15980 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
15990 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
159a0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
159b0 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
159c0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
159d0 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
159e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
159f0 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
15a00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
15a10 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
15a20 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67   * * *.**.** Beg
15a30 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
15a40 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69  .  The transacti
15a50 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43  on ends when a C
15a60 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63  ommit or Rollbac
15a70 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65  k.** opcode is e
15a80 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70  ncountered.  Dep
15a90 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e  ending on the ON
15aa0 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e   CONFLICT settin
15ab0 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61  g, the.** transa
15ac0 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f  ction might also
15ad0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
15ae0 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  if an error is e
15af0 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a  ncountered..**.*
15b00 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
15b10 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
15b20 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
15b30 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
15b40 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
15b50 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
15b60 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
15b70 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
15b80 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
15b90 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
15ba0 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
15bb0 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
15bc0 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
15bd0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
15be0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
15bf0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
15c00 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
15c10 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20  ion is started. 
15c20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   A RESERVED lock
15c30 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20   is.** obtained 
15c40 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
15c50 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74  file when a writ
15c60 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
15c70 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a   started.  No.**
15c80 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63   other process c
15c90 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72  an start another
15ca0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
15cb0 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72  on while this tr
15cc0 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
15cd0 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74  underway.  Start
15ce0 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e  ing a write tran
15cf0 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65  saction also cre
15d00 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  ates a rollback 
15d10 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72  journal. A.** wr
15d20 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
15d30 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
15d40 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67  before any chang
15d50 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
15d60 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
15d70 65 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f  e.  If P2 is 2 o
15d80 72 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61  r greater then a
15d90 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
15da0 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65   is also obtaine
15db0 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65  d.** on the file
15dc0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
15dd0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
15de0 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  ad-lock is obtai
15df0 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
15e00 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73  ase file..*/.cas
15e10 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
15e20 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
15e30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
15e40 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
15e50 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
15e60 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
15e70 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
15e80 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
15e90 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
15ea0 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
15eb0 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
15ec0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
15ed0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
15ee0 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
15ef0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
15f00 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
15f10 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
15f20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
15f30 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
15f40 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
15f50 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
15f60 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53  LITE_OK && rc!=S
15f70 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 2f  QLITE_READONLY /
15f80 2a 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  * && rc!=SQLITE_
15f90 42 55 53 59 20 2a 2f 20 29 7b 0a 20 20 20 20 20  BUSY */ ){.     
15fa0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15fb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
15fc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
15fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
15fe0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
15ff0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
16000 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
16010 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
16020 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
16030 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
16040 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
16050 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
16060 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
16070 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
16080 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
16090 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
160a0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
160b0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
160c0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
160d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
160e0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
160f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
16100 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
16110 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
16120 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
16130 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
16140 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
16150 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
16160 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
16170 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
16180 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
16190 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
161a0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
161b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
161c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
161d0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
161e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
161f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
16200 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
16210 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
16220 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  ie;..  iDb = pOp
16230 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
16240 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
16250 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
16260 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
16270 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
16280 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
16290 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
162a0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
162b0 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
162c0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
162d0 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
162e0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
162f0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
16300 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
16310 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
16320 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
16330 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65  = iMeta;.  MemSe
16340 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
16350 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
16360 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16370 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
16380 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
16390 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
163a0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
163b0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
163c0 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
163d0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
163e0 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
163f0 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
16400 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
16410 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
16420 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
16430 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
16440 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
16450 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
16460 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
16470 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
16480 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
16490 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
164a0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
164b0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
164c0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
164d0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
164e0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
164f0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
16500 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
16510 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
16520 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
16530 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
16540 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
16550 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
16560 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
16570 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
16580 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
16590 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
165a0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
165b0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
165c0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
165d0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
165e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
165f0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
16600 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
16610 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
16620 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
16630 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
16640 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
16650 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
16660 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
16670 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
16680 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
16690 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
166a0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
166b0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
166c0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
166d0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
166e0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
166f0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
16700 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
16710 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
16720 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
16730 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
16740 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
16750 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16760 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
16770 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
16780 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
16790 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
167a0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
167b0 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
167c0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
167d0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
167e0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
167f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
16800 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
16810 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
16820 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
16830 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
16840 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
16850 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
16860 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
16870 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
16880 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
16890 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
168a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
168b0 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f  Opcode: VerifyCo
168c0 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  okie P1 P2 *.**.
168d0 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
168e0 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74  ue of global dat
168f0 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20  abase parameter 
16900 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a  number 0 (the.**
16910 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29   schema version)
16920 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69   and make sure i
16930 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32  t is equal to P2
16940 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .  .** P1 is the
16950 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72   database number
16960 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72 20   which is 0 for 
16970 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16980 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20  e file.** and 1 
16990 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c  for the file hol
169a0 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74  ding temporary t
169b0 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68  ables and some h
169c0 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20  igher number.** 
169d0 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64 61  for auxiliary da
169e0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  tabases..**.** T
169f0 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
16a00 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
16a10 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
16a20 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
16a30 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
16a40 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
16a50 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
16a60 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
16a70 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
16a80 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
16a90 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
16aa0 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
16ab0 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20  a..**.** Either 
16ac0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65  a transaction ne
16ad0 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e  eds to have been
16ae0 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f   started or an O
16af0 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20  P_Open needs.** 
16b00 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 28  to be executed (
16b10 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 72  to establish a r
16b20 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65  ead lock) before
16b30 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a   this opcode is.
16b40 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63  ** invoked..*/.c
16b50 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f  ase OP_VerifyCoo
16b60 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65  kie: {.  int iMe
16b70 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ta;.  Btree *pBt
16b80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
16b90 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
16ba0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
16bb0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
16bc0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
16bd0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
16be0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
16bf0 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70  p1].pBt;.  if( p
16c00 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  Bt ){.    sqlite
16c10 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42  3BtreeGetMeta(pB
16c20 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  t, BTREE_SCHEMA_
16c30 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29  VERSION, (u32 *)
16c40 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65  &iMeta);.  }else
16c50 7b 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b  {.    iMeta = 0;
16c60 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61  .  }.  if( iMeta
16c70 21 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  !=pOp->p2 ){.   
16c80 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
16c90 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
16ca0 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
16cb0 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
16cc0 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
16cd0 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
16ce0 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
16cf0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
16d00 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
16d10 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
16d20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
16d30 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
16d40 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
16d50 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
16d60 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
16d70 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
16d80 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
16d90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16da0 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
16db0 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
16dc0 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
16dd0 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
16de0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
16df0 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
16e00 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
16e10 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
16e20 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
16e30 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
16e40 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
16e50 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
16e60 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
16e70 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
16e80 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
16e90 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
16ea0 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
16eb0 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
16ec0 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
16ed0 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
16ee0 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
16ef0 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
16f00 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
16f10 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
16f20 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
16f30 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
16f40 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
16f50 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
16f60 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
16f70 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
16f80 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
16f90 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
16fa0 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
16fb0 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
16fc0 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
16fd0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
16fe0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
16ff0 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
17000 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
17010 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
17020 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
17030 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  }..    sqlite3Ex
17040 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
17050 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
17060 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
17070 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
17080 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
17090 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
170a0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
170b0 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
170c0 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
170d0 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
170e0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
170f0 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
17100 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
17110 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
17120 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
17130 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
17140 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
17150 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
17160 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
17170 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
17180 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
17190 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
171a0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
171b0 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
171c0 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
171d0 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
171e0 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
171f0 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
17200 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
17210 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
17220 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
17230 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
17240 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
17250 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
17260 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
17270 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
17280 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
17290 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
172a0 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
172b0 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
172c0 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
172d0 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
172e0 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
172f0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
17300 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
17310 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
17320 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
17330 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
17340 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
17350 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17360 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
17370 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
17380 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
17390 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
173a0 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
173b0 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
173c0 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
173d0 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
173e0 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
173f0 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
17400 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
17410 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
17420 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
17430 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
17440 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
17450 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
17460 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
17470 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
17480 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
17490 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
174a0 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
174b0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
174c0 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
174d0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
174e0 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
174f0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
17500 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
17510 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
17520 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
17530 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
17540 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
17550 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
17560 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
17570 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
17580 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
17590 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
175a0 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
175b0 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
175c0 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
175d0 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
175e0 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
175f0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
17600 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
17610 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
17620 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
17630 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a  OpenWrite..*/./*
17640 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
17650 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
17660 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
17670 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
17680 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
17690 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
176a0 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
176b0 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
176c0 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
176d0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
176e0 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
176f0 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
17700 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
17710 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
17720 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
17730 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
17740 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
17750 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
17760 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
17770 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
17780 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
17790 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
177a0 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
177b0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
177c0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
177d0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
177e0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
177f0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
17800 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
17810 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
17820 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
17830 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
17840 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
17850 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
17860 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
17870 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
17880 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
17890 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
178a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
178b0 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
178c0 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
178d0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
178e0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
178f0 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
17900 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
17910 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
17920 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
17930 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
17940 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
17950 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
17960 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
17970 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
17980 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
17990 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
179a0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
179b0 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
179c0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
179d0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
179e0 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
179f0 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
17a00 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
17a10 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
17a20 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 6e 46    Db *pDb;..  nF
17a30 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
17a40 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
17a50 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
17a60 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
17a70 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
17a80 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
17a90 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
17aa0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
17ab0 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
17ac0 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
17ad0 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
17ae0 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
17af0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
17b00 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
17b10 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67  te ){.    wrFlag
17b20 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44   = 1;.    if( pD
17b30 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
17b40 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
17b50 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
17b60 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
17b70 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
17b80 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
17b90 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
17ba0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
17bb0 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
17bc0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
17bd0 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
17be0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
17bf0 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
17c00 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d     pIn2 = &p->aM
17c10 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69  em[p2];.    sqli
17c20 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
17c30 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
17c40 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
17c50 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
17c60 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
17c70 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
17c80 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  or OP_CreateTabl
17c90 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
17ca0 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
17cb0 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
17cc0 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
17cd0 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
17ce0 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
17cf0 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
17d00 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
17d10 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
17d20 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
17d30 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
17d40 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
17d50 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
17d60 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29   if( NEVER(p2<2)
17d70 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20   ) {.      rc = 
17d80 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
17d90 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
17da0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17db0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
17dc0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
17dd0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
17de0 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
17df0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
17e00 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e      pKeyInfo->en
17e10 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
17e20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
17e30 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b  yInfo->nField+1;
17e40 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
17e50 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
17e60 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
17e70 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
17e80 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
17e90 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72  >p1>=0 );.  pCur
17ea0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
17eb0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
17ec0 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20  ield, iDb, 1);. 
17ed0 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
17ee0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
17ef0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
17f00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
17f10 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
17f20 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
17f30 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  nfo, pCur->pCurs
17f40 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
17f50 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
17f60 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74  ;..  /* Since it
17f70 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d   performs no mem
17f80 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f  ory allocation o
17f90 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76  r IO, the only v
17fa0 61 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a 20  alues that.  ** 
17fb0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
17fc0 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20  or() may return 
17fd0 61 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  are SQLITE_EMPTY
17fe0 20 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20   and SQLITE_OK. 
17ff0 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50  .  ** SQLITE_EMP
18000 54 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72  TY is only retur
18010 6e 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70 74  ned when attempt
18020 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  ing to open the 
18030 74 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65  table.  ** roote
18040 64 20 61 74 20 70 61 67 65 20 31 20 6f 66 20 61  d at page 1 of a
18050 20 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61 62   zero-byte datab
18060 61 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72  ase.  */.  asser
18070 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d  t( rc==SQLITE_EM
18080 50 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  PTY || rc==SQLIT
18090 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63  E_OK );.  if( rc
180a0 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29  ==SQLITE_EMPTY )
180b0 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75 72  {.    pCur->pCur
180c0 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  sor = 0;.    rc 
180d0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
180e0 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ..  /* Set the V
180f0 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
18100 65 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61  e and isIndex va
18110 72 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75  riables. Previou
18120 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20  s versions of.  
18130 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74  ** SQLite used t
18140 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72  o check if the r
18150 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77  oot-page flags w
18160 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73  ere sane at this
18170 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20   point.  ** and 
18180 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20  report database 
18190 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68  corruption if th
181a0 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74  ey were not, but
181b0 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a   this check has.
181c0 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64    ** since moved
181d0 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20   into the btree 
181e0 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70  layer.  */  .  p
181f0 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70  Cur->isTable = p
18200 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b  Op->p4type!=P4_K
18210 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e  EYINFO;.  pCur->
18220 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d  isIndex = !pCur-
18230 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
18240 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18250 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50   OpenEphemeral P
18260 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
18270 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
18280 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
18290 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
182a0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
182b0 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
182c0 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
182d0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
182e0 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
182f0 79 2e 20 20 54 68 65 20 74 72 61 6e 73 69 65 6e  y.  The transien
18300 74 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  t or virtual.** 
18310 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
18320 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
18330 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
18340 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
18350 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
18360 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
18370 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
18380 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
18390 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
183a0 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
183b0 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
183c0 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
183d0 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
183e0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
183f0 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
18400 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
18410 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
18420 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
18430 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
18440 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
18450 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64   was once called
18460 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20   OpenTemp.  But 
18470 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20  that created.** 
18480 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73  confusion becaus
18490 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70  e the term "temp
184a0 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72   table", might r
184b0 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74  efer either.** t
184c0 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61  o a TEMP table a
184d0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
184e0 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f   or to a table o
184f0 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73  pened by.** this
18500 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74   opcode.  Then t
18510 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63  his opcode was c
18520 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e  all OpenVirtual.
18530 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72    But.** that cr
18540 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20  eated confusion 
18550 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76  with the whole v
18560 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65  irtual-table ide
18570 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  a..*/.case OP_Op
18580 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
18590 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
185a0 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
185b0 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d   int openFlags =
185c0 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f   .      SQLITE_O
185d0 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a  PEN_READWRITE |.
185e0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
185f0 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20  N_CREATE |.     
18600 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43   SQLITE_OPEN_EXC
18610 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53  LUSIVE |.      S
18620 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54  QLITE_OPEN_DELET
18630 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20  EONCLOSE |.     
18640 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41   SQLITE_OPEN_TRA
18650 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73  NSIENT_DB;..  as
18660 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
18670 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
18680 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
18690 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
186a0 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  -1, 1);.  if( pC
186b0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
186c0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
186d0 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ow = 1;.  rc = s
186e0 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f  qlite3BtreeFacto
186f0 72 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c  ry(db, 0, 1, SQL
18700 49 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50  ITE_DEFAULT_TEMP
18710 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65  _CACHE_SIZE, ope
18720 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20  nFlags,.        
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20     &pCx->pBt);. 
18750 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18760 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
18770 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
18780 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
18790 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
187a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
187b0 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
187c0 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
187d0 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
187e0 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
187f0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
18800 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
18810 74 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52  th the BTREE_ZER
18820 4f 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72  ODATA flag befor
18830 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
18840 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
18850 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
18860 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
18870 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
18880 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
18890 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
188a0 2d 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b  -page 1 (an INTK
188b0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
188c0 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
188d0 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20  4.pKeyInfo ){.  
188e0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
188f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
18900 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
18910 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
18920 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
18930 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
18940 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
18950 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20  _ZERODATA); .   
18960 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18970 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18980 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41  assert( pgno==MA
18990 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20  STER_ROOT+1 );. 
189a0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
189b0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
189c0 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31  Cx->pBt, pgno, 1
189d0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70     (KeyInfo*)pOp
18a00 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75  ->p4.z, pCx->pCu
18a10 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70  rsor);.        p
18a20 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
18a30 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
18a40 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
18a50 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e  eyInfo->enc = EN
18a60 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20  C(p->db);.      
18a70 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
18a80 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
18a90 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
18aa0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
18ab0 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53  or(pCx->pBt, MAS
18ac0 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20  TER_ROOT, 1, 0, 
18ad0 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
18ae0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
18af0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
18b00 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
18b10 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b  = !pCx->isTable;
18b20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18b30 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75  Opcode: OpenPseu
18b40 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  do P1 P2 P3 * *.
18b50 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
18b60 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
18b70 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
18b80 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
18b90 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
18ba0 77 20 6f 66 20 64 61 74 61 2e 20 20 41 6e 79 20  w of data.  Any 
18bb0 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65  attempt to write
18bc0 20 61 20 73 65 63 6f 6e 64 20 72 6f 77 20 6f 66   a second row of
18bd0 20 64 61 74 61 20 63 61 75 73 65 73 20 74 68 65   data causes the
18be0 0a 2a 2a 20 66 69 72 73 74 20 72 6f 77 20 74 6f  .** first row to
18bf0 20 62 65 20 64 65 6c 65 74 65 64 2e 20 20 41 6c   be deleted.  Al
18c00 6c 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65  l data is delete
18c10 64 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  d when the curso
18c20 72 20 69 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a  r is.** closed..
18c30 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
18c40 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
18c50 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
18c60 73 65 66 75 6c 20 66 6f 72 20 68 6f 6c 64 69 6e  seful for holdin
18c70 67 20 74 68 65 0a 2a 2a 20 4e 45 57 20 6f 72 20  g the.** NEW or 
18c80 4f 4c 44 20 74 61 62 6c 65 73 20 69 6e 20 61 20  OLD tables in a 
18c90 74 72 69 67 67 65 72 2e 20 20 41 6c 73 6f 20 75  trigger.  Also u
18ca0 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
18cb0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
18cc0 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
18cd0 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
18ce0 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
18cf0 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
18d00 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
18d10 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
18d20 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a  _Column opcode..
18d30 2a 2a 0a 2a 2a 20 57 68 65 6e 20 4f 50 5f 49 6e  **.** When OP_In
18d40 73 65 72 74 20 69 73 20 65 78 65 63 75 74 65 64  sert is executed
18d50 20 74 6f 20 69 6e 73 65 72 74 20 61 20 72 6f 77   to insert a row
18d60 20 69 6e 20 74 6f 20 74 68 65 20 70 73 65 75 64   in to the pseud
18d70 6f 20 74 61 62 6c 65 2c 0a 2a 2a 20 74 68 65 20  o table,.** the 
18d80 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
18d90 73 6f 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  sor may or may n
18da0 6f 74 20 6d 61 6b 65 20 69 74 27 73 20 6f 77 6e  ot make it's own
18db0 20 63 6f 70 79 20 6f 66 20 74 68 65 0a 2a 2a 20   copy of the.** 
18dc0 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74  original row dat
18dd0 61 2e 20 49 66 20 50 32 20 69 73 20 30 2c 20 74  a. If P2 is 0, t
18de0 68 65 6e 20 74 68 65 20 70 73 65 75 64 6f 2d 74  hen the pseudo-t
18df0 61 62 6c 65 20 77 69 6c 6c 20 63 6f 70 79 20 74  able will copy t
18e00 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72  he.** original r
18e10 6f 77 20 64 61 74 61 2e 20 4f 74 68 65 72 77 69  ow data. Otherwi
18e20 73 65 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  se, a pointer to
18e30 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 65   the original me
18e40 6d 6f 72 79 20 63 65 6c 6c 0a 2a 2a 20 69 73 20  mory cell.** is 
18e50 73 74 6f 72 65 64 2e 20 49 6e 20 74 68 69 73 20  stored. In this 
18e60 63 61 73 65 2c 20 74 68 65 20 76 64 62 65 20 70  case, the vdbe p
18e70 72 6f 67 72 61 6d 20 6d 75 73 74 20 65 6e 73 75  rogram must ensu
18e80 72 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  re that the .** 
18e90 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 63 6f 6e 74  memory cell cont
18ea0 61 69 6e 69 6e 67 20 74 68 65 20 72 6f 77 20 64  aining the row d
18eb0 61 74 61 20 69 73 20 6e 6f 74 20 6f 76 65 72 77  ata is not overw
18ec0 72 69 74 74 65 6e 20 75 6e 74 69 6c 20 74 68 65  ritten until the
18ed0 0a 2a 2a 20 70 73 65 75 64 6f 20 74 61 62 6c 65  .** pseudo table
18ee0 20 69 73 20 63 6c 6f 73 65 64 20 28 6f 72 20 61   is closed (or a
18ef0 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65   new row is inse
18f00 72 74 65 64 20 69 6e 74 6f 20 69 74 29 2e 0a 2a  rted into it)..*
18f10 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
18f20 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
18f30 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
18f40 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
18f50 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
18f60 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
18f70 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
18f80 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
18f90 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
18fa0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
18fb0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
18fc0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
18fd0 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
18fe0 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
18ff0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
19000 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
19010 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
19020 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  oTable = 1;.  pC
19030 78 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61  x->ephemPseudoTa
19040 62 6c 65 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ble = (u8)pOp->p
19050 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
19060 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  e = 1;.  pCx->is
19070 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65  Index = 0;.  bre
19080 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
19090 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
190a0 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
190b0 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
190c0 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
190d0 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
190e0 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
190f0 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
19100 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
19110 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
19120 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
19130 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
19140 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
19150 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
19160 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
19170 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
19180 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
19190 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
191a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
191b0 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20  SeekGe P1 P2 P3 
191c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
191d0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
191e0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
191f0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19200 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19210 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19220 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
19230 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
19240 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
19250 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
19260 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
19270 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
19280 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
19290 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
192a0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
192b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
192c0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
192d0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
192e0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
192f0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
19300 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
19310 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
19320 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
19330 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
19340 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
19350 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
19360 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
19370 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
19380 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
19390 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
193a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
193b0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
193c0 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
193d0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
193e0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
193f0 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50  eekGt P1 P2 P3 P
19400 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
19410 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
19420 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
19430 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
19440 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
19450 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
19460 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
19470 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
19480 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
19490 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
194a0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
194b0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
194c0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
194d0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
194e0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
194f0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
19500 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
19510 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
19520 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
19530 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
19540 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
19550 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
19560 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
19570 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
19580 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
19590 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
195a0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
195b0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
195c0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
195d0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
195e0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
195f0 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
19600 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
19610 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20  e: SeekLt P1 P2 
19620 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49  P3 P4 * .**.** I
19630 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
19640 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
19650 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
19660 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
19670 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
19680 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
19690 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
196a0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
196b0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
196c0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
196d0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
196e0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
196f0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
19700 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
19710 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
19720 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
19730 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
19740 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
19750 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
19760 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
19770 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
19780 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
19790 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
197a0 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
197b0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
197c0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
197d0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
197e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
197f0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
19800 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
19810 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
19820 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
19830 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33   SeekLe P1 P2 P3
19840 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
19850 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19860 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
19870 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
19880 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
19890 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
198a0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
198b0 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
198c0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
198d0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
198e0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
198f0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
19900 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
19910 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
19920 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
19930 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
19940 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
19950 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
19960 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
19970 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
19980 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
19990 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
199a0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
199b0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
199c0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
199d0 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
199e0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
199f0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
19a00 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
19a10 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
19a20 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
19a30 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
19a40 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
19a50 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
19a60 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20  P_SeekLt:       
19a70 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
19a80 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65  /.case OP_SeekLe
19a90 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
19aa0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
19ab0 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20  P_SeekGe:       
19ac0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
19ad0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74  /.case OP_SeekGt
19ae0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
19af0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
19b00 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20  res;.  int oc;. 
19b10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
19b20 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
19b30 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d r;.  int nFiel
19b40 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  d;.  i64 iKey;  
19b50 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
19b60 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
19b70 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
19b80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
19b90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
19ba0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
19bb0 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
19bc0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
19bd0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
19be0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
19bf0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
19c00 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
19c10 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
19c20 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
19c30 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
19c40 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
19c50 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
19c60 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
19c70 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
19c80 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
19c90 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
19ca0 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
19cb0 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
19cc0 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
19cd0 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
19ce0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
19cf0 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
19d00 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
19d10 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
19d20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
19d30 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
19d40 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  In3);.      pC->
19d50 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
19d60 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ;..      /* If t
19d70 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
19d80 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
19d90 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
19da0 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20  er without.     
19db0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
19dc0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
19dd0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
19de0 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
19df0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
19e00 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
19e10 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
19e20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
19e30 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
19e40 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
19e50 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
19e60 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
19e70 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
19e80 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
19e90 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74  ,.          ** t
19ea0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
19eb0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
19ec0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
19ed0 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
19ee0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
19ef0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
19f00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
19f10 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
19f20 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68  s point, then th
19f30 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
19f40 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20  be a floating.  
19f50 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e        ** point n
19f60 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  umber. */.      
19f70 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
19f80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
19f90 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  l)!=0 );..      
19fa0 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c    if( iKey==SMAL
19fb0 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70  LEST_INT64 && (p
19fc0 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69  In3->r<(double)i
19fd0 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30  Key || pIn3->r>0
19fe0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  ) ){.          /
19ff0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
1a000 73 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d  s too large in m
1a010 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65  agnitude to be e
1a020 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20  xpressed as an. 
1a030 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65           ** inte
1a040 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ger. */.        
1a050 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20    res = 1;.     
1a060 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1a070 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
1a080 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1a090 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGt || oc==OP_Se
1a0a0 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekGe ){.        
1a0b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a0c0 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d  e3BtreeFirst(pC-
1a0d0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1a0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1a0f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a100 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a110 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a120 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a130 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1a140 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f         if( oc==O
1a150 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1a160 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20  OP_SeekLe ){.   
1a170 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1a180 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1a190 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1a1a0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  es);.           
1a1b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1a1c0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1a1d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1a1f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a200 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1a210 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20             pc = 
1a220 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1a230 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1a240 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1a250 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d    }else if( oc==
1a260 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1a270 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
1a280 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1a290 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e  he ceiling() fun
1a2a0 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
1a2b0 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20   real->int */.  
1a2c0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1a2d0 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b  ->r > (double)iK
1a2e0 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20  ey ) iKey++;.   
1a2f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1a300 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65        /* Use the
1a310 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f   floor() functio
1a320 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1a330 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1a340 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
1a350 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d  OP_SeekLe || oc=
1a360 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1a370 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1a380 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b  ->r < (double)iK
1a390 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20  ey ) iKey--;.   
1a3a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a       }.      } .
1a3b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a3c0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1a3d0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1a3e0 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1a3f0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1a400 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a410 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1a420 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a430 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1a440 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1a450 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  ){.        pC->r
1a460 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1a470 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73  .        pC->las
1a480 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
1a490 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
1a4a0 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d  {.      nField =
1a4b0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1a4c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a4d0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1a4e0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1a4f0 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1a500 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1a510 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1a520 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1a530 75 31 36 29 6e 46 69 65 6c 64 3b 0a 20 20 20 20  u16)nField;.    
1a540 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1a550 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGt || oc==OP_Se
1a560 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekLe ){.        
1a570 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1a580 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20  ED_INCRKEY;.    
1a590 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1a5a0 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
1a5b0 20 20 20 20 7d 0a 20 20 20 20 20 20 72 2e 61 4d      }.      r.aM
1a5c0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1a5d0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72 63  p->p3];.      rc
1a5e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1a5f0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1a600 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  ->pCursor, &r, 0
1a610 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1a620 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a630 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1a640 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a650 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1a660 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1a670 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1a680 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
1a690 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1a6a0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1a6b0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1a6c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1a6d0 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
1a6e0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1a6f0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f  #endif.    if( o
1a700 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c==OP_SeekGe || 
1a710 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 7b  oc==OP_SeekGt ){
1a720 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30  .      if( res<0
1a730 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1a740 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b  c==OP_SeekGt) ){
1a750 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1a760 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
1a770 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1a780 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1a790 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1a7a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a7b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1a7c0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1a7d0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1a7e0 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
1a7f0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1a800 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
1a810 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1a820 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
1a830 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28  kLe );.      if(
1a840 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d   res>0 || (res==
1a850 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1a860 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Lt) ){.        r
1a870 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a880 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
1a890 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1a8a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a8b0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1a8c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a8d0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
1a8e0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1a8f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a900 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
1a910 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
1a920 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
1a930 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
1a940 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   to.        ** s
1a950 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1a960 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20  e case..        
1a970 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  */.        res =
1a980 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1a990 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1a9a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1a9b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1a9c0 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  >0 );.    if( re
1a9d0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
1a9e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1a9f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1aa00 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
1aa10 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20  when attempting 
1aa20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69  to open the sqli
1aa30 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  te3_master table
1aa40 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64  .    ** for read
1aa50 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20   access returns 
1aa60 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e  SQLITE_EMPTY. In
1aa70 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79   this case alway
1aa80 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68  s.    ** take th
1aa90 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68  e jump (since th
1aaa0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1aab0 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29  ds in the table)
1aac0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1aad0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1aae0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 70  able==0 );.    p
1aaf0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ab00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1ab10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1ab20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1ab30 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1ab40 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1ab50 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1ab60 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1ab70 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1ab80 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1ab90 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1aba0 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1abb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1abc0 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1abd0 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1abe0 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1abf0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1ac00 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1ac10 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1ac20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1ac30 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1ac40 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1ac50 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1ac60 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1ac70 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1ac80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1ac90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1aca0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1acb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1acc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1acd0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1ace0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
1acf0 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
1ad00 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
1ad10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1ad20 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  le );.    pC->nu
1ad30 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1ad40 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1ad50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1ad60 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
1ad70 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1ad80 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64  d = 0;.    pC->d
1ad90 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1ada0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1adb0 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1adc0 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1add0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  * *.**.** Regist
1ade0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1adf0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1ae00 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50  y MakeRecord.  P
1ae10 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a  1 is an index..*
1ae20 2a 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74 68  * If an entry th
1ae30 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 76  at matches the v
1ae40 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1ae50 20 70 33 20 65 78 69 73 74 73 20 69 6e 20 50 31   p3 exists in P1
1ae60 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
1ae70 20 50 32 2e 20 20 49 66 20 74 68 65 20 50 33 20   P2.  If the P3 
1ae80 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
1ae90 61 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20 69  atch any entry i
1aea0 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c  n P1.** then fal
1aeb0 6c 20 74 68 72 75 2e 20 20 54 68 65 20 50 31 20  l thru.  The P1 
1aec0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 70  cursor is left p
1aed0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1aee0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a  atching entry.**
1aef0 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
1af00 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1af10 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
1af20 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 49   implement the I
1af30 4e 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72 65  N operator where
1af40 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e   the.** left-han
1af50 64 20 73 69 64 65 20 69 73 20 61 20 53 45 4c 45  d side is a SELE
1af60 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50  CT statement.  P
1af70 31 20 6d 61 79 20 62 65 20 61 20 74 72 75 65 20  1 may be a true 
1af80 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20  index, or it.** 
1af90 6d 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72 61  may be a tempora
1afa0 72 79 20 69 6e 64 65 78 20 74 68 61 74 20 68 6f  ry index that ho
1afb0 6c 64 73 20 74 68 65 20 72 65 73 75 6c 74 73 20  lds the results 
1afc0 6f 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a  of the SELECT.**
1afd0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54 68   statement.   Th
1afe0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1aff0 73 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20 69  s also used to i
1b000 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1b010 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1b020 20 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65   in SELECT state
1b030 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ments..**.** Thi
1b040 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68  s instruction ch
1b050 65 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50 31  ecks if index P1
1b060 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63 6f   contains a reco
1b070 72 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a  rd for which .**
1b080 20 74 68 65 20 66 69 72 73 74 20 4e 20 73 65 72   the first N ser
1b090 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20 65  ialized values e
1b0a0 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
1b0b0 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61   N serialized va
1b0c0 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72  lues.** in the r
1b0d0 65 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74 65  ecord in registe
1b0e0 72 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69 73  r P3, where N is
1b0f0 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
1b100 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a  r of values in.*
1b110 2a 20 74 68 65 20 50 33 20 72 65 63 6f 72 64 20  * the P3 record 
1b120 28 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 69  (the P3 record i
1b130 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
1b140 65 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a  e P1 record). .*
1b150 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1b160 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1b170 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  e, NotExists.*/.
1b180 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
1b190 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  und P1 P2 P3 * *
1b1a0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
1b1b0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1b1c0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1b1d0 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69  akeRecord.  P1 i
1b1e0 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20  s.** an index.  
1b1f0 49 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69 73  If no entry exis
1b200 74 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61  ts in P1 that ma
1b210 74 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20 74  tches the blob t
1b220 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  hen jump.** to P
1b230 32 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79 20  2.  If an entry 
1b240 64 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20 66  does existing, f
1b250 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68  all through.  Th
1b260 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
1b270 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  .** pointing to 
1b280 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 6d  the entry that m
1b290 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  atches..**.** Se
1b2a0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1b2b0 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71  otExists, IsUniq
1b2c0 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1b2d0 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
1b2e0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1b2f0 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
1b300 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b310 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
1b320 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62  adyExists;.  Vdb
1b330 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1b340 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
1b350 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1b360 79 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52  y;.  char aTempR
1b370 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  ec[ROUND8(sizeof
1b380 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29  (UnpackedRecord)
1b390 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a  ) + sizeof(Mem)*
1b3a0 33 20 2b 20 37 5d 3b 0a 0a 20 20 61 6c 72 65 61  3 + 7];..  alrea
1b3b0 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  dyExists = 0;.  
1b3c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b3d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1b3e0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1b3f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1b400 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1b410 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41  pC!=0 );.  if( A
1b420 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
1b430 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73  r!=0) ){..    as
1b440 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1b450 65 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  e==0 );.    asse
1b460 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1b470 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1b480 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
1b490 33 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20  3);.    pIdxKey 
1b4a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63  = sqlite3VdbeRec
1b4b0 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1b4c0 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1b4d0 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20   pIn3->z,.      
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
1b510 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20  (aTempRec));.   
1b520 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
1b530 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
1b540 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
1b550 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1b560 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
1b570 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1b580 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1b590 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1b5a0 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1b5b0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1b5c0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1b5d0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1b5e0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c  , &res);.    sql
1b5f0 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e  ite3VdbeDeleteUn
1b600 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64  packedRecord(pId
1b610 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72  xKey);.    if( r
1b620 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1b630 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1b640 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1b650 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1b660 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1b670 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1b680 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1b690 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1b6a0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1b6b0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1b6c0 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1b6d0 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1b6e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1b6f0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1b700 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1b710 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1b720 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1b730 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1b740 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1b750 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1b760 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1b770 20 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68   index.  So it h
1b780 61 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69  as no data and i
1b790 74 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20  ts key consists 
1b7a0 0a 2a 2a 20 6f 66 20 61 20 72 65 63 6f 72 64 20  .** of a record 
1b7b0 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f  generated by OP_
1b7c0 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65  MakeRecord where
1b7d0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
1b7e0 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64  is the .** rowid
1b7f0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1b800 61 74 20 74 68 65 20 69 6e 64 65 78 20 72 65 66  at the index ref
1b810 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68  ers to..**.** Th
1b820 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f  e P3 register co
1b830 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65  ntains an intege
1b840 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  r record number.
1b850 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72   Call this recor
1b860 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20  d .** number R. 
1b870 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74  Register P4 is t
1b880 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65  he first in a se
1b890 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75  t of N contiguou
1b8a0 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74  s registers.** t
1b8b0 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75  hat make up an u
1b8c0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1b8d0 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  y that can be us
1b8e0 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50  ed with cursor P
1b8f0 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  1..** The value 
1b900 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65  of N can be infe
1b910 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75  rred from the cu
1b920 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73  rsor. N includes
1b930 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61   the rowid.** va
1b940 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20  lue appended to 
1b950 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
1b960 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69  ndex record. Thi
1b970 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61  s rowid value ma
1b980 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20  y.** or may not 
1b990 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52  be the same as R
1b9a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f  ..**.** If any o
1b9b0 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72  f the N register
1b9c0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1b9d0 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e   register P4 con
1b9e0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20  tains a NULL.** 
1b9f0 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1ba00 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1ba10 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
1ba20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1ba30 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f   checks if curso
1ba40 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e  r P1 contains an
1ba50 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20   entry.** where 
1ba60 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20  the first (N-1) 
1ba70 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74  fields match but
1ba80 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65   the rowid value
1ba90 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
1baa0 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  f the index entr
1bab0 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74  y is not R. If t
1bac0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1bad0 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a  entry, control j
1bae0 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72  umps.** to instr
1baf0 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
1bb00 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20  wise, the rowid 
1bb10 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1bb20 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72  ng index.** entr
1bb30 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72  y is copied to r
1bb40 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63  egister P3 and c
1bb50 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72  ontrol falls thr
1bb60 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1bb70 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1bb80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1bb90 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
1bba0 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
1bbb0 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
1bbc0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1bbd0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20  p, in3 */.  u16 
1bbe0 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1bbf0 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1bc00 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20  r *pCrsr;.  u16 
1bc10 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61  nField;.  Mem *a
1bc20 4d 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Mem;.  UnpackedR
1bc30 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20  ecord r;        
1bc40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54            /* B-T
1bc50 72 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  ree index search
1bc60 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b   key */.  i64 R;
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc90 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20  Rowid stored in 
1bca0 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a  register P3 */..
1bcb0 20 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65    aMem = &p->aMe
1bcc0 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20  m[pOp->p4.i];.  
1bcd0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
1bce0 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72  he values of par
1bcf0 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50  ameters P1 and P
1bd00 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20  4 are in range. 
1bd10 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1bd20 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1bd30 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
1bd40 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70  pOp->p4.i>0 && p
1bd50 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65  Op->p4.i<=p->nMe
1bd60 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
1bd70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1bd80 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1bd90 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  );..  /* Find th
1bda0 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20  e index cursor. 
1bdb0 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70  */.  pCx = p->ap
1bdc0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1bdd0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66  assert( pCx->def
1bde0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1bdf0 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73  ;.  pCx->seekRes
1be00 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e  ult = 0;.  pCx->
1be10 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1be20 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72  CHE_STALE;.  pCr
1be30 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f  sr = pCx->pCurso
1be40 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20  r;..  /* If any 
1be50 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  of the values ar
1be60 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65  e NULL, take the
1be70 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65   jump. */.  nFie
1be80 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ld = pCx->pKeyIn
1be90 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f  fo->nField;.  fo
1bea0 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c  r(ii=0; ii<nFiel
1beb0 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66  d; ii++){.    if
1bec0 28 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  ( aMem[ii].flags
1bed0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1bee0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1bef0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72  2 - 1;.      pCr
1bf00 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72  sr = 0;.      br
1bf10 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
1bf20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e   assert( (aMem[n
1bf30 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d  Field].flags & M
1bf40 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a  EM_Null)==0 );..
1bf50 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
1bf60 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74  {.    /* Populat
1bf70 65 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72  e the index sear
1bf80 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72  ch key. */.    r
1bf90 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d  .pKeyInfo = pCx-
1bfa0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1bfb0 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64  .nField = nField
1bfc0 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67   + 1;.    r.flag
1bfd0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
1bfe0 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20  FIX_SEARCH;.    
1bff0 72 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a  r.aMem = aMem;..
1c000 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74      /* Extract t
1c010 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72  he value of R fr
1c020 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  om register P3. 
1c030 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
1c040 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1c050 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70  pIn3);.    R = p
1c060 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f  In3->u.i;..    /
1c070 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54  * Search the B-T
1c080 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f  ree index. If no
1c090 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1c0a0 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75  ord is found, ju
1c0b0 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e  mp.    ** to P2.
1c0c0 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79   Otherwise, copy
1c0d0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1c0e0 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  e conflicting re
1c0f0 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72  cord to.    ** r
1c100 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66  egister P3 and f
1c110 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1c120 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1c130 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20  ion.  */.    rc 
1c140 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1c150 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1c160 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70  sr, &r, 0, 0, &p
1c170 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b  Cx->seekResult);
1c180 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67  .    if( (r.flag
1c190 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s & UNPACKED_PRE
1c1a0 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72  FIX_SEARCH) || r
1c1b0 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20  .rowid==R ){.   
1c1c0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1c1d0 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  - 1;.    }else{.
1c1e0 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20        pIn3->u.i 
1c1f0 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d  = r.rowid;.    }
1c200 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c210 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1c220 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1c230 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65   *.**.** Use the
1c240 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1c250 73 74 65 72 20 50 33 20 61 73 20 61 20 69 6e 74  ster P3 as a int
1c260 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20  eger key.  If a 
1c270 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20  record .** with 
1c280 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f  that key does no
1c290 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65  t exist in table
1c2a0 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d   of P1, then jum
1c2b0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20  p to P2. .** If 
1c2c0 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20  the record does 
1c2d0 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c  exist, then fall
1c2e0 20 74 68 72 75 2e 20 20 54 68 65 20 63 75 72 73   thru.  The curs
1c2f0 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70  or is left .** p
1c300 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72  ointing to the r
1c310 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73  ecord if it exis
1c320 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69  ts..**.** The di
1c330 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1c340 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   this operation 
1c350 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20  and NotFound is 
1c360 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65  that this.** ope
1c370 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74  ration assumes t
1c380 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74  he key is an int
1c390 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31  eger and that P1
1c3a0 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72   is a table wher
1c3b0 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20  eas.** NotFound 
1c3c0 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61  assumes key is a
1c3d0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1c3e0 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72  d from MakeRecor
1c3f0 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61  d and.** P1 is a
1c400 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53  n index..**.** S
1c410 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1c420 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
1c430 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1c440 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
1c450 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c460 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1c470 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1c480 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1c490 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
1c4a0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1c4b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1c4c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c4d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c4e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c4f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c500 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c510 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1c520 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1c530 6c 65 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  le );.  pCrsr = 
1c540 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
1c550 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
1c560 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1c570 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
1c580 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1c590 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1c5a0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
1c5b0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1c5c0 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1c5d0 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  d = pIn3->u.i;. 
1c5e0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c5f0 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1c600 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  0;.    pC->nullR
1c610 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  ow = 0;.    pC->
1c620 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1c630 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70  CHE_STALE;.    p
1c640 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1c650 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  o = 0;.    if( r
1c660 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es!=0 ){.      p
1c670 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c680 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1c690 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1c6a0 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  =0 );.    }.    
1c6b0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1c6c0 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   res;.  }else{. 
1c6d0 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1c6e0 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d  ns when an attem
1c6f0 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61  pt to open a rea
1c700 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20  d cursor on the 
1c710 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d  .    ** sqlite_m
1c720 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75  aster table retu
1c730 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
1c740 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1c750 65 72 74 28 20 21 70 43 2d 3e 70 73 65 75 64 6f  ert( !pC->pseudo
1c760 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
1c770 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1c780 20 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   );.    pc = pOp
1c790 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1c7a0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1c7b0 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1c7c0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1c7d0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
1c7e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c7f0 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1c800 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20   * *.**.** Find 
1c810 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
1c820 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
1c830 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
1c840 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
1c850 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
1c860 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1c870 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
1c880 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
1c890 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
1c8a0 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
1c8b0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
1c8c0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
1c8d0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
1c8e0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
1c8f0 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
1c900 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1c910 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1c920 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1c930 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c940 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  1]!=0 );.  pOut-
1c950 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
1c960 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
1c970 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79  nt++;.  MemSetTy
1c980 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
1c990 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
1c9a0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1c9b0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1c9c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
1c9d0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1c9e0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1c9f0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1ca00 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1ca10 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1ca20 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1ca30 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1ca40 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1ca50 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1ca60 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1ca70 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1ca80 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1ca90 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1caa0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1cab0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1cac0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1cad0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1cae0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1caf0 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1cb00 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1cb10 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1cb20 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1cb30 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1cb40 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1cb50 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1cb60 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1cb70 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1cb80 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1cb90 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1cba0 75 6d 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54 45  um, .** a SQLITE
1cbb0 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
1cbc0 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
1cbd0 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1cbe0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
1cbf0 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1cc00 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
1cc10 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1cc20 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1cc30 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1cc40 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1cc50 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1cc60 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1cc70 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1cc80 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1cc90 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1cca0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1ccb0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1ccc0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1ccd0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1cce0 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1ccf0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1cd00 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1cd10 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1cd20 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1cd30 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1cd40 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1cd50 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1cd60 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1cd70 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1cd80 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cda0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1cdb0 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1cdc0 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1cdd0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
1cde0 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
1cdf0 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
1ce00 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
1ce10 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
1ce20 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ce30 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ce40 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1ce50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ce60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1ce70 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
1ce80 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
1ce90 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
1cea0 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1ceb0 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1cec0 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1ced0 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1cee0 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1cef0 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1cf00 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1cf10 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1cf20 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1cf30 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1cf40 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1cf50 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1cf60 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1cf70 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1cf80 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1cf90 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1cfa0 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1cfb0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1cfc0 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1cfd0 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1cfe0 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1cff0 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1d000 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1d010 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1d020 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1d030 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1d040 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1d050 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1d060 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1d070 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1d080 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1d090 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1d0a0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1d0b0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1d0c0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1d0d0 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1d0e0 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1d0f0 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1d100 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1d110 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1d120 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1d130 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1d140 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
1d150 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1d160 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1d170 20 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65   cnt = 0;..#ifde
1d180 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1d190 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1d1a0 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1d1b0 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1d1c0 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1d1d0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1d1e0 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1d1f0 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1d200 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1d210 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1d220 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1d230 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1d240 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1d250 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1d260 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1d270 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1d280 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1d290 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1d2a0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1d2b0 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
1d2c0 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
1d2d0 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
1d2e0 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
1d2f0 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
1d300 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1d310 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
1d320 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
1d330 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1d340 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
1d350 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1d360 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1d370 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1d380 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1d390 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1d3a0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1d3b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d3c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1d3d0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1d3e0 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1d3f0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
1d400 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
1d410 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1d420 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
1d430 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
1d440 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1d450 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1d460 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1d470 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1d480 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1d490 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1d4a0 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1d4b0 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
1d4c0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
1d4d0 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v==MAX_ROWID ){
1d4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
1d4f0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1d500 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
1d510 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1d520 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20    v++;.         
1d530 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1d540 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
1d550 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1d560 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66  CREMENT.      if
1d570 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
1d580 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
1d590 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
1d5a0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
1d5b0 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
1d5c0 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
1d5d0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
1d5e0 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d            pMem =
1d5f0 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
1d600 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
1d610 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1d620 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65    pMem = &p->aMe
1d630 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1d640 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
1d650 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
1d660 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
1d670 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
1d680 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1d690 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
1d6a0 3d 28 70 2d 3e 70 46 72 61 6d 65 20 3f 20 70 46  =(p->pFrame ? pF
1d6b0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3a 20 70 2d 3e  rame->nMem : p->
1d6c0 6e 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  nMem) );..      
1d6d0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1d6e0 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
1d6f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1d700 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1d710 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  y(pMem);.       
1d720 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
1d730 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1d740 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
1d750 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
1d760 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ger */.        i
1d770 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
1d780 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
1d790 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1d7a0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1d7b0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20  SQLITE_FULL;.   
1d7c0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1d7d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d7e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d7f0 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
1d800 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i+1 ){.         
1d810 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
1d820 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
1d830 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
1d840 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = v;.      }.#en
1d850 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  dif..      sqlit
1d860 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
1d870 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1d880 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f  r, v<MAX_ROWID ?
1d890 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d   v+1 : 0);.    }
1d8a0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
1d8b0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1d8c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1d8d0 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
1d8e0 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
1d8f0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
1d900 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
1d930 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
1d940 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  le. */.      v =
1d950 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
1d960 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
1d970 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
1d980 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28   if( cnt==0 && (
1d990 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29  v&0xffffff)==v )
1d9a0 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
1d9b0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1d9c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1d9d0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
1d9e0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
1d9f0 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1da00 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66 66   ) v &= 0xffffff
1da10 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1da20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1da30 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1da40 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1da50 20 30 2c 20 28 75 36 34 29 76 2c 20 30 2c 20 26   0, (u64)v, 0, &
1da60 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1da70 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1da80 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 63  e( cnt<100 && rc
1da90 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1daa0 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  es==0 );.      i
1dab0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1dac0 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
1dad0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1dae0 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20  E_FULL;.        
1daf0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1db00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1db10 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
1db20 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1db30 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1db40 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1db50 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1db60 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1db70 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
1db80 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
1db90 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  nt);.  pOut->u.i
1dba0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
1dbb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
1dbc0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
1dbd0 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  P5.**.** Write a
1dbe0 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
1dbf0 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
1dc00 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
1dc10 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
1dc20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
1dc30 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
1dc40 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
1dc50 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
1dc60 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
1dc70 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
1dc80 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 72  e value stored r
1dc90 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
1dca0 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
1dcb0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1dcc0 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
1dcd0 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e  must.** be an in
1dce0 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  teger..**.** If 
1dcf0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1dd00 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
1dd10 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1dd20 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1dd30 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1dd40 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1dd50 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
1dd60 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
1dd70 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
1dd80 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
1dd90 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
1dda0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
1ddb0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
1ddc0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1ddd0 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
1dde0 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
1ddf0 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
1de00 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
1de10 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69   point to a stri
1de20 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
1de30 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72  e table-name, or
1de40 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  .** may be NULL.
1de50 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
1de60 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
1de70 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71  ate-hook .** (sq
1de80 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
1de90 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
1dea0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
1deb0 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
1dec0 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
1ded0 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
1dee0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
1def0 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
1df00 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
1df10 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
1df20 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
1df30 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
1df40 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
1df50 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
1df60 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
1df70 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
1df80 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
1df90 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
1dfa0 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
1dfb0 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
1dfc0 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
1dfd0 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
1dfe0 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
1dff0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1e000 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
1e010 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
1e020 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
1e030 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
1e040 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
1e050 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
1e060 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20  Insert: {.  Mem 
1e070 2a 70 44 61 74 61 3b 0a 20 20 4d 65 6d 20 2a 70  *pData;.  Mem *p
1e080 4b 65 79 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  Key;.  i64 iKey;
1e090 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
1e0a0 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
1e0b0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
1e0c0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
1e0d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e0e0 3b 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20  ;.  int nZero;. 
1e0f0 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
1e100 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1e110 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
1e120 20 2a 7a 54 62 6c 3b 0a 20 20 69 6e 74 20 6f 70   *zTbl;.  int op
1e130 3b 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 70 2d  ;..  pData = &p-
1e140 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1e150 20 20 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65    pKey = &p->aMe
1e160 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1e170 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e180 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e190 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1e1a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e1b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1e1c0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1e1d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1e1e0 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  || pC->pseudoTab
1e1f0 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
1e200 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
1e210 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
1e220 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1e230 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1e240 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
1e250 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  a);.  REGISTER_T
1e260 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
1e270 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 70  ey);..  iKey = p
1e280 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  Key->u.i;.  if( 
1e290 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1e2a0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1e2b0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
1e2c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1e2d0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
1e2e0 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b 65 79  lastRowid = pKey
1e2f0 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 44 61  ->u.i;.  if( pDa
1e300 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1e310 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
1e320 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
1e330 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
1e340 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1e350 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1e360 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
1e370 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  r) );.  }.  if( 
1e380 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
1e390 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  ){.    if( !pC->
1e3a0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1e3b0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1e3c0 33 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d 3e  3DbFree(db, pC->
1e3d0 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20  pData);.    }.  
1e3e0 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65    pC->iKey = iKe
1e3f0 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74 61  y;.    pC->nData
1e400 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20   = pData->n;.   
1e410 20 69 66 28 20 70 43 2d 3e 65 70 68 65 6d 50 73   if( pC->ephemPs
1e420 65 75 64 6f 54 61 62 6c 65 20 7c 7c 20 70 44 61  eudoTable || pDa
1e430 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e 7a 4d  ta->z==pData->zM
1e440 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 70  alloc ){.      p
1e450 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74 61  C->pData = pData
1e460 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20 21  ->z;.      if( !
1e470 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54  pC->ephemPseudoT
1e480 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20  able ){.        
1e490 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20  pData->flags &= 
1e4a0 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20  ~MEM_Dyn;.      
1e4b0 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c    pData->flags |
1e4c0 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20  = MEM_Ephem;.   
1e4d0 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c       pData->zMal
1e4e0 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  loc = 0;.      }
1e4f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1e500 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73 71    pC->pData = sq
1e510 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d  lite3Malloc( pC-
1e520 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20  >nData+2 );.    
1e530 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74 61    if( !pC->pData
1e540 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1e550 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43 2d        memcpy(pC-
1e560 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a  >pData, pData->z
1e570 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20  , pC->nData);.  
1e580 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1e590 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20  ->nData] = 0;.  
1e5a0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1e5b0 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a  ->nData+1] = 0;.
1e5c0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75      }.    pC->nu
1e5d0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c  llRow = 0;.  }el
1e5e0 73 65 7b 0a 20 20 20 20 73 65 65 6b 52 65 73 75  se{.    seekResu
1e5f0 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
1e600 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
1e610 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
1e620 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
1e630 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1e640 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1e650 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  .      nZero = p
1e660 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
1e670 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e680 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d  nZero = 0;.    }
1e690 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1e6a0 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1e6b0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1e6c0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1e6d0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
1e6e0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
1e6f0 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1e710 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
1e720 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e740 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
1e750 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73  OPFLAG_APPEND, s
1e760 65 65 6b 52 65 73 75 6c 74 0a 20 20 20 20 29 3b  eekResult.    );
1e770 0a 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f  .  }.  .  pC->ro
1e780 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1e790 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1e7a0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1e7b0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1e7c0 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
1e7d0 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
1e7e0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
1e7f0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
1e800 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
1e810 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1e820 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
1e830 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
1e840 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1e850 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
1e860 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
1e870 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
1e880 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
1e890 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
1e8a0 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
1e8b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1e8c0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1e8d0 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
1e8e0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
1e8f0 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
1e900 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
1e910 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
1e920 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
1e930 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e940 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
1e950 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
1e960 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
1e970 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
1e980 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
1e990 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
1e9a0 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
1e9b0 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
1e9c0 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
1e9d0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
1e9e0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
1e9f0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
1ea00 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
1ea10 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
1ea20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
1ea30 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
1ea40 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
1ea50 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
1ea60 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
1ea70 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
1ea80 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
1ea90 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
1eaa0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
1eab0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
1eac0 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
1ead0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
1eae0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
1eaf0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
1eb00 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
1eb10 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
1eb20 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
1eb30 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
1eb40 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
1eb50 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
1eb60 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1eb70 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ULL, then it is 
1eb80 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1eb90 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73  table that P1 is
1eba0 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  .** pointing to.
1ebb0 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f    The update hoo
1ebc0 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1ebd0 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  d, if it exists.
1ebe0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
1ebf0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50   NULL then the P
1ec00 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  1 cursor must ha
1ec10 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
1ec20 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e  ed.** using OP_N
1ec30 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
1ec40 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
1ec50 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
1ec60 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36  P_Delete: {.  i6
1ec70 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75  4 iKey;.  VdbeCu
1ec80 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65  rsor *pC;..  iKe
1ec90 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  y = 0;.  assert(
1eca0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ecb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1ecc0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ecd0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ece0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ecf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ed00 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
1ed10 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
1ed20 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
1ed30 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
1ed40 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
1ed50 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
1ed60 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69  e invoked, set i
1ed70 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64  Key to the rowid
1ed80 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77   of the.  ** row
1ed90 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a   being deleted..
1eda0 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
1edb0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
1edc0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
1edd0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1ede0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73  sTable );.    as
1edf0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1ee00 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61  sValid );  /* la
1ee10 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70  stRowid set by p
1ee20 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f  revious OP_NotFo
1ee30 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20  und */.    iKey 
1ee40 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
1ee50 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  .  }..  /* The O
1ee60 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20  P_Delete opcode 
1ee70 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61  always follows a
1ee80 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  n OP_NotExists o
1ee90 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a  r OP_Last or.  *
1eea0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74  * OP_Column on t
1eeb0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69  he same table wi
1eec0 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76  thout any interv
1eed0 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73  ening operations
1eee0 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74   that.  ** might
1eef0 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64   move or invalid
1ef00 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ate the cursor. 
1ef10 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43   Hence cursor pC
1ef20 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74   is always point
1ef30 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ing.  ** to the 
1ef40 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
1ef50 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
1ef60 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
1ef70 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20  o() operation.  
1ef80 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61  ** below is alwa
1ef90 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ys a no-op and c
1efa0 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20  annot fail.  We 
1efb0 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68  will run it anyh
1efc0 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a  ow, though,.  **
1efd0 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73   to guard agains
1efe0 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73  t future changes
1eff0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e   to the code gen
1f000 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20  erator..  **/.  
1f010 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
1f020 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1f030 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1f040 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1f050 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
1f060 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
1f070 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1f080 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71  _to_error;..  sq
1f090 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1f0a0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1f0b0 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d  rsor, 0);.  rc =
1f0c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
1f0d0 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
1f0e0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1f0f0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1f100 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
1f110 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1f120 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
1f130 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1f140 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
1f150 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1f160 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63  p->p4.z ){.    c
1f170 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
1f180 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1f190 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e  ].zName;.    con
1f1a0 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20  st char *zTbl = 
1f1b0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64  pOp->p4.z;.    d
1f1c0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1f1d0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
1f1e0 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
1f1f0 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
1f200 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
1f210 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1f220 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  }.  if( pOp->p2 
1f230 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1f240 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1f250 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f260 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
1f270 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  nt P1 * *.**.** 
1f280 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 73 65  This opcode rese
1f290 74 73 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  ts the VMs inter
1f2a0 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
1f2b0 65 72 20 74 6f 20 30 2e 20 49 66 20 50 31 20 69  er to 0. If P1 i
1f2c0 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20  s true,.** then 
1f2d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f2e0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1f2f0 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
1f300 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1f310 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
1f320 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
1f330 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
1f340 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
1f350 67 65 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65  ges()).** before
1f360 20 69 74 20 69 73 20 72 65 73 65 74 2e 20 54 68   it is reset. Th
1f370 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
1f380 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
1f390 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
1f3a0 43 6f 75 6e 74 3a 20 7b 0a 20 20 69 66 28 20 70  Count: {.  if( p
1f3b0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
1f3c0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
1f3d0 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
1f3e0 67 65 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43  ge);.  }.  p->nC
1f3f0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
1f400 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1f410 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
1f420 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1f430 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1f440 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1f450 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
1f460 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1f470 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1f480 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1f490 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
1f4a0 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
1f4b0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
1f4c0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1f4d0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1f4e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1f4f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1f500 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1f510 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1f520 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1f530 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1f540 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1f550 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1f560 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
1f570 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
1f580 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
1f590 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
1f5a0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b  e complete row k
1f5b0 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ey for cursor P1
1f5c0 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
1f5d0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
1f5e0 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
1f5f0 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70  * The key is cop
1f600 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20  ied onto the P3 
1f610 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
1f620 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
1f630 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
1f640 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1f650 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
1f660 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
1f670 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
1f680 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
1f690 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
1f6a0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1f6b0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1f6c0 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73  e OP_RowKey:.cas
1f6d0 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
1f6e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f6f0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1f700 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20  rsr;.  u32 n;.  
1f710 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74  i64 n64;..  pOut
1f720 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1f730 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  >p2];..  /* Note
1f740 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
1f750 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
1f760 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
1f770 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
1f780 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1f790 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f7a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f7b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f7c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f7d0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f7e0 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
1f7f0 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20  ==OP_RowKey );. 
1f800 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
1f810 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
1f820 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
1f830 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
1f840 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f850 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
1f860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f870 70 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29  pseudoTable==0 )
1f880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f890 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1f8a0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1f8b0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73  sor;.  assert( s
1f8c0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f8d0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
1f8e0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f  );..  /* The OP_
1f8f0 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f  RowKey and OP_Ro
1f900 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c  wData opcodes al
1f910 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e  ways follow OP_N
1f920 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a  otExists or.  **
1f930 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65   OP_Rewind/Op_Ne
1f940 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72  xt with no inter
1f950 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69  vening instructi
1f960 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69  ons that might i
1f970 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74  nvalidate.  ** t
1f980 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63  he cursor.  Henc
1f990 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
1f9a0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1f9b0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69  rMoveto() call i
1f9c0 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20  s always.  ** a 
1f9d0 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65  no-op and can ne
1f9e0 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77  ver fail.  But w
1f9f0 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c  e leave it in pl
1fa00 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79 2e  ace as a safety.
1fa10 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
1fa20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1fa30 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
1fa40 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1fa50 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
1fa60 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
1fa70 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
1fa80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fa90 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  r;..  if( pC->is
1faa0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73  Index ){.    ass
1fab0 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c  ert( !pC->isTabl
1fac0 65 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  e );.    rc = sq
1fad0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1fae0 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
1faf0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
1fb00 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
1fb10 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
1fb20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
1fb30 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
1fb40 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
1fb50 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
1fb60 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
1fb70 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
1fb80 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
1fb90 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
1fba0 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
1fbb0 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
1fbc0 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20  e(pCrsr, &n);.  
1fbd0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1fbe0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
1fbf0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
1fc00 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69  ot fail */.    i
1fc10 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c  f( n>(u32)db->aL
1fc20 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
1fc30 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
1fc40 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
1fc50 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1fc60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
1fc70 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20  row(pOut, n, 0) 
1fc80 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
1fc90 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  em;.  }.  pOut->
1fca0 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54  n = n;.  MemSetT
1fcb0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
1fcc0 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70  M_Blob);.  if( p
1fcd0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
1fce0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1fcf0 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
1fd00 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
1fd10 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
1fd20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
1fd30 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
1fd40 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
1fd50 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
1fd60 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
1fd70 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
1fd80 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
1fd90 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
1fda0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
1fdb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1fdc0 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
1fdd0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1fde0 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65  Store in registe
1fdf0 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
1fe00 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65 79  which is the key
1fe10 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
1fe20 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69  try that.** P1 i
1fe30 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1fe40 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63  t to..**.** P1 c
1fe50 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  an be either an 
1fe60 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f  ordinary table o
1fe70 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  r a virtual tabl
1fe80 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20 74  e.  There used t
1fe90 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61  o.** be a separa
1fea0 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63  te OP_VRowid opc
1feb0 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74 68  ode for use with
1fec0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c   virtual tables,
1fed0 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65   but this.** one
1fee0 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b   opcode now work
1fef0 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65  s for both table
1ff00 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20   types..*/.case 
1ff10 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  OP_Rowid: {     
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
1ff30 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1ff40 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1ff50 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73  pC;.  i64 v;.  s
1ff60 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
1ff70 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
1ff80 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
1ff90 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
1ffa0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ffb0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ffc0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ffd0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ffe0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1fff0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
20000 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 44 6f 20  ow ){.    /* Do 
20010 6e 6f 74 68 69 6e 67 20 73 6f 20 74 68 61 74 20  nothing so that 
20020 72 65 67 5b 50 32 5d 20 72 65 6d 61 69 6e 73 20  reg[P2] remains 
20030 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61  NULL */.    brea
20040 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
20050 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20060 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
20070 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 20  >movetoTarget;. 
20080 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
20090 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
200a0 20 20 76 20 3d 20 70 43 2d 3e 69 4b 65 79 3b 0a    v = pC->iKey;.
200b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
200c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
200d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
200e0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a  >pVtabCursor ){.
200f0 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
20100 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
20110 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
20120 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
20130 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
20140 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
20150 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
20160 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
20170 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20180 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63  o_misuse;.    rc
20190 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
201a0 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73  id(pC->pVtabCurs
201b0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  or, &v);.    sql
201c0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
201d0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
201e0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
201f0 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  ab->zErrMsg;.   
20200 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
20210 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  = 0;.    if( sql
20220 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
20230 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
20240 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e  e_to_misuse;.#en
20250 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
20260 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
20270 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
20280 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
20290 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  sor!=0 );.    rc
202a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
202b0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
202c0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
202d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
202e0 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
202f0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
20300 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e  {.      v = pC->
20310 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d  lastRowid;.    }
20320 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
20330 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
20340 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
20350 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73  , &v);.      ass
20360 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
20370 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73  OK );  /* Always
20380 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43   so because of C
20390 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62  ursorMoveto() ab
203a0 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d  ove */.    }.  }
203b0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
203c0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
203d0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
203e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
203f0 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
20400 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
20410 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
20420 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
20430 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
20440 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
20450 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
20460 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
20470 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
20480 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
20490 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
204a0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
204b0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
204c0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
204d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
204e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
204f0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
20500 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20510 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
20520 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
20530 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
20540 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69  IsValid = 0;.  i
20550 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  f( pC->pCursor )
20560 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
20570 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
20580 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
20590 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
205a0 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
205b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
205c0 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
205d0 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
205e0 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
205f0 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
20600 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
20610 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
20620 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
20630 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
20640 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
20650 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
20660 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
20670 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
20680 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
20690 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
206a0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
206b0 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
206c0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
206d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
206e0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
206f0 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
20700 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
20710 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20720 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
20730 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
20740 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20750 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20760 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20770 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20780 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20790 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
207a0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
207b0 3b 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30  ;.  if( pCrsr==0
207c0 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b   ){.    res = 1;
207d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
207e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
207f0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
20800 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
20810 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
20820 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
20830 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72  eto = 0;.  pC->r
20840 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20850 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
20860 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20870 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
20880 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20  0 && res ){.    
20890 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
208a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
208b0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
208c0 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
208d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
208e0 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
208f0 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
20900 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
20910 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
20920 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
20930 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
20940 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
20950 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
20960 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
20970 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
20980 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
20990 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
209a0 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
209b0 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
209c0 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
209d0 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
209e0 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
209f0 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
20a00 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
20a10 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
20a20 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
20a30 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
20a40 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
20a50 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
20a60 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
20a70 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
20a80 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
20a90 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
20aa0 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
20ab0 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
20ac0 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
20ad0 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
20ae0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
20af0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
20b00 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
20b10 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
20b20 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
20b30 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
20b40 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
20b50 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
20b60 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  -1]++;.  /* Fall
20b70 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
20b80 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
20b90 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
20ba0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20bb0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
20bc0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
20bd0 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
20be0 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
20bf0 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
20c00 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
20c10 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
20c20 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
20c30 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
20c40 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
20c50 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
20c60 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
20c70 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
20c80 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
20c90 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
20ca0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
20cb0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
20cc0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
20cd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
20ce0 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
20cf0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
20d00 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
20d10 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
20d20 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
20d30 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
20d40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20d50 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20d60 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20d70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20d80 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20d90 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
20da0 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  pC->pCursor)!=0 
20db0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
20dc0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
20dd0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
20de0 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65  pC->atFirst = re
20df0 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
20e00 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20e10 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
20e20 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20e30 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
20e40 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
20e50 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
20e60 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20   res = 1;.  }.  
20e70 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
20e80 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28  8)res;.  assert(
20e90 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
20ea0 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
20eb0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
20ec0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
20ed0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
20ee0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  }../* Opcode: Ne
20ef0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
20f00 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72  *.** Advance cur
20f10 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
20f20 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
20f30 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61  next key/data pa
20f40 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
20f50 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
20f60 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
20f70 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  re key/value pai
20f80 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
20f90 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
20fa0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
20fb0 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
20fc0 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65  e cursor advance
20fd0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
20fe0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
20ff0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
21000 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
21010 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
21020 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
21030 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
21040 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
21050 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ev.*/./* Opcode:
21060 20 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20   Prev P1 P2 * * 
21070 2a 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20  *.**.** Back up 
21080 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
21090 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
210a0 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  he previous key/
210b0 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
210c0 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
210d0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ex.  If there is
210e0 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79   no previous key
210f0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
21100 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
21110 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
21120 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
21130 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
21140 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75  or backup was su
21150 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
21160 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
21170 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
21180 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
21190 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
211a0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
211b0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
211c0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
211d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
211e0 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20   OP_Next: {     
211f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
21200 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21210 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
21220 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
21230 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
21240 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20  RUPT;.  assert( 
21250 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21260 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21270 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21280 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21290 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20  if( pC==0 ){.   
212a0 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20   break;  /* See 
212b0 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a  ticket #2273 */.
212c0 20 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43    }.  pCrsr = pC
212d0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
212e0 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20   pCrsr==0 ){.   
212f0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
21300 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
21310 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73  .  res = 1;.  as
21320 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
21330 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
21340 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   rc = pOp->opcod
21350 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c  e==OP_Next ? sql
21360 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
21370 72 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20  rsr, &res) :.   
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21390 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
213a0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
213b0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
213c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
213d0 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63  8)res;.  pC->cac
213e0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
213f0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65  _STALE;.  if( re
21400 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  s==0 ){.    pc =
21410 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
21420 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20    if( pOp->p5 ) 
21430 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
21440 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66  >p5-1]++;.#ifdef
21450 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
21460 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
21470 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
21480 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49    }.  pC->rowidI
21490 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72  sValid = 0;.  br
214a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
214b0 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
214c0 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
214d0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
214e0 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b  ds a SQL index k
214f0 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
21500 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
21510 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
21520 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
21530 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
21540 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
21550 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
21560 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
21570 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
21580 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
21590 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
215a0 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
215b0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
215c0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
215d0 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  append..**.** Th
215e0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
215f0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
21600 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
21610 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
21620 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
21630 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
21640 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
21650 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
21660 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
21670 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21680 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
21690 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
216a0 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
216b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
216c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
216d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
216e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
216f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21700 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
21710 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
21720 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70   MEM_Blob );.  p
21730 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
21740 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53  or;.  if( ALWAYS
21750 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20  (pCrsr!=0) ){.  
21760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21770 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
21780 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
21790 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72  pIn2);.    if( r
217a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
217b0 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e        nKey = pIn
217c0 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79  2->n;.      zKey
217d0 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20   = pIn2->z;.    
217e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
217f0 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c  reeInsert(pCrsr,
21800 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
21810 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
21820 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70  .          ((pOp
21830 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
21840 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
21850 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
21860 30 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  0).      );.    
21870 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
21880 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
21890 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
218a0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
218b0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
218c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
218d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
218e0 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
218f0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  **.** The conten
21900 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72  t of P3 register
21910 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65  s starting at re
21920 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a  gister P2 form.*
21930 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  * an unpacked in
21940 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70  dex key. This op
21950 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61  code removes tha
21960 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65  t entry from the
21970 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65   .** index opene
21980 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a  d by cursor P1..
21990 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65  */.case OP_IdxDe
219a0 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
219b0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
219c0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
219d0 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
219e0 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
219f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
21a00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
21a10 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
21a20 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  p2+pOp->p3<=p->n
21a30 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  Mem+1 );.  asser
21a40 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21a50 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21a60 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
21a70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21a80 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21a90 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
21aa0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
21ab0 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
21ac0 29 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49  ) ){.    r.pKeyI
21ad0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
21ae0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
21af0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
21b00 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30  .    r.flags = 0
21b10 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ;.    r.aMem = &
21b20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
21b30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
21b40 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
21b50 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
21b60 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
21b70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
21b80 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
21b90 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
21ba0 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
21bb0 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Crsr);.    }.   
21bc0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21bd0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21be0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
21bf0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21c00 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ALE;.  }.  break
21c10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21c20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
21c30 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
21c40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
21c50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
21c60 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
21c70 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
21c80 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
21c90 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
21ca0 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
21cb0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
21cc0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
21cd0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
21ce0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
21cf0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
21d00 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
21d10 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
21d20 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
21d30 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
21d40 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
21d50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
21d60 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
21d70 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
21d80 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
21d90 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
21da0 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
21db0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21dc0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21dd0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21de0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21df0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21e00 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
21e10 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57  ursor;.  if( ALW
21e20 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b  AYS(pCrsr!=0) ){
21e30 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21e40 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
21e50 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e  o(pC);.    if( N
21e60 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20  EVER(rc) ) goto 
21e70 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21e80 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
21e90 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
21ea0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  to==0 );.    ass
21eb0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21ec0 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  ==0 );.    if( !
21ed0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
21ee0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
21ef0 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
21f00 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
21f10 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
21f20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21f30 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
21f40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
21f50 20 20 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53      }.      MemS
21f60 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
21f70 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20   MEM_Int);.     
21f80 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
21f90 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  id;.    }.  }.  
21fa0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21fb0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
21fc0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
21fd0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
21fe0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
21ff0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
22000 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
22010 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
22020 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
22030 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
22040 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
22050 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
22060 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
22070 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
22080 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
22090 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
220a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
220b0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
220c0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
220d0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
220e0 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
220f0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
22100 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
22110 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
22120 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
22130 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
22140 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
22150 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
22160 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
22170 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20  on .** prior to 
22180 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
22190 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f   This make the o
221a0 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
221b0 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20  IdxGT except.** 
221c0 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20  that if the key 
221d0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
221e0 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
221f0 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63  the key in the c
22200 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65  ursor,.** the re
22210 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68  sult is false wh
22220 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62  ereas it would b
22230 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47  e true with IdxG
22240 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T..*/./* Opcode:
22250 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
22260 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  * P5.**.** The P
22270 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
22280 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
22290 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
222a0 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
222b0 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
222c0 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
222d0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
222e0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
222f0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
22300 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
22310 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
22320 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
22330 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
22340 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
22350 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
22360 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
22370 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
22380 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
22390 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
223a0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
223b0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
223c0 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
223d0 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
223e0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
223f0 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72  by an epsilon pr
22400 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63  ior .** to the c
22410 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
22420 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64   makes the opcod
22430 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c  e work like IdxL
22440 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  E..*/.case OP_Id
22450 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
22460 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
22470 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
22480 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22490 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
224a0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
224b0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
224c0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
224d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
224e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
224f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
22500 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22510 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22520 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
22530 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
22540 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
22550 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
22560 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
22570 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
22580 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
22590 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
225a0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
225b0 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  2 );.    r.pKeyI
225c0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
225d0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
225e0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
225f0 69 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  i;.    if( pOp->
22600 70 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c  p5 ){.      r.fl
22610 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
22620 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45  NCRKEY | UNPACKE
22630 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
22640 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22650 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
22660 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44  KED_IGNORE_ROWID
22670 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d  ;.    }.    r.aM
22680 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
22690 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p3];.    rc =
226a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
226b0 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72  eyCompare(pC, &r
226c0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
226d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
226e0 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20  _IdxLT ){.      
226f0 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20  res = -res;.    
22700 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
22710 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
22720 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20  ==OP_IdxGE );.  
22730 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d      res++;.    }
22740 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29  .    if( res>0 )
22750 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
22760 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d  ->p2 - 1 ;.    }
22770 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
22780 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
22790 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
227a0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
227b0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
227c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
227d0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
227e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
227f0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
22800 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
22810 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
22820 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
22830 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
22840 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
22850 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
22860 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
22870 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
22880 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
22890 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
228a0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
228b0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
228c0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
228d0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
228e0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
228f0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
22900 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
22910 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
22920 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
22930 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
22940 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
22950 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
22960 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
22970 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
22980 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
22990 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
229a0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
229b0 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
229c0 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
229d0 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
229e0 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
229f0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
22a00 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
22a10 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
22a20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20   If no page .** 
22a30 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
22a40 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
22a50 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
22a60 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
22a70 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20  dy .** the last 
22a80 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
22a90 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f  ase) then a zero
22aa0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
22ab0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66  gister P2..** If
22ac0 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
22ad0 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
22ae0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
22af0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
22b00 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
22b10 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
22b20 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
22b30 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
22b40 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
22b50 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20  ;.  int iCnt;.  
22b60 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69  Vdbe *pVdbe;.  i
22b70 6e 74 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20  nt iDb;.#ifndef 
22b80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22b90 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20  UALTABLE.  iCnt 
22ba0 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65  = 0;.  for(pVdbe
22bb0 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62  =db->pVdbe; pVdb
22bc0 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65  e; pVdbe = pVdbe
22bd0 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
22be0 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
22bf0 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
22c00 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
22c10 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
22c20 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ->pc>=0 ){.     
22c30 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
22c40 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
22c50 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  = db->activeVdbe
22c60 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  Cnt;.#endif.  if
22c70 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
22c80 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
22c90 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
22ca0 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
22cb0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
22cc0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
22cd0 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d     assert( iCnt=
22ce0 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
22cf0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
22d00 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
22d10 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
22d20 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
22d30 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
22d40 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
22d50 76 65 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ved);.    MemSet
22d60 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
22d70 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
22d80 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
22d90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22da0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
22db0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
22dc0 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
22dd0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
22de0 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
22df0 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20  (&db->aDb[iDb], 
22e00 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
22e10 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
22e20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
22e30 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
22e40 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
22e50 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
22e60 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
22e70 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
22e80 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
22e90 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
22ea0 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
22eb0 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
22ec0 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
22ed0 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
22ee0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
22ef0 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
22f00 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
22f10 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
22f20 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
22f30 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
22f40 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
22f50 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
22f60 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
22f70 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
22f80 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
22f90 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
22fa0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
22fb0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
22fc0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
22fd0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
22fe0 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
22ff0 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
23000 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
23010 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
23020 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
23030 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
23040 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
23050 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
23060 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
23070 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
23080 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
23090 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
230a0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
230b0 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
230c0 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
230d0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
230e0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
230f0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
23100 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
23110 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
23120 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
23130 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
23140 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
23150 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
23160 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
23170 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
23180 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
23190 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
231a0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
231b0 28 31 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30  (1<<pOp->p2))!=0
231c0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
231d0 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
231e0 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  e(.      db->aDb
231f0 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70  [pOp->p2].pBt, p
23200 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33  Op->p1, (pOp->p3
23210 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29   ? &nChange : 0)
23220 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  .  );.  if( pOp-
23230 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  >p3 ){.    p->nC
23240 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65  hange += nChange
23250 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
23260 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  3>0 ){.      p->
23270 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
23280 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
23290 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
232a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
232b0 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
232c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
232d0 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
232e0 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
232f0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
23300 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
23310 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
23320 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
23330 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
23340 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
23350 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
23360 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
23370 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
23380 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
23390 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
233a0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
233b0 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
233c0 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
233d0 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
233e0 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
233f0 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
23400 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
23410 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
23420 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
23430 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
23440 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
23450 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
23460 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
23470 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
23480 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
23490 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
234a0 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65  new index in the
234b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
234c0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
234d0 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
234e0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
234f0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
23500 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
23510 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
23520 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
23530 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
23540 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
23550 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
23560 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f  P2..**.** See do
23570 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f  cumentation on O
23580 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f  P_CreateTable fo
23590 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
235a0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
235b0 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78  e OP_CreateIndex
235c0 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :            /* 
235d0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
235e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
235f0 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
23600 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
23610 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
23620 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
23630 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
23640 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
23650 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23660 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
23670 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
23680 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
23690 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
236a0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
236b0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
236c0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
236d0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
236e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
236f0 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
23700 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
23710 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
23720 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45  flags = BTREE_LE
23730 41 46 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54  AFDATA|BTREE_INT
23740 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  KEY;.  }else{.  
23750 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
23760 5a 45 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20  ZERODATA;.  }.  
23770 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23780 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
23790 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
237a0 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
237b0 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53  i = pgno;.  MemS
237c0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
237d0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
237e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
237f0 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
23800 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
23810 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
23820 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
23830 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
23840 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
23850 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
23860 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
23870 63 6c 61 75 73 65 20 50 34 2e 20 20 50 32 20 69  clause P4.  P2 i
23880 73 20 74 68 65 20 22 66 6f 72 63 65 22 20 66 6c  s the "force" fl
23890 61 67 2e 20 20 20 41 6c 77 61 79 73 20 64 6f 0a  ag.   Always do.
238a0 2a 2a 20 74 68 65 20 70 61 72 73 69 6e 67 20 69  ** the parsing i
238b0 66 20 50 32 20 69 73 20 74 72 75 65 2e 20 20 49  f P2 is true.  I
238c0 66 20 50 32 20 69 73 20 66 61 6c 73 65 2c 20 74  f P2 is false, t
238d0 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
238e0 20 69 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69   is a.** no-op i
238f0 66 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20  f the schema is 
23900 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f  not currently lo
23910 61 64 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20  aded.  In other 
23920 77 6f 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20  words, if P2.** 
23930 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 53 51  is false, the SQ
23940 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
23950 65 20 69 73 20 6f 6e 6c 79 20 70 61 72 73 65 64  e is only parsed
23960 20 69 66 20 74 68 65 20 72 65 73 74 20 6f 66 20   if the rest of 
23970 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
23980 20 61 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20   already loaded 
23990 69 6e 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20  into the symbol 
239a0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  table..**.** Thi
239b0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
239c0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
239d0 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
239e0 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
239f0 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
23a00 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
23a10 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
23a20 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
23a30 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
23a40 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
23a50 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
23a60 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
23a70 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
23a80 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
23a90 61 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  a;..  iDb = pOp-
23aa0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
23ab0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
23ac0 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  >nDb );..  /* If
23ad0 20 70 4f 70 2d 3e 70 32 20 69 73 20 30 2c 20 74   pOp->p2 is 0, t
23ae0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
23af0 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
23b00 64 20 74 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a  d to read a.  **
23b10 20 73 69 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72   single row, for
23b20 20 65 78 61 6d 70 6c 65 20 74 68 65 20 72 6f 77   example the row
23b30 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
23b40 6f 20 61 20 6e 65 77 20 69 6e 64 65 78 0a 20 20  o a new index.  
23b50 2a 2a 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ** created by th
23b60 69 73 20 56 44 42 45 2c 20 66 72 6f 6d 20 74 68  is VDBE, from th
23b70 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
23b80 74 61 62 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20  table. It only. 
23b90 20 2a 2a 20 64 6f 65 73 20 74 68 69 73 20 69 66   ** does this if
23ba0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
23bb0 6e 67 20 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68  ng in-memory sch
23bc0 65 6d 61 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ema is currently
23bd0 0a 20 20 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74  .  ** loaded. Ot
23be0 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 77  herwise, the new
23bf0 20 69 6e 64 65 78 20 64 65 66 69 6e 69 74 69 6f   index definitio
23c00 6e 20 63 61 6e 20 62 65 20 6c 6f 61 64 65 64 20  n can be loaded 
23c10 61 6c 6f 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20  along.  ** with 
23c20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
23c30 73 63 68 65 6d 61 20 77 68 65 6e 20 69 74 20 69  schema when it i
23c40 73 20 72 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a  s required..  **
23c50 0a 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74  .  ** Although t
23c60 68 65 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20  he mutex on the 
23c70 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 20  BtShared object 
23c80 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
23c90 20 74 6f 0a 20 20 2a 2a 20 64 61 74 61 62 61 73   to.  ** databas
23ca0 65 20 69 44 62 20 28 74 68 65 20 64 61 74 61 62  e iDb (the datab
23cb0 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ase containing t
23cc0 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
23cd0 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64   table.  ** read
23ce0 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
23cf0 74 69 6f 6e 29 20 69 73 20 63 75 72 72 65 6e 74  tion) is current
23d00 6c 79 20 68 65 6c 64 2c 20 69 74 20 69 73 20 6e  ly held, it is n
23d10 65 63 65 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a  ecessary to.  **
23d20 20 6f 62 74 61 69 6e 20 74 68 65 20 6d 75 74 65   obtain the mute
23d30 78 65 73 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63  xes on all attac
23d40 68 65 64 20 64 61 74 61 62 61 73 65 73 20 62 65  hed databases be
23d50 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 69 66  fore checking if
23d60 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61  .  ** the schema
23d70 20 6f 66 20 69 44 62 20 69 73 20 6c 6f 61 64 65   of iDb is loade
23d80 64 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  d. This is becau
23d90 73 65 2c 20 61 74 20 74 68 65 20 73 74 61 72 74  se, at the start
23da0 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c   of.  ** the sql
23db0 69 74 65 33 5f 65 78 65 63 28 29 20 63 61 6c 6c  ite3_exec() call
23dc0 20 62 65 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77   below, SQLite w
23dd0 69 6c 6c 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a  ill invoke .  **
23de0 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74   sqlite3BtreeEnt
23df0 65 72 41 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20  erAll(). If all 
23e00 6d 75 74 65 78 65 73 20 61 72 65 20 6e 6f 74 20  mutexes are not 
23e10 61 6c 72 65 61 64 79 20 68 65 6c 64 2c 20 74 68  already held, th
23e20 65 0a 20 20 2a 2a 20 69 44 62 20 6d 75 74 65 78  e.  ** iDb mutex
23e30 20 6d 61 79 20 62 65 20 74 65 6d 70 6f 72 61 72   may be temporar
23e40 69 6c 79 20 72 65 6c 65 61 73 65 64 20 74 6f 20  ily released to 
23e50 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20  avoid deadlock. 
23e60 49 66 20 0a 20 20 2a 2a 20 74 68 69 73 20 68 61  If .  ** this ha
23e70 70 70 65 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65  ppens, then some
23e80 20 6f 74 68 65 72 20 74 68 72 65 61 64 20 6d 61   other thread ma
23e90 79 20 64 65 6c 65 74 65 20 74 68 65 20 69 6e 2d  y delete the in-
23ea0 6d 65 6d 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68  memory .  ** sch
23eb0 65 6d 61 20 6f 66 20 64 61 74 61 62 61 73 65 20  ema of database 
23ec0 69 44 62 20 62 65 66 6f 72 65 20 74 68 65 20 53  iDb before the S
23ed0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  QL statement run
23ee0 73 2e 20 54 68 65 20 73 63 68 65 6d 61 0a 20 20  s. The schema.  
23ef0 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72  ** will not be r
23f00 65 6c 6f 61 64 65 64 20 62 65 63 75 61 73 65 20  eloaded becuase 
23f10 74 68 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  the db->init.bus
23f20 79 20 66 6c 61 67 20 69 73 20 73 65 74 2e 20 54  y flag is set. T
23f30 68 69 73 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73  his.  ** can res
23f40 75 6c 74 20 69 6e 20 61 20 22 6e 6f 20 73 75 63  ult in a "no suc
23f50 68 20 74 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f  h table: sqlite_
23f60 6d 61 73 74 65 72 22 20 6f 72 20 22 6d 61 6c 66  master" or "malf
23f70 6f 72 6d 65 64 0a 20 20 2a 2a 20 64 61 74 61 62  ormed.  ** datab
23f80 61 73 65 20 73 63 68 65 6d 61 22 20 65 72 72 6f  ase schema" erro
23f90 72 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  r being returned
23fa0 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 20 20   to the user..  
23fb0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  */.  assert( sql
23fc0 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
23fd0 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
23fe0 2e 70 42 74 29 20 29 3b 0a 20 20 73 71 6c 69 74  .pBt) );.  sqlit
23ff0 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28  e3BtreeEnterAll(
24000 64 62 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  db);.  if( pOp->
24010 70 32 20 7c 7c 20 44 62 48 61 73 50 72 6f 70 65  p2 || DbHasPrope
24020 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
24030 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b  SchemaLoaded) ){
24040 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
24050 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
24060 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
24070 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
24080 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
24090 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
240a0 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
240b0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
240c0 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
240d0 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
240e0 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
240f0 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
24100 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 22  %q'.%s WHERE %s"
24110 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
24120 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
24130 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
24140 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
24150 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
24160 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
24170 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 28    }else{.      (
24180 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65  void)sqlite3Safe
24190 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 20  tyOff(db);.     
241a0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
241b0 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
241c0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
241d0 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
241e0 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
241f0 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
24200 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
24210 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
24220 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
24230 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
24240 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
24250 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
24260 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
24270 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
24280 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
24290 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
242a0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
242b0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
242c0 3b 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73 71  ;.      (void)sq
242d0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
242e0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
242f0 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
24300 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28 20 72  All(db);.  if( r
24310 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
24320 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
24330 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
24340 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
24350 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
24360 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
24370 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
24380 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
24390 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
243a0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
243b0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
243c0 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
243d0 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
243e0 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
243f0 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
24400 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
24410 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
24420 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
24430 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
24440 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
24450 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
24460 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
24470 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
24480 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24490 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
244a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
244b0 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
244c0 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b  Op->p1);.  break
244d0 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
244e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
244f0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
24500 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
24510 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
24520 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
24530 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
24540 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
24550 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
24560 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
24570 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
24580 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
24590 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
245a0 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
245b0 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
245c0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
245d0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
245e0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
245f0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
24600 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
24610 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
24620 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
24630 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
24640 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
24650 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
24660 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
24670 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
24680 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
24690 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
246a0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
246b0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
246c0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
246d0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
246e0 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
246f0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
24700 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
24710 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
24720 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
24730 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
24740 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
24750 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
24760 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
24770 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
24780 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
24790 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
247a0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
247b0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
247c0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
247d0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
247e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
247f0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
24800 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
24810 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
24820 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
24830 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
24840 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
24850 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
24860 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
24870 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
24880 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
24890 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
248a0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
248b0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
248c0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
248d0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
248e0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
248f0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
24900 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
24910 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
24920 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
24930 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
24940 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
24950 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
24960 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24970 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
24980 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
24990 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
249a0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
249b0 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
249c0 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
249d0 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
249e0 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
249f0 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
24a00 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
24a10 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
24a20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
24a30 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
24a40 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
24a50 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
24a60 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
24a70 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
24a80 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
24a90 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
24aa0 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
24ab0 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
24ac0 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
24ad0 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
24ae0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
24af0 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
24b00 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
24b10 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
24b20 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
24b30 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
24b40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
24b50 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
24b60 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
24b70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
24b80 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
24b90 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
24ba0 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
24bb0 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
24bc0 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
24bd0 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
24be0 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
24bf0 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
24c00 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
24c10 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
24c20 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
24c30 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
24c40 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
24c50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
24c60 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
24c70 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
24c80 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
24c90 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
24ca0 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
24cb0 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
24cc0 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
24cd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
24ce0 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
24cf0 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
24d00 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
24d10 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
24d20 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
24d30 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
24d40 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
24d50 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
24d60 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
24d70 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
24d80 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
24d90 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
24da0 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
24db0 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
24dc0 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
24dd0 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
24de0 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
24df0 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
24e00 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
24e10 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20  s remaining */. 
24e20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d   .  nRoot = pOp-
24e30 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
24e40 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
24e50 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
24e60 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
24e70 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
24e80 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
24e90 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
24ea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24eb0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
24ec0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
24ed0 6e 45 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  nErr = &p->aMem[
24ee0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
24ef0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
24f00 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
24f10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  );.  assert( (pn
24f20 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Err->flags & (ME
24f30 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
24f40 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
24f50 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
24f60 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  ];.  for(j=0; j<
24f70 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20  nRoot; j++){.   
24f80 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74   aRoot[j] = (int
24f90 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  )sqlite3VdbeIntV
24fa0 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a  alue(&pIn1[j]);.
24fb0 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d    }.  aRoot[j] =
24fc0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
24fd0 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p5<db->nDb );
24fe0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
24ff0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
25000 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
25010 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
25020 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
25030 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
25040 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
25050 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
25080 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
25090 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
250a0 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
250b0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
250c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
250d0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
250e0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
250f0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
25100 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
25110 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
25120 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
25130 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
25140 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
25150 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
25160 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
25170 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
25180 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
25190 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
251a0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
251b0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
251c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
251d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
251e0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
251f0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
25200 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
25210 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
25220 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
25230 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
25240 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
25250 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
25260 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
25270 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
25280 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
25290 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
252a0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
252b0 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
252c0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  {       /* in2 *
252d0 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20  /.  Mem *pIdx;. 
252e0 20 4d 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73   Mem *pVal;.  as
252f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
25300 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
25310 4d 65 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20  Mem );.  pIdx = 
25320 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
25330 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
25340 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
25350 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
25360 70 56 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pVal = &p->aMem[
25370 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
25380 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73  rt( (pVal->flags
25390 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
253a0 3b 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66  ;.  if( (pIdx->f
253b0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
253c0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
253d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
253e0 77 53 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20  wSet(pIdx);.    
253f0 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73  if( (pIdx->flags
25400 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
25410 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
25420 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
25430 77 53 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d  wSetInsert(pIdx-
25440 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c  >u.pRowSet, pVal
25450 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
25460 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
25470 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
25480 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74  P3 * *.**.** Ext
25490 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
254a0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
254b0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
254c0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
254d0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
254e0 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
254f0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
25500 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
25510 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
25520 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
25530 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
25540 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
25550 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
25560 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74      /* jump, out
25570 33 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78  3 */.  Mem *pIdx
25580 3b 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61  ;.  i64 val;.  a
25590 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
255a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
255b0 6e 4d 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f  nMem );.  CHECK_
255c0 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
255d0 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIdx = &p->aMem
255e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
255f0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
25600 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
25610 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  dx->flags & MEM_
25620 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
25630 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
25640 65 78 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77  ext(pIdx->u.pRow
25650 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
25660 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
25670 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
25680 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
25690 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
256a0 6c 28 70 49 64 78 29 3b 0a 20 20 20 20 70 63 20  l(pIdx);.    pc 
256b0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
256c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
256d0 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
256e0 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
256f0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
25700 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
25710 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
25720 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25730 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
25740 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72  , val);.  }.  br
25750 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25760 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31  e: RowSetTest P1
25770 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20   P2 P3 P4.**.** 
25780 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  Register P3 is a
25790 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61  ssumed to hold a
257a0 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
257b0 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74  value. If regist
257c0 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e  er P1.** contain
257d0 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  s a RowSet objec
257e0 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65  t and that RowSe
257f0 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e  t object contain
25800 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68  s.** the value h
25810 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20  eld in P3, jump 
25820 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
25830 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72  Otherwise, inser
25840 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  t the.** integer
25850 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20   in P3 into the 
25860 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69  RowSet and conti
25870 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a  nue on to the.**
25880 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a   next opcode..**
25890 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f  .** The RowSet o
258a0 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a  bject is optimiz
258b0 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
258c0 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65  where successive
258d0 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65   sets.** of inte
258e0 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68  gers, where each
258f0 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f   set contains no
25900 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63   duplicates. Eac
25910 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75  h set.** of valu
25920 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  es is identified
25930 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20   by a unique P4 
25940 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74  value. The first
25950 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76   set.** must hav
25960 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e  e P4==0, the fin
25970 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50  al set P4=-1.  P
25980 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72  4 must be either
25990 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65   -1 or.** non-ne
259a0 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e  gative.  For non
259b0 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73  -negative values
259c0 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20   of P4 only the 
259d0 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20  lower 4.** bits 
259e0 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e  are significant.
259f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  .**.** This allo
25a00 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ws optimizations
25a10 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30  : (a) when P4==0
25a20 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
25a30 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65  d to test.** the
25a40 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66   rowset object f
25a50 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20  or P3, as it is 
25a60 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74  guaranteed not t
25a70 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a  o contain it,.**
25a80 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31   (b) when P4==-1
25a90 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
25aa0 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
25ab0 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c  value, as it wil
25ac0 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65  l.** never be te
25ad0 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63  sted for, and (c
25ae0 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74  ) when a value t
25af0 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73  hat is part of s
25b00 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72  et X is.** inser
25b10 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ted, there is no
25b20 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20   need to search 
25b30 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61  to see if the sa
25b40 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20  me value was.** 
25b50 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72  previously inser
25b60 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
25b70 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74  et X (only if it
25b80 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a   was previously.
25b90 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ** inserted as p
25ba0 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65  art of some othe
25bb0 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20  r set)..*/.case 
25bc0 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b  OP_RowSetTest: {
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
25bf0 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
25c00 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73  iSet;.  int exis
25c10 74 73 3b 0a 0a 20 20 69 53 65 74 20 3d 20 70 4f  ts;..  iSet = pO
25c20 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
25c30 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
25c40 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
25c50 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
25c60 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
25c70 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
25c80 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
25c90 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
25ca0 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
25cb0 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
25cc0 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
25cd0 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
25ce0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
25cf0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
25d00 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
25d10 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
25d20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
25d30 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
25d40 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
25d50 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
25d60 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
25d70 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
25d80 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
25d90 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
25da0 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
25db0 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
25dc0 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
25dd0 52 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20  RowSet, .       
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65          (u8)(iSe
25e00 74 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78  t>=0 ? iSet & 0x
25e10 66 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20  f : 0xff),.     
25e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e30 20 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e            pIn3->
25e40 75 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78  u.i);.    if( ex
25e50 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63  ists ){.      pc
25e60 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
25e70 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
25e80 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65   }.  }.  if( iSe
25e90 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
25ea0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
25eb0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
25ec0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
25ed0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
25ee0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25ef0 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
25f00 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
25f10 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
25f20 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
25f30 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
25f40 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
25f50 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
25f60 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
25f70 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
25f80 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
25f90 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
25fa0 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
25fb0 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
25fc0 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
25fd0 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
25fe0 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
25ff0 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
26000 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
26010 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
26020 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
26030 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
26040 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
26050 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
26060 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
26070 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
26080 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
26090 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
260a0 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
260b0 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
260c0 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
260d0 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
260e0 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
260f0 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
26100 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
26110 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
26120 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
26130 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
26140 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ogram..*/.case O
26150 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
26160 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
26170 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
26180 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
26190 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
261a0 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
261b0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
261c0 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
261d0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
261e0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
261f0 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
26200 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
26210 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
26220 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
26230 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
26240 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
26250 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
26260 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
26270 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
26280 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
26290 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
262a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
262b0 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
262c0 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
262d0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
262e0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
262f0 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
26300 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
26310 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
26320 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
26330 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
26340 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26360 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
26370 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
26380 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
26390 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
263a0 70 52 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  pRt = &p->aMem[p
263b0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
263c0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
263d0 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
263e0 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 6f 52 65   the SQLITE_NoRe
263f0 63 54 72 69 67 67 65 72 73 20 66 6c 61 67 20 69  cTriggers flag i
26400 74 20 73 65 74 2c 20 74 68 65 6e 20 72 65 63 75  t set, then recu
26410 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
26420 20 6f 66 0a 20 20 2a 2a 20 74 72 69 67 67 65 72   of.  ** trigger
26430 73 20 69 73 20 64 69 73 61 62 6c 65 64 20 66 6f  s is disabled fo
26440 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
26450 61 74 69 62 69 6c 69 74 79 20 28 66 6c 61 67 20  atibility (flag 
26460 73 65 74 2f 63 6c 65 61 72 65 64 20 62 79 0a 20  set/cleared by. 
26470 20 2a 2a 20 74 68 65 20 22 50 52 41 47 4d 41 20   ** the "PRAGMA 
26480 64 69 73 61 62 6c 65 5f 72 65 63 75 72 73 69 76  disable_recursiv
26490 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
264a0 61 6e 64 29 2e 20 0a 20 20 2a 2a 20 0a 20 20 2a  and). .  ** .  *
264b0 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
264c0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
264d0 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
264e0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
264f0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
26500 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
26510 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
26520 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
26530 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
26540 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
26550 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
26560 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
26570 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
26580 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
26590 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
265a0 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
265b0 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
265c0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
265d0 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
265e0 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
265f0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
26600 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
26610 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
26620 69 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  iable..  */.  if
26630 28 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  ( 0==(db->flags&
26640 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
26650 72 73 29 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  rs) ){.    t = p
26660 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
26670 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
26680 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
26690 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
266a0 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
266b0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
266c0 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
266d0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
266e0 20 54 4f 44 4f 3a 20 54 68 69 73 20 63 6f 6e 73   TODO: This cons
266f0 74 61 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 63  tant should be c
26700 6f 6e 66 69 67 75 72 61 62 6c 65 2e 20 2a 2f 0a  onfigurable. */.
26710 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
26720 31 30 30 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  1000 ){.    rc =
26730 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
26740 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
26750 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
26760 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c   db, "too many l
26770 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72  evels of trigger
26780 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20   recursion");.  
26790 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
267a0 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
267b0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
267c0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
267d0 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
267e0 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
267f0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
26800 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
26810 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
26820 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
26830 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
26840 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
26850 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
26860 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
26870 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
26880 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
26890 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
268a0 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
268b0 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
268c0 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
268d0 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
268e0 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
268f0 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
26900 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
26910 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
26920 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
26930 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
26940 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
26950 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
26960 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
26970 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
26980 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
26990 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
269a0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
269b0 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
269c0 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
269d0 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
269e0 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
269f0 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
26a00 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
26a10 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
26a20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
26a30 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e      nByte = ROUN
26a40 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72  D8(sizeof(VdbeFr
26a50 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20  ame)).          
26a60 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a      + nMem * siz
26a70 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20  eof(Mem).       
26a80 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
26a90 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66  m->nCsr * sizeof
26aa0 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a  (VdbeCursor *);.
26ab0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
26ac0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
26ad0 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
26ae0 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
26af0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
26b00 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
26b10 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
26b20 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
26b30 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
26b40 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
26b50 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
26b60 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
26b70 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
26b80 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
26b90 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
26ba0 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
26bb0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
26bc0 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
26bd0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
26be0 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
26bf0 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
26c00 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
26c10 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
26c20 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
26c30 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
26c40 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
26c50 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
26c60 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
26c70 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
26c80 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
26c90 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
26ca0 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
26cb0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
26cc0 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
26cd0 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
26ce0 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
26cf0 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
26d00 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
26d10 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
26d20 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
26d30 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
26d40 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
26d50 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
26d60 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
26d70 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
26d80 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
26d90 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
26da0 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
26db0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
26dc0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
26dd0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
26de0 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46    assert( pc==pF
26df0 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
26e00 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
26e10 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
26e20 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
26e30 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
26e40 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
26e50 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
26e60 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
26e70 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
26e80 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
26e90 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
26ea0 3e 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61  >aMem = &VdbeFra
26eb0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31  meMem(pFrame)[-1
26ec0 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  ];.  p->nMem = p
26ed0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
26ee0 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
26ef0 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
26f00 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
26f10 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
26f20 72 20 2a 2a 29 26 70 2d 3e 61 4d 65 6d 5b 70 2d  r **)&p->aMem[p-
26f30 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
26f40 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
26f50 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
26f60 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
26f70 70 63 20 3d 20 2d 31 3b 0a 0a 20 20 62 72 65 61  pc = -1;..  brea
26f80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26f90 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
26fa0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
26fb0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
26fc0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
26fd0 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
26fe0 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
26ff0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
27000 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
27010 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
27020 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
27030 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
27040 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
27050 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
27060 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
27070 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
27080 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
27090 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
270a0 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
270b0 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
270c0 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
270d0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
270e0 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
270f0 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
27100 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
27110 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
27120 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
27130 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
27140 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
27150 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
27160 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
27170 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
27180 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
27190 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
271a0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
271b0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
271c0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
271d0 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
271e0 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
271f0 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
27200 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
27210 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
27220 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
27230 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
27240 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
27250 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
27260 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
27270 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
27280 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27290 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
272a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
272b0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
272c0 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
272d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
272e0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
272f0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
27300 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
27310 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
27320 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
27330 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
27340 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
27350 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
27360 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
27370 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
27380 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
27390 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
273a0 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
273b0 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
273c0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
273d0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
273e0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
273f0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
27400 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
27410 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
27420 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
27430 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
27440 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
27450 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
27460 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
27470 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72   *pIn1;.  VdbeFr
27480 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
27490 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
274a0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
274b0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
274c0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
274d0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
274e0 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
274f0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
27500 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
27510 20 20 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61      pIn1 = &p->a
27520 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
27530 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
27540 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
27550 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
27560 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
27570 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
27580 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
27590 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
275a0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
275b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
275c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
275d0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
275e0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
275f0 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
27600 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
27610 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
27620 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
27630 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
27640 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
27650 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
27660 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
27670 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
27680 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
27690 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
276a0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
276b0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
276c0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
276d0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
276e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
276f0 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
27700 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
27710 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
27720 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
27730 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
27740 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
27750 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
27760 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
27770 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
27780 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
27790 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
277a0 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
277b0 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
277c0 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
277d0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
277e0 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
277f0 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
27800 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
27810 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
27820 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
27830 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
27840 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
27850 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
27860 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
27870 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
27880 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
27890 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
278a0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
278b0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
278c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
278d0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
278e0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
278f0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
27900 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79 20  r P1 is exactly 
27910 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
27920 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
27930 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
27940 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
27950 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
27960 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
27970 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
27980 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
27990 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
279a0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
279b0 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
279c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
279d0 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
279e0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
279f0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
27a00 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
27a10 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
27a20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
27a30 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27a40 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
27a50 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
27a60 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
27a70 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
27a80 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
27a90 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
27aa0 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
27ab0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
27ac0 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
27ad0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
27ae0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
27af0 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
27b00 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
27b10 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
27b20 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
27b30 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
27b40 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
27b50 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
27b60 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
27b70 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
27b80 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
27b90 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
27ba0 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
27bb0 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
27bc0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
27bd0 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
27be0 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
27bf0 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
27c00 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  c = &p->aMem[pOp
27c10 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d  ->p2];.  apVal =
27c20 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
27c30 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
27c40 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  =0 );.  for(i=0;
27c50 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b   i<n; i++, pRec+
27c60 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d  +){.    apVal[i]
27c70 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 74 6f   = pRec;.    sto
27c80 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65 63 2c  reTypeInfo(pRec,
27c90 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a   encoding);.  }.
27ca0 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
27cb0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
27cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
27cd0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
27ce0 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d  nMem );.  ctx.pM
27cf0 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d 3e  em = pMem = &p->
27d00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
27d10 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
27d20 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
27d30 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
27d40 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
27d50 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
27d60 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
27d70 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
27d80 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
27d90 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
27da0 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
27db0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
27dc0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
27dd0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
27de0 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20  p>p->aOp );.    
27df0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
27e00 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
27e10 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
27e20 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
27e30 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
27e40 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
27e50 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
27e60 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75  ;.  }.  (ctx.pFu
27e70 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c  nc->xStep)(&ctx,
27e80 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66   n, apVal);.  if
27e90 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
27ea0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
27eb0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27ec0 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
27ed0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
27ee0 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
27ef0 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
27f00 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
27f10 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
27f20 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .s);.  break;.}.
27f30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
27f40 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
27f50 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
27f60 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
27f70 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
27f80 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
27f90 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
27fa0 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
27fb0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
27fc0 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
27fd0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
27fe0 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
27ff0 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
28000 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
28010 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
28020 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
28030 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
28040 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
28050 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
28060 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
28070 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
28080 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
28090 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
280a0 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
280b0 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
280c0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
280d0 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
280e0 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
280f0 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
28100 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
28110 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
28120 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
28130 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
28140 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
28150 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
28160 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
28170 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
28180 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
28190 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
281a0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
281b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
281c0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
281d0 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
281e0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
281f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
28200 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
28210 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
28220 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
28230 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
28240 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
28250 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
28260 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
28270 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
28280 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
28290 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
282a0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
282b0 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
282c0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
282d0 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
282e0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
282f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28300 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ...#if !defined(
28310 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
28320 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
28330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
28340 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
28350 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
28360 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
28370 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
28380 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
28390 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
283a0 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
283b0 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
283c0 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
283d0 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
283e0 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
283f0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
28400 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
28410 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  : {.  if( sqlite
28420 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
28430 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28440 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63  to_misuse; .  rc
28450 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
28460 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
28470 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69   db);.  if( sqli
28480 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
28490 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
284a0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72  _to_misuse;.  br
284b0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
284c0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
284d0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
284e0 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
284f0 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
28500 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
28510 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
28520 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
28530 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
28540 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
28550 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
28560 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
28570 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
28580 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
28590 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
285a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
285b0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
285c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
285d0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
285e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
285f0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
28600 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
28610 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
28620 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
28630 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
28640 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
28650 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
28660 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
28670 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
28680 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
28690 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
286a0 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
286b0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
286c0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
286d0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
286e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
286f0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
28700 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
28710 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
28720 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
28730 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
28740 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
28750 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
28760 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
28770 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
28780 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
28790 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
287a0 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
287b0 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
287c0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
287d0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
287e0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
287f0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
28800 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
28810 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
28820 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
28830 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
28840 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
28850 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
28860 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
28870 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
28880 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
28890 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
288a0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
288b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
288c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
288d0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
288e0 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
288f0 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
28900 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
28910 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
28920 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
28930 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
28940 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
28950 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
28960 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
28970 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
28980 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
28990 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
289a0 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
289b0 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
289c0 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
289d0 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
289e0 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
289f0 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
28a00 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
28a10 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
28a20 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
28a30 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
28a40 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
28a50 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
28a60 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
28a70 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
28a80 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
28a90 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
28aa0 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
28ab0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
28ac0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
28ad0 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
28ae0 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
28af0 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
28b00 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
28b10 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
28b20 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
28b30 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
28b40 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
28b50 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
28b60 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
28b70 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
28b80 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
28b90 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
28ba0 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
28bb0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
28bc0 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  1))!=0 );.    as
28bd0 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
28be0 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
28bf0 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
28c00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
28c10 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
28c20 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
28c30 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
28c40 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46  .    if( (rc&0xF
28c50 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
28c60 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  D ){.      const
28c70 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
28c80 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  p4.z;.      sqli
28c90 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
28ca0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64  >zErrMsg, db, "d
28cb0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
28cc0 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
28cd0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
28ce0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
28cf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
28d00 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
28d10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28d20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
28d30 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
28d40 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
28d50 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
28d60 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
28d70 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
28d80 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
28d90 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
28da0 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
28db0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
28dc0 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
28dd0 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
28de0 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
28df0 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
28e00 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
28e10 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
28e20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
28e30 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
28e40 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
28e50 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
28e60 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
28e70 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
28e80 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
28e90 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
28ea0 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
28eb0 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
28ec0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
28ed0 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
28ee0 70 56 54 61 62 20 29 7b 0a 20 20 20 20 73 71 6c  pVTab ){.    sql
28ef0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
28f00 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
28f10 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 54  p->zErrMsg = pVT
28f20 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ab->pVtab->zErrM
28f30 73 67 3b 0a 20 20 20 20 70 56 54 61 62 2d 3e 70  sg;.    pVTab->p
28f40 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
28f50 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
28f60 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28f70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28f80 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
28f90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
28fa0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
28fb0 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
28fc0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
28fd0 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
28fe0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
28ff0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
29000 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
29010 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
29020 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
29030 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
29040 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
29050 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
29060 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
29070 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
29080 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
29090 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
290a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
290b0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
290c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
290d0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
290e0 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
290f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
29100 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
29110 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
29120 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
29130 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
29140 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
29150 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
29160 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
29170 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
29180 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
29190 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
291a0 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
291b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
291c0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
291d0 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
291e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
291f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29200 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
29210 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
29220 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
29230 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
29240 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
29250 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
29260 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
29270 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
29280 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
29290 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
292a0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
292b0 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
292c0 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
292d0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
292e0 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
292f0 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
29300 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
29310 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
29320 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
29330 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
29340 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
29350 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
29360 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
29370 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
29380 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
29390 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
293a0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
293b0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
293c0 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
293d0 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
293e0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
293f0 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
29400 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71  odule);.  if( sq
29410 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
29420 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
29430 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
29440 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
29450 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
29460 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
29470 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
29480 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
29490 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
294a0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
294b0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
294c0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
294d0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
294e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
294f0 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c  isuse;.  if( SQL
29500 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
29510 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
29520 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
29530 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
29540 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
29550 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
29560 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
29570 6c 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72  lise vdbe cursor
29580 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
29590 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
295a0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
295b0 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
295c0 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
295d0 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
295e0 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
295f0 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  r;.      pCur->p
29600 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75  Module = pVtabCu
29610 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f  rsor->pVtab->pMo
29620 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  dule;.    }else{
29630 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
29640 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
29650 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
29660 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
29670 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
29680 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
29690 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
296a0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
296b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
296c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
296d0 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
296e0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
296f0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
29700 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
29710 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
29720 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
29730 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
29740 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
29750 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
29760 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
29770 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
29780 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
29790 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
297a0 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
297b0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
297c0 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
297d0 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
297e0 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
297f0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
29800 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
29810 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
29820 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
29830 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
29840 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
29850 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
29860 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
29870 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
29880 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
29890 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
298a0 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
298b0 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
298c0 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
298d0 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
298e0 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
298f0 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
29900 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
29910 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
29920 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
29930 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
29940 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
29950 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
29960 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
29970 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
29980 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
29990 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
299a0 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
299b0 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
299c0 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
299d0 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
299e0 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
299f0 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
29a00 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
29a10 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
29a20 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
29a30 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
29a40 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
29a50 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
29a60 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
29a70 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
29a80 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
29a90 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
29aa0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
29ab0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
29ac0 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
29ad0 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
29ae0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
29af0 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
29b00 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
29b10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
29b20 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
29b30 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
29b40 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
29b50 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
29b60 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
29b70 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
29b80 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
29b90 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
29ba0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
29bb0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
29bc0 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
29bd0 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
29be0 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
29bf0 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
29c00 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
29c10 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
29c20 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
29c30 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
29c40 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
29c50 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
29c60 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
29c70 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
29c80 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
29c90 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
29ca0 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
29cb0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
29cc0 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
29cd0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
29ce0 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
29cf0 31 5d 3b 0a 20 20 20 20 20 20 73 74 6f 72 65 54  1];.      storeT
29d00 79 70 65 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d  ypeInfo(apArg[i]
29d10 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
29d20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
29d30 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
29d40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
29d50 73 75 73 65 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  suse;.    p->inV
29d60 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
29d70 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
29d80 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
29d90 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
29da0 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
29db0 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
29dc0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
29dd0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
29de0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
29df0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
29e00 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
29e10 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
29e20 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
29e30 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
29e40 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  K ){.      res =
29e50 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
29e60 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
29e70 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
29e80 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
29e90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
29ea0 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20  to_misuse;..    
29eb0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
29ec0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
29ed0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
29ee0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
29ef0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  ;..  break;.}.#e
29f00 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
29f10 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29f20 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
29f30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29f40 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
29f50 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
29f60 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3 * *.**.** Stor
29f70 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
29f80 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
29f90 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
29fa0 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
29fb0 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
29fc0 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
29fd0 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
29fe0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
29ff0 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
2a000 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2a010 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
2a020 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2a030 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
2a040 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
2a050 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
2a060 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
2a070 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
2a080 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2a090 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2a0a0 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  bCursor );.  ass
2a0b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2a0c0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
2a0d0 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  em );.  pDest = 
2a0e0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
2a0f0 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  ];.  if( pCur->n
2a100 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
2a110 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2a120 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
2a130 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2a140 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2a150 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2a160 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2a170 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2a180 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
2a190 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
2a1a0 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
2a1b0 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
2a1c0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  );..  /* The out
2a1d0 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
2a1e0 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
2a1f0 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
2a200 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72  ve.  ** the curr
2a210 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20  ent contents to 
2a220 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e  sContext.s so in
2a230 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
2a240 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61  unction .  ** ca
2a250 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64  n use the alread
2a260 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
2a270 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
2a280 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a  locating a .  **
2a290 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20   new one..  */. 
2a2a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2a2b0 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ove(&sContext.s,
2a2c0 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
2a2d0 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74  tTypeFlag(&sCont
2a2e0 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ext.s, MEM_Null)
2a2f0 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
2a300 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2a310 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a320 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d  o_misuse;.  rc =
2a330 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
2a340 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  n(pCur->pVtabCur
2a350 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  sor, &sContext, 
2a360 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69  pOp->p2);.  sqli
2a370 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
2a380 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
2a390 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
2a3a0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
2a3b0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
2a3c0 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
2a3d0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
2a3e0 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
2a3f0 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
2a400 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
2a410 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
2a420 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
2a430 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
2a440 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
2a450 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2a460 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  an error occurre
2a470 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a  d to ensure any.
2a480 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c    ** dynamic all
2a490 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74  ocation in sCont
2a4a0 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72  ext.s (a Mem str
2a4b0 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65  uct) is  release
2a4c0 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
2a4d0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2a4e0 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ing(&sContext.s,
2a4f0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
2a500 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2a510 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
2a520 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2a530 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74  ve(pDest, &sCont
2a540 65 78 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45  ext.s);.  UPDATE
2a550 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
2a560 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
2a570 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
2a580 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
2a590 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2a5a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
2a5b0 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
2a5c0 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67  (pDest) ){.    g
2a5d0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
2a5e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a5f0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2a600 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2a610 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2a620 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2a630 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2a640 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Next P1 P2 * * *
2a650 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76  .**.** Advance v
2a660 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20  irtual table P1 
2a670 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
2a680 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  in its result se
2a690 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  t and.** jump to
2a6a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2a6b0 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72    Or, if the vir
2a6c0 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72  tual table has r
2a6d0 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e  eached.** the en
2a6e0 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  d of its result 
2a6f0 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  set, then fall t
2a700 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2a710 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2a720 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74  */.case OP_VNext
2a730 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
2a740 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2a750 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
2a760 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2a770 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72  pModule;.  int r
2a780 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  es;.  VdbeCursor
2a790 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d   *pCur;..  res =
2a7a0 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   0;.  pCur = p->
2a7b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2a7c0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2a7d0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2a7e0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
2a7f0 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
2a800 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
2a810 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2a820 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2a830 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2a840 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
2a850 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
2a860 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
2a870 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
2a880 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
2a890 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
2a8a0 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
2a8b0 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
2a8c0 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
2a8d0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
2a8e0 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
2a8f0 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
2a900 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
2a910 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
2a920 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
2a930 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
2a940 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
2a950 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
2a960 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
2a970 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
2a980 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
2a990 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
2a9a0 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
2a9b0 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
2a9c0 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
2a9d0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2a9e0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
2a9f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2aa00 73 75 73 65 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  suse;.  p->inVta
2aa10 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72  bMethod = 1;.  r
2aa20 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
2aa30 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
2aa40 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  rsor);.  p->inVt
2aa50 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
2aa60 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2aa70 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2aa80 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
2aa90 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
2aaa0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
2aab0 20 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   0;.  if( rc==SQ
2aac0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2aad0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2aae0 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
2aaf0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 69 66 28  rsor);.  }.  if(
2ab00 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
2ab10 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2ab20 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2ab30 0a 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ..  if( !res ){.
2ab40 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
2ab50 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
2ab60 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20   P2 */.    pc = 
2ab70 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2ab80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2ab90 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2aba0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2abb0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2abc0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2abd0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2abe0 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34  Rename P1 * * P4
2abf0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
2ac00 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
2ac10 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
2ac20 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
2ac30 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
2ac40 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2ac50 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
2ac60 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20  ponding xRename 
2ac70 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75  method. The valu
2ac80 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72  e.** in register
2ac90 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73   P1 is passed as
2aca0 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d   the zName argum
2acb0 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61  ent to the xRena
2acc0 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61  me method..*/.ca
2acd0 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b  se OP_VRename: {
2ace0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2acf0 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70  *pVtab;.  Mem *p
2ad00 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d  Name;..  pVtab =
2ad10 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2ad20 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d  pVtab;.  pName =
2ad30 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
2ad40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
2ad50 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2ad60 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53  ename );.  REGIS
2ad70 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2ad80 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
2ad90 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
2ada0 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
2adb0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2adc0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
2add0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2ade0 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 56 74  suse;.  rc = pVt
2adf0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
2ae00 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
2ae10 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  e->z);.  sqlite3
2ae20 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
2ae30 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
2ae40 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
2ae50 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e  rrMsg;.  pVtab->
2ae60 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69  zErrMsg = 0;.  i
2ae70 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2ae80 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
2ae90 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2aea0 65 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  e;..  break;.}.#
2aeb0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef 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 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2aee0 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
2aef0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50   P3 P4 *.**.** P
2af00 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2af10 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2af20 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
2af30 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2af40 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
2af50 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2af60 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
2af70 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
2af80 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
2af90 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
2afa0 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
2afb0 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
2afc0 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
2afd0 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
2afe0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2aff0 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
2b000 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
2b010 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
2b020 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
2b030 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
2b040 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
2b050 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
2b060 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
2b070 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
2b080 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
2b090 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
2b0a0 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
2b0b0 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2b0c0 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
2b0d0 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
2b0e0 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
2b0f0 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
2b100 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
2b110 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
2b120 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
2b130 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2b140 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
2b150 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
2b160 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
2b170 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
2b180 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
2b190 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
2b1a0 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
2b1b0 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
2b1c0 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
2b1d0 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
2b1e0 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
2b1f0 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
2b200 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
2b210 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
2b220 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
2b230 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
2b240 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
2b250 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
2b260 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
2b270 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
2b280 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
2b290 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
2b2a0 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
2b2b0 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
2b2c0 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
2b2d0 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69  rt_rowid() .** i
2b2e0 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
2b2f0 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20  ue of the rowid 
2b300 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74  for the row just
2b310 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61   inserted..*/.ca
2b320 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
2b330 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2b340 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2b350 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2b360 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
2b370 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
2b380 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
2b390 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
2b3a0 65 6d 20 2a 70 58 3b 0a 0a 20 20 70 56 74 61 62  em *pX;..  pVtab
2b3b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2b3c0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2b3d0 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
2b3e0 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
2b3f0 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
2b400 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
2b410 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2b420 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
2b430 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
2b440 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
2b450 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2b460 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 70 2d 3e  g;.    pX = &p->
2b470 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2b480 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
2b490 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
2b4a0 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 58  storeTypeInfo(pX
2b4b0 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 41 72  , 0);.      apAr
2b4c0 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
2b4d0 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
2b4e0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2b4f0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
2b500 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2b510 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70  suse;.    rc = p
2b520 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
2b530 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
2b540 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
2b550 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2b560 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
2b570 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
2b580 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
2b590 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
2b5a0 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  Msg = 0;.    if(
2b5b0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
2b5c0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2b5d0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2b5e0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2b5f0 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
2b600 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
2b610 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
2b620 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
2b630 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
2b640 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
2b650 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77  >lastRowid = row
2b660 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  id;.    }.    p-
2b670 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a  >nChange++;.  }.
2b680 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2b690 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2b6a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2b6b0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2b6c0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2b6d0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2b6e0 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
2b6f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
2b700 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
2b710 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
2b720 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2b730 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
2b740 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
2b750 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
2b760 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2b770 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
2b780 31 3b 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 0a  1;.  int nPage;.
2b790 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
2b7a0 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
2b7b0 3b 20 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  ; .  pPager = sq
2b7c0 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
2b7d0 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 29  db->aDb[p1].pBt)
2b7e0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2b7f0 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 70  PagerPagecount(p
2b800 50 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a  Pager, &nPage);.
2b810 20 20 2f 2a 20 4f 50 5f 50 61 67 65 63 6f 75 6e    /* OP_Pagecoun
2b820 74 20 69 73 20 61 6c 77 61 79 73 20 63 61 6c 6c  t is always call
2b830 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
2b840 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f   read transactio
2b850 6e 2e 20 20 54 68 65 0a 20 20 2a 2a 20 70 61 67  n.  The.  ** pag
2b860 65 20 63 6f 75 6e 74 20 68 61 73 20 61 6c 72 65  e count has alre
2b870 61 64 79 20 62 65 65 6e 20 73 75 63 63 65 73 73  ady been success
2b880 66 75 6c 6c 79 20 72 65 61 64 20 61 6e 64 20 63  fully read and c
2b890 61 63 68 65 64 2e 20 20 53 6f 20 74 68 65 0a 20  ached.  So the. 
2b8a0 20 2a 2a 20 73 71 6c 69 74 65 33 50 61 67 65 72   ** sqlite3Pager
2b8b0 50 61 67 65 63 6f 75 6e 74 28 29 20 63 61 6c 6c  Pagecount() call
2b8c0 20 61 62 6f 76 65 20 63 61 6e 6e 6f 74 20 66 61   above cannot fa
2b8d0 69 6c 2e 20 2a 2f 0a 20 20 69 66 28 20 41 4c 57  il. */.  if( ALW
2b8e0 41 59 53 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  AYS(rc==SQLITE_O
2b8f0 4b 29 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  K) ){.    pOut->
2b900 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
2b910 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
2b920 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62 72   nPage;.  }.  br
2b930 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2b940 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b950 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f  IT_TRACE./* Opco
2b960 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20  de: Trace * * * 
2b970 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  P4 *.**.** If tr
2b980 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
2b990 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
2b9a0 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
2b9b0 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
2b9c0 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
2b9d0 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
2b9e0 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
2b9f0 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
2ba00 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65  */.case OP_Trace
2ba10 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61  : {.  char *zTra
2ba20 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20  ce;..  zTrace = 
2ba30 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
2ba40 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
2ba50 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
2ba60 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
2ba70 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64  Trace ){.      d
2ba80 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
2ba90 72 61 63 65 41 72 67 2c 20 7a 54 72 61 63 65 29  raceArg, zTrace)
2baa0 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  ;.    }.#ifdef S
2bab0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
2bac0 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
2bad0 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
2bae0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )!=0 ){.      sq
2baf0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
2bb00 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c  ("SQL-trace: %s\
2bb10 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  n", zTrace);.   
2bb20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
2bb30 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d  ITE_DEBUG */.  }
2bb40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2bb50 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  if.../* Opcode: 
2bb60 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  Noop * * * * *.*
2bb70 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  *.** Do nothing.
2bb80 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
2bb90 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66  on is often usef
2bba0 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20  ul as a jump.** 
2bbb0 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  destination..*/.
2bbc0 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20  /*.** The magic 
2bbd0 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61  Explain opcode a
2bbe0 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64  re only inserted
2bbf0 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32   when explain==2
2bc00 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f   (which.** is to
2bc10 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58   say when the EX
2bc20 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
2bc30 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e   syntax is used.
2bc40 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ).** This opcode
2bc50 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61   records informa
2bc60 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70  tion from the op
2bc70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20  timizer.  It is 
2bc80 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  the.** the same 
2bc90 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69  as a no-op.  Thi
2bca0 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61  s opcodesnever a
2bcb0 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c  ppears in a real
2bcc0 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a   VM program..*/.
2bcd0 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20  default: {      
2bce0 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72      /* This is r
2bcf0 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e  eally OP_Noop an
2bd00 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a  d OP_Explain */.
2bd10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
2bd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2bd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2bd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2bd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2bd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
2bd70 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
2bd80 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
2bd90 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
2bda0 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
2bdb0 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
2bdc0 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
2bdd0 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
2bde0 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
2bdf0 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
2be00 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
2be10 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
2be20 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
2be30 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
2be40 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
2be50 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
2be60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2be70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2be80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2be90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2bea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
2beb0 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
2bec0 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
2bed0 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20    u64 elapsed = 
2bee0 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20  sqlite3Hwtime() 
2bef0 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
2bf00 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c  Op->cycles += el
2bf10 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70  apsed;.      pOp
2bf20 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20  ->cnt++;.#if 0. 
2bf30 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
2bf40 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22  tdout, "%10llu "
2bf50 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20  , elapsed);.    
2bf60 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
2bf70 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f  rintOp(stdout, o
2bf80 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b 6f  rigPc, &p->aOp[o
2bf90 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a  rigPc]);.#endif.
2bfa0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
2bfb0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
2bfc0 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
2bfd0 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
2bfe0 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
2bff0 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
2c000 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
2c010 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
2c020 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
2c030 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
2c040 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
2c050 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
2c060 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
2c070 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
2c080 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
2c090 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
2c0a0 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
2c0b0 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
2c0c0 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
2c0d0 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
2c0e0 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
2c0f0 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
2c100 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2c110 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
2c120 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
2c130 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28  rc!=0 ) fprintf(
2c140 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c  p->trace,"rc=%d\
2c150 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66  n",rc);.      if
2c160 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f  ( opProperty & O
2c170 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
2c180 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
2c190 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
2c1a0 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c  >trace, pOp->p2,
2c1b0 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a   pOut);.      }.
2c1c0 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70        if( opProp
2c1d0 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
2c1e0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
2c1f0 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
2c200 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 4f  ace, pOp->p3, pO
2c210 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ut);.      }.   
2c220 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
2c230 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
2c240 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
2c250 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
2c260 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
2c270 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
2c280 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
2c290 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
2c2a0 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
2c2b0 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
2c2c0 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
2c2d0 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
2c2e0 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
2c2f0 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
2c300 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
2c310 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
2c320 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c  ->rc = rc;.  sql
2c330 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
2c340 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2c350 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
2c360 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2c370 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
2c380 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a  ITE_ERROR;..  /*
2c390 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
2c3a0 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
2c3b0 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
2c3c0 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
2c3d0 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
2c3e0 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
2c3f0 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
2c400 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
2c410 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
2c420 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75    sqlite3BtreeMu
2c430 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26 70  texArrayLeave(&p
2c440 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74  ->aMutex);.  ret
2c450 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
2c460 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
2c470 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
2c480 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
2c490 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
2c4a0 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
2c4b0 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
2c4c0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2c4d0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2c4e0 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  db, "string or b
2c4f0 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
2c500 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
2c510 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
2c520 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2c530 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2c540 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
2c550 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
2c560 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
2c570 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
2c580 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2c590 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f  >zErrMsg, db, "o
2c5a0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
2c5b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
2c5c0 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
2c5d0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2c5e0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2c5f0 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  for an SQLITE_MI
2c600 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a 2f  SUSE error..  */
2c610 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69  .abort_due_to_mi
2c620 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51 4c  suse:.  rc = SQL
2c630 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f 2a  ITE_MISUSE;.  /*
2c640 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20   Fall thru into 
2c650 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c660 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70  or */..  /* Jump
2c670 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
2c680 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
2c690 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
2c6a0 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
2c6b0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
2c6c0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
2c6d0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2c6e0 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
2c6f0 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
2c700 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
2c710 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
2c720 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2c730 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2c740 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2c750 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2c760 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2c770 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2c780 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
2c790 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
2c7a0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2c7b0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2c7c0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
2c7d0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
2c7e0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
2c7f0 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
2c800 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
2c810 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
2c820 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
2c830 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
2c840 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
2c850 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
2c860 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
2c870 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2c880 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2c890 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
2c8a0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
2c8b0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.