/ Hex Artifact Content
Login

Artifact 7e5781773b62c4ef1569e58340f2ca9a034a08b5:


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 36 38 20 32 30 30 39  e.c,v 1.868 2009
0850: 2f 30 37 2f 30 32 20 30 37 3a 34 37 3a 33 33 20  /07/02 07:47:33 
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: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
6c90: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
6ca0: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
6cb0: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
6cc0: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
6cd0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
6ce0: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
6cf0: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f  sg, db, "%s", pO
6d00: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20 20  p->p4.z);.  }.  
6d10: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
6d20: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
6d30: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
6d40: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
6d50: 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  _OK );.  if( rc=
6d60: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
6d70: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
6d80: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
6d90: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
6da0: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
6db0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
6dc0: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
6dd0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
6de0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
6df0: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
6e00: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
6e10: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
6e20: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
6e30: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
6e40: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
6e50: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
6e60: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
6e70: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
6e80: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74   MEM_Int;.  pOut
6e90: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
6ea0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6eb0: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
6ec0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
6ed0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
6ee0: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
6ef0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
6f00: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
6f10: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
6f20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
6f30: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
6f40: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
6f50: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
6f60: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
6f70: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
6f80: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75  = MEM_Int;.  pOu
6f90: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
6fa0: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
6fb0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
6fc0: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
6fd0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
6fe0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
6ff0: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
7000: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
7010: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
7020: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7030: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
7040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
7050: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
7060: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7070: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7080: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
7090: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
70a0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
70b0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
70c0: 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  >r = *pOp->p4.pR
70d0: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
70e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
70f0: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
7100: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
7110: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
7120: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
7130: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
7140: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
7150: 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69   into an OP_Stri
7160: 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ng before it is 
7170: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
7180: 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a   first time..*/.
7190: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
71a0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
71b0: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
71c0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
71d0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
71e0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
71f0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
7200: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
7210: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
7220: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
7230: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7240: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
7250: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
7260: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
7270: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
7280: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
7290: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
72a0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
72b0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
72c0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  f( rc==SQLITE_TO
72d0: 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  OBIG ) goto too_
72e0: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
72f0: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
7300: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
7310: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
7320: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
7330: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
7340: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
7350: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
7360: 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  t( pOut->flags &
7370: 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20   MEM_Dyn );.    
7380: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
7390: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
73a0: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
73b0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
73c0: 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20  s &= ~MEM_Dyn;. 
73d0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
73e0: 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29  pe==P4_DYNAMIC )
73f0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
7400: 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70  bFree(db, pOp->p
7410: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
7420: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
7430: 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f  _DYNAMIC;.    pO
7440: 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e  p->p4.z = pOut->
7450: 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d  z;.    pOp->p1 =
7460: 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65   pOut->n;.  }.#e
7470: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
7480: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
7490: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
74a0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
74b0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a  oo_big;.  }.  /*
74c0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
74d0: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
74e0: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
74f0: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
7500: 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ing P1 P2 * P4 *
7510: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
7520: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
7530: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
7540: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
7550: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7560: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
7570: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7580: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7590: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
75a0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
75b0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
75c0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
75d0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
75e0: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
75f0: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
7600: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
7610: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7620: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7630: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7640: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
7650: 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  l * P2 * * *.**.
7660: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
7670: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7680: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
7690: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
76a0: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
76b0: 65 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e */.  break;.}.
76c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f  ../* Opcode: Blo
76d0: 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a  b P1 P2 * P4.**.
76e0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
76f0: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
7700: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
7710: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
7720: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
7730: 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
7740: 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20  on is not coded 
7750: 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74  directly.** by t
7760: 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73  he compiler. Ins
7770: 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c  tead, the compil
7780: 65 72 20 6c 61 79 65 72 20 73 70 65 63 69 66 69  er layer specifi
7790: 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42  es.** an OP_HexB
77a0: 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68  lob opcode, with
77b0: 20 74 68 65 20 68 65 78 20 73 74 72 69 6e 67 20   the hex string 
77c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
77d0: 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73  f.** the blob as
77e0: 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65   P4. This opcode
77f0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7800: 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a  to an OP_Blob.**
7810: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
7820: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a  it is executed..
7830: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
7840: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
7850: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7860: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7870: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
7880: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
7890: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
78a0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
78b0: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
78c0: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
78d0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
78e0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
78f0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7900: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7910: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
7920: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
7930: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
7940: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
7950: 70 61 72 61 6d 65 74 65 72 73 20 50 31 2e 2e 50  parameters P1..P
7960: 31 2b 50 33 2d 31 20 69 6e 74 6f 20 72 65 67 69  1+P3-1 into regi
7970: 73 74 65 72 73 0a 2a 2a 20 50 32 2e 2e 50 32 2b  sters.** P2..P2+
7980: 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P3-1..**.** If t
7990: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
79a0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
79b0: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
79c0: 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a  P4 and P3==1..**
79d0: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
79e0: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
79f0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
7a00: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
7a10: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 0a 20  OP_Variable: {. 
7a20: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
7a30: 20 20 2f 2a 20 56 61 72 69 61 62 6c 65 20 74 6f    /* Variable to
7a40: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
7a50: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
7a60: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
7a70: 63 6f 70 79 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  copy to */.  int
7a80: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
7a90: 20 4e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   Number of value
7aa0: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
7ab0: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
7ac0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
7ad0: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
7ae0: 2a 2f 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  */..  p1 = pOp->
7af0: 70 31 20 2d 20 31 3b 0a 20 20 70 32 20 3d 20 70  p1 - 1;.  p2 = p
7b00: 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20 3d 20 70 4f  Op->p2;.  n = pO
7b10: 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
7b20: 20 70 31 3e 3d 30 20 26 26 20 70 31 2b 6e 3c 3d   p1>=0 && p1+n<=
7b30: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
7b40: 65 72 74 28 20 70 32 3e 3d 31 20 26 26 20 70 32  ert( p2>=1 && p2
7b50: 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  +n-1<=p->nMem );
7b60: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7b70: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
7b80: 70 33 3d 3d 31 20 29 3b 0a 0a 20 20 77 68 69 6c  p3==1 );..  whil
7b90: 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b 0a 20 20  e( n-- > 0 ){.  
7ba0: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
7bb0: 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20 69 66 28  r[p1++];.    if(
7bc0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
7bd0: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
7be0: 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
7bf0: 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  g;.    }.    pOu
7c00: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b  t = &p->aMem[p2+
7c10: 2b 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +];.    sqlite3V
7c20: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
7c30: 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20  ernal(pOut);.   
7c40: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7c50: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73 71 6c  EM_Null;.    sql
7c60: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7c70: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
7c80: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
7c90: 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42      UPDATE_MAX_B
7ca0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7cb0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
7cc0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50  * Opcode: Move P
7cd0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
7ce0: 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65  * Move the value
7cf0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
7d00: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
7d10: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
7d20: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
7d30: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
7d40: 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P1-1 are.** left
7d50: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
7d60: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
7d70: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
7d80: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
7d90: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
7da0: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a  3-1 to overlap..
7db0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
7dc0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c   {.  char *zMall
7dd0: 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  oc;   /* Holding
7de0: 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c   variable for al
7df0: 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a  located memory *
7e00: 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
7e10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7e20: 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74  f registers left
7e30: 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e   to copy */.  in
7e40: 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f  t p1;          /
7e50: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
7e60: 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74  py from */.  int
7e70: 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p2;          /*
7e80: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7e90: 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  y to */..  n = p
7ea0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70  Op->p3;.  p1 = p
7eb0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
7ec0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
7ed0: 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26  ( n>0 && p1>0 &&
7ee0: 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p2>0 );.  asser
7ef0: 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70  t( p1+n<=p2 || p
7f00: 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49  2+n<=p1 );..  pI
7f10: 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 31  n1 = &p->aMem[p1
7f20: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ];.  pOut = &p->
7f30: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68 69 6c  aMem[p2];.  whil
7f40: 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20 61 73  e( n-- ){.    as
7f50: 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 70 2d 3e  sert( pOut<=&p->
7f60: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b  aMem[p->nMem] );
7f70: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
7f80: 31 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e  1<=&p->aMem[p->n
7f90: 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a 4d 61 6c  Mem] );.    zMal
7fa0: 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c  loc = pOut->zMal
7fb0: 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  loc;.    pOut->z
7fc0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
7fd0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
7fe0: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
7ff0: 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f      pIn1->zMallo
8000: 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20  c = zMalloc;.   
8010: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8020: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
8030: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
8040: 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t++;.  }.  break
8050: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8060: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
8070: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
8080: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
8090: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
80a0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
80b0: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
80c0: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
80d0: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
80e0: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
80f0: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
8100: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
8110: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
8120: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
8130: 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  P_Copy: {       
8140: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
8150: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8160: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
8170: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
8180: 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  m );.  pOut = &p
8190: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
81a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
81b0: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
81c0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
81d0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
81e0: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44   MEM_Ephem);.  D
81f0: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
8200: 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
8210: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
8220: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
8230: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
8240: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
8250: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
8260: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
8270: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
8280: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
8290: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
82a0: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
82b0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
82c0: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
82d0: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
82e0: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
82f0: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
8300: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
8310: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
8320: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
8330: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
8340: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
8350: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
8360: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
8370: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
8380: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
8390: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
83a0: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
83b0: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
83c0: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
83d0: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
83e0: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
83f0: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
8400: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
8410: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
8420: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
8430: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
8440: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
8450: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8460: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
8470: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8480: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
8490: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
84a0: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
84b0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
84c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
84d0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
84e0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
84f0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
8500: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
8510: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8520: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
8530: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8540: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
8550: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
8560: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
8570: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
8580: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
8590: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
85a0: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
85b0: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
85c0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
85d0: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
85e0: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
85f0: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
8600: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
8610: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
8620: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
8630: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
8640: 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61  to the top P1 va
8650: 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75  lues as the resu
8660: 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61  lt.** row..*/.ca
8670: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
8680: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
8690: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
86a0: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
86b0: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
86c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
86d0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
86e0: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70  p->p1+pOp->p2<=p
86f0: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f  ->nMem+1 );..  /
8700: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
8710: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
8720: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
8730: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
8740: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
8750: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
8760: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
8770: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
8780: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
8790: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
87a0: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
87b0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
87c0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
87d0: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
87e0: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
87f0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
8800: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
8810: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
8820: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
8830: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
8840: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
8850: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
8860: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
8870: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
8880: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
8890: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
88a0: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
88b0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
88c0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
88d0: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
88e0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
88f0: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
8900: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
8910: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
8920: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
8930: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
8940: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
8950: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
8960: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
8970: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
8980: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
8990: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
89a0: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
89b0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
89c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
89d0: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
89e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
89f0: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
8a00: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
8a10: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
8a20: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
8a30: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
8a40: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
8a50: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
8a60: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
8a70: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
8a80: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
8a90: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
8aa0: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
8ab0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
8ac0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
8ad0: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
8ae0: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
8af0: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
8b00: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
8b10: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
8b20: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
8b30: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
8b40: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
8b50: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
8b60: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
8b70: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
8b80: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
8b90: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
8ba0: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20  ized as.  ** as 
8bb0: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
8bc0: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
8bd0: 65 73 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e 61  esultSet = &p->a
8be0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8bf0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
8c00: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  p2; i++){.    sq
8c10: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
8c20: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
8c30: 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70  ]);.    storeTyp
8c40: 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69 5d 2c 20  eInfo(&pMem[i], 
8c50: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52  encoding);.    R
8c60: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8c70: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
8c80: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
8c90: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
8ca0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
8cb0: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
8cc0: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
8cd0: 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72  pc = pc + 1;.  r
8ce0: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
8cf0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
8d00: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
8d10: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
8d20: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20  3 * *.**.** Add 
8d30: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
8d40: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
8d50: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
8d60: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
8d70: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
8d80: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
8d90: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
8da0: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
8db0: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
8dc0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
8dd0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
8de0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
8df0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
8e00: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
8e10: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
8e20: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
8e30: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
8e40: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
8e50: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
8e60: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
8e70: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
8e80: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
8e90: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
8ea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8eb0: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
8ec0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
8ed0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
8ee0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
8ef0: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
8f00: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
8f10: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
8f20: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
8f30: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
8f40: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
8f50: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
8f60: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
8f70: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
8f80: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
8f90: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
8fa0: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
8fb0: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
8fc0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
8fd0: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
8fe0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
8ff0: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
9000: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
9010: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
9020: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9030: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
9040: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
9050: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9060: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
9070: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
9080: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
9090: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
90a0: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
90b0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
90c0: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
90d0: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
90e0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
90f0: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
9100: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
9110: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d  pOut->z[nByte] =
9120: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42   0;.  pOut->z[nB
9130: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
9140: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
9150: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
9160: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
9170: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9180: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9190: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
91a0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
91b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
91c0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
91d0: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
91e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
91f0: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
9200: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9210: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9220: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9230: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9240: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9250: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9260: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9270: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
9280: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  P3 * *.**.**.** 
9290: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
92a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
92b0: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
92c0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
92d0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
92e0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
92f0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9300: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9310: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9320: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9330: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
9340: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9350: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
9360: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9370: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
9380: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9390: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
93a0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
93b0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
93c0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
93d0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
93e0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
93f0: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
9400: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9410: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
9420: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9430: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9440: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9450: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9460: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9470: 50 33 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P3.  If the valu
9480: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9490: 0a 2a 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68 65  .** is zero, the
94a0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
94b0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
94c0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
94d0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
94e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
94f0: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
9500: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9510: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
9520: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
9530: 65 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66  eger division of
9540: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a   the value in.**
9550: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9560: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9570: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
9580: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
9590: 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P3. .** If the 
95a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
95b0: 72 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65  r P2 is zero the
95c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
95d0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
95e0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
95f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9600: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  L..*/.case OP_Ad
9610: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
9620: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9630: 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e  TK_PLUS, in1, in
9640: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9650: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
9660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9670: 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69  e as TK_MINUS, i
9680: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9690: 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c  .case OP_Multipl
96a0: 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y:              
96b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
96c0: 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AR, in1, in2, ou
96d0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69  t3 */.case OP_Di
96e0: 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20  vide:           
96f0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9700: 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69  TK_SLASH, in1, i
9710: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
9720: 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b   OP_Remainder: {
9730: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
9740: 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e  me as TK_REM, in
9750: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9760: 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20    int flags;    
9770: 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45    /* Combined ME
9780: 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62  M_* flags from b
9790: 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20  oth inputs */.  
97a0: 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20  i64 iA;         
97b0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
97c0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
97d0: 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20   */.  i64 iB;   
97e0: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
97f0: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
9800: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
9810: 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20  ble rA;      /* 
9820: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65  Real value of le
9830: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
9840: 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20  double rB;      
9850: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
9860: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
9870: 2f 0a 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  /..  applyNumeri
9880: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b  cAffinity(pIn1);
9890: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
98a0: 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20  ffinity(pIn2);. 
98b0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
98c0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
98d0: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
98e0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
98f0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
9900: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9910: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
9920: 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61  lags & pIn2->fla
9930: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d  gs & MEM_Int)==M
9940: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41  EM_Int ){.    iA
9950: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
9960: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
9970: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
9980: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
9990: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
99a0: 20 20 20 20 20 20 20 20 69 42 20 2b 3d 20 69 41          iB += iA
99b0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
99c0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
99d0: 74 72 61 63 74 3a 20 20 20 20 69 42 20 2d 3d 20  tract:    iB -= 
99e0: 69 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  iA;       break;
99f0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
9a00: 75 6c 74 69 70 6c 79 3a 20 20 20 20 69 42 20 2a  ultiply:    iB *
9a10: 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72 65 61  = iA;       brea
9a20: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
9a30: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
9a40: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
9a50: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9a60: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9a70: 20 20 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69         /* Dividi
9a80: 6e 67 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ng the largest p
9a90: 6f 73 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65  ossible negative
9aa0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
9ab0: 28 31 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20  (1<<63) by .    
9ac0: 20 20 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e      ** -1 return
9ad0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f  s an integer too
9ae0: 20 6c 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20   large to store 
9af0: 69 6e 20 61 20 36 34 2d 62 69 74 20 64 61 74 61  in a 64-bit data
9b00: 2d 74 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20  -type. On.      
9b10: 20 20 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74    ** some archit
9b20: 65 63 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c  ectures, the val
9b30: 75 65 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20  ue overflows to 
9b40: 28 31 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65  (1<<63). On othe
9b50: 72 73 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  rs,.        ** a
9b60: 20 53 49 47 46 50 45 20 69 73 20 69 73 73 75 65   SIGFPE is issue
9b70: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d. The following
9b80: 20 73 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61   statement norma
9b90: 6c 69 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20  lizes this.     
9ba0: 20 20 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73     ** behavior s
9bb0: 6f 20 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69  o that all archi
9bc0: 74 65 63 74 75 72 65 73 20 62 65 68 61 76 65 20  tectures behave 
9bd0: 61 73 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20  as if integer . 
9be0: 20 20 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c         ** overfl
9bf0: 6f 77 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20  ow occurred..   
9c00: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
9c10: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
9c20: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
9c30: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
9c40: 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20     iB /= iA;.   
9c50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9c60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
9c70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  t: {.        if(
9c80: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
9c90: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9ca0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9cb0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
9cc0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42   = 1;.        iB
9cd0: 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   %= iA;.        
9ce0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9cf0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
9d00: 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d  .i = iB;.    Mem
9d10: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
9d20: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  , MEM_Int);.  }e
9d30: 6c 73 65 7b 0a 20 20 20 20 72 41 20 3d 20 73 71  lse{.    rA = sq
9d40: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
9d50: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42  ue(pIn1);.    rB
9d60: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
9d70: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
9d80: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
9d90: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
9da0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
9db0: 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20       rB += rA;  
9dc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9dd0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
9de0: 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b  ct:    rB -= rA;
9df0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9e00: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
9e10: 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72  iply:    rB *= r
9e20: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
9e30: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
9e40: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
9e50: 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20  /* (double)0 In 
9e60: 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  case of SQLITE_O
9e70: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
9e80: 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20  NT... */.       
9e90: 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65   if( rA==(double
9ea0: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
9eb0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9ec0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20  ull;.        rB 
9ed0: 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62  /= rA;.        b
9ee0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
9ef0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
9f00: 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34         iA = (i64
9f10: 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20  )rA;.        iB 
9f20: 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20  = (i64)rB;.     
9f30: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
9f40: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9f50: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9f60: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
9f70: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
9f80: 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65      rB = (double
9f90: 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20  )(iB % iA);.    
9fa0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9fb0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
9fc0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
9fd0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
9fe0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9ff0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
a000: 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72  .    pOut->r = r
a010: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
a020: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
a030: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
a040: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
a050: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
a060: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
a070: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
a080: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
a090: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
a0a0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
a0b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a0c0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a0d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a0e0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a  ode: CollSeq * *
a0f0: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
a100: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
a110: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
a120: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
a130: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
a140: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
a150: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
a160: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
a170: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
a180: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
a190: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
a1a0: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
a1b0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
a1c0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
a1d0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
a1e0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  ns..**.** The in
a1f0: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
a200: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
a210: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
a220: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
a230: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
a240: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
a250: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
a260: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
a270: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
a280: 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74  publicly, only t
a290: 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73  o user functions
a2a0: 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63   defined in func
a2b0: 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  .c..*/.case OP_C
a2c0: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
a2d0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
a2e0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
a2f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a300: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
a310: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
a320: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
a330: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
a340: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
a350: 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74   Function struct
a360: 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ure that.** defi
a370: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
a380: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
a390: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
a3a0: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
a3b0: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
a3c0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
a3d0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
a3e0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
a3f0: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
a400: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
a410: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
a420: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
a430: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
a440: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
a450: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
a460: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
a470: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
a480: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
a490: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
a4a0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
a4b0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
a4c0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
a4d0: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
a4e0: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
a4f0: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
a500: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
a510: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
a520: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a530: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a540: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
a550: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
a560: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
a570: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
a580: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
a590: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
a5a0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
a5b0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
a5c0: 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64  lso: AggStep and
a5d0: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73   AggFinal.*/.cas
a5e0: 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b  e OP_Function: {
a5f0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
a600: 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  *pArg;.  sqlite3
a610: 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
a620: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
a630: 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a  apVal;.  int n;.
a640: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
a650: 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
a660: 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
a670: 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a  Val || n==0 );..
a680: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
a690: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
a6a0: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
a6b0: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
a6c0: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
a6d0: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
a6e0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
a6f0: 72 67 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  rg = &p->aMem[pO
a700: 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p2];.  for(i=
a710: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72  0; i<n; i++, pAr
a720: 67 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b  g++){.    apVal[
a730: 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 73  i] = pArg;.    s
a740: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 41 72  toreTypeInfo(pAr
a750: 67 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  g, encoding);.  
a760: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
a770: 28 70 4f 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b  (pOp->p2, pArg);
a780: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
a790: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
a7a0: 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e  FUNCDEF || pOp->
a7b0: 70 34 74 79 70 65 3d 3d 50 34 5f 56 44 42 45 46  p4type==P4_VDBEF
a7c0: 55 4e 43 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  UNC );.  if( pOp
a7d0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
a7e0: 43 44 45 46 20 29 7b 0a 20 20 20 20 63 74 78 2e  CDEF ){.    ctx.
a7f0: 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
a800: 70 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70  pFunc;.    ctx.p
a810: 56 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20  VdbeFunc = 0;.  
a820: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74 78 2e 70  }else{.    ctx.p
a830: 56 64 62 65 46 75 6e 63 20 3d 20 28 56 64 62 65  VdbeFunc = (Vdbe
a840: 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56  Func*)pOp->p4.pV
a850: 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 63 74 78  dbeFunc;.    ctx
a860: 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64  .pFunc = ctx.pVd
a870: 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20  beFunc->pFunc;. 
a880: 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
a890: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
a8a0: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
a8b0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
a8c0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 63 74 78  [pOp->p3];.  ctx
a8d0: 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  .s.flags = MEM_N
a8e0: 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20  ull;.  ctx.s.db 
a8f0: 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44  = db;.  ctx.s.xD
a900: 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  el = 0;.  ctx.s.
a910: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20  zMalloc = 0;..  
a920: 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65  /* The output ce
a930: 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68  ll may already h
a940: 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c  ave a buffer all
a950: 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a  ocated. Move.  *
a960: 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  * the pointer to
a970: 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73   ctx.s so in cas
a980: 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  e the user-funct
a990: 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a  ion can use.  **
a9a0: 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
a9b0: 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
a9c0: 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
a9d0: 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20  ing a new one.. 
a9e0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
a9f0: 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c  eMemMove(&ctx.s,
aa00: 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74   pOut);.  MemSet
aa10: 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c  TypeFlag(&ctx.s,
aa20: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63   MEM_Null);..  c
aa30: 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
aa40: 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
aa50: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
aa60: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b  FUNC_NEEDCOLL ){
aa70: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
aa80: 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  >p->aOp );.    a
aa90: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
aaa0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
aab0: 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
aac0: 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
aad0: 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
aae0: 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
aaf0: 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
ab00: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
ab10: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
ab20: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
ab30: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a  _to_misuse;.  (*
ab40: 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63  ctx.pFunc->xFunc
ab50: 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
ab60: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
ab70: 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a  SafetyOn(db) ){.
ab80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
ab90: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
aba0: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
abb0: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
abc0: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
abd0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
abe0: 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67     /* Even thoug
abf0: 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  h a malloc() has
ac00: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70   failed, the imp
ac10: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
ac20: 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66  he.    ** user f
ac30: 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  unction may have
ac40: 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74   called an sqlit
ac50: 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20  e3_result_XXX() 
ac60: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20  function.    ** 
ac70: 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  to return a valu
ac80: 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e. The following
ac90: 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61   call releases a
aca0: 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20  ny resources.   
acb0: 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77   ** associated w
acc0: 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65  ith such a value
acd0: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
ace0: 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52  Note: Maybe MemR
acf0: 65 6c 65 61 73 65 28 29 20 73 68 6f 75 6c 64 20  elease() should 
ad00: 62 65 20 63 61 6c 6c 65 64 20 69 66 20 73 71 6c  be called if sql
ad10: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 29 0a 20  ite3SafetyOn(). 
ad20: 20 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f     ** fails also
ad30: 20 28 74 68 65 20 69 66 28 2e 2e 2e 29 20 73 74   (the if(...) st
ad40: 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20  atement above). 
ad50: 42 75 74 20 69 66 20 70 65 6f 70 6c 65 20 61 72  But if people ar
ad60: 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e  e.    ** misusin
ad70: 67 20 73 71 6c 69 74 65 2c 20 74 68 65 79 20 68  g sqlite, they h
ad80: 61 76 65 20 62 69 67 67 65 72 20 70 72 6f 62 6c  ave bigger probl
ad90: 65 6d 73 20 74 68 61 6e 20 61 20 6c 65 61 6b 65  ems than a leake
ada0: 64 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  d value..    */.
adb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
adc0: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
add0: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
ade0: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  em;.  }..  /* If
adf0: 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64   any auxiliary d
ae00: 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  ata functions ha
ae10: 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62  ve been called b
ae20: 79 20 74 68 69 73 20 75 73 65 72 20 66 75 6e 63  y this user func
ae30: 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64  tion,.  ** immed
ae40: 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20  iately call the 
ae50: 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61  destructor for a
ae60: 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61  ny non-static va
ae70: 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  lues..  */.  if(
ae80: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29   ctx.pVdbeFunc )
ae90: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
aea0: 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 63  eDeleteAuxData(c
aeb0: 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f  tx.pVdbeFunc, pO
aec0: 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d  p->p1);.    pOp-
aed0: 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20  >p4.pVdbeFunc = 
aee0: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20  ctx.pVdbeFunc;. 
aef0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
af00: 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20   P4_VDBEFUNC;.  
af10: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  }..  /* If the f
af20: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
af30: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
af40: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
af50: 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
af60: 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
af70: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
af80: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
af90: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
afa0: 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
afb0: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
afc0: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
afd0: 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
afe0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
aff0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
b000: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
b010: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
b020: 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29  ctx.s, encoding)
b030: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
b040: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74  emMove(pOut, &ct
b050: 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  x.s);.  if( sqli
b060: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
b070: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f  (pOut) ){.    go
b080: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b090: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b0a0: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
b0b0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
b0c0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
b0d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b0e0: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
b0f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b100: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b110: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
b120: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
b130: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
b140: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b150: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b160: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b170: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b180: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b190: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
b1a0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
b1b0: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
b1c0: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
b1d0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
b1e0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
b1f0: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
b200: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b210: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b220: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b230: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b240: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b250: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
b260: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b270: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
b280: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
b290: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
b2a0: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
b2b0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
b2c0: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
b2d0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
b2e0: 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ser P1..** Store
b2f0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b300: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b310: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b320: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b330: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b340: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
b350: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
b360: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
b370: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
b380: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
b390: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
b3a0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
b3b0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
b3c0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
b3d0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
b3e0: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
b3f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b400: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b410: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b420: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b430: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
b440: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
b450: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b460: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
b470: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b480: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b4a0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
b4b0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b4c0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
b4d0: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
b4e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b4f0: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
b500: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b510: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
b520: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
b530: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
b540: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b550: 20 2a 2f 0a 20 20 69 36 34 20 61 3b 0a 20 20 69   */.  i64 a;.  i
b560: 36 34 20 62 3b 0a 0a 20 20 69 66 28 20 28 70 49  64 b;..  if( (pI
b570: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
b580: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
b590: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
b5a0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
b5b0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
b5c0: 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c  k;.  }.  a = sql
b5d0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b5e0: 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71  (pIn2);.  b = sq
b5f0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
b600: 65 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63  e(pIn1);.  switc
b610: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
b620: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69  {.    case OP_Bi
b630: 74 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20  tAnd:      a &= 
b640: 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  b;     break;.  
b650: 20 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a    case OP_BitOr:
b660: 20 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20         a |= b;  
b670: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
b680: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
b690: 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62     a <<= b;    b
b6a0: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
b6b0: 74 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  t:  assert( pOp-
b6c0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66  >opcode==OP_Shif
b6d0: 74 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20  tRight );.      
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62     a >>= b;    b
b700: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  reak;.  }.  pOut
b710: 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d  ->u.i = a;.  Mem
b720: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
b730: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
b740: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b750: 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32  e: AddImm  P1 P2
b760: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64   * * *.** .** Ad
b770: 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50  d the constant P
b780: 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  2 to the value i
b790: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
b7a0: 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
b7b0: 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65  always an intege
b7c0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63  r..**.** To forc
b7d0: 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74  e any register t
b7e0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c  o be an integer,
b7f0: 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a   just add 0..*/.
b800: 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20  case OP_AddImm: 
b810: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
b820: 69 6e 31 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  in1 */.  sqlite3
b830: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
b840: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
b850: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
b860: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b870: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
b880: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
b890: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
b8a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b8b0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
b8c0: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
b8d0: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
b8e0: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
b8f0: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
b900: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
b910: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
b920: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
b930: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
b940: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
b950: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
b960: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
b970: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
b980: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
b990: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
b9a0: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
b9b0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
b9c0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
b9d0: 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69  _NUMERIC, encodi
b9e0: 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ng);.  if( (pIn1
b9f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
ba00: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  t)==0 ){.    if(
ba10: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
ba20: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
ba30: 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20  _MISMATCH;.     
ba40: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
ba50: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
ba60: 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  lse{.      pc = 
ba70: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
ba80: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
ba90: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
baa0: 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  In1, MEM_Int);. 
bab0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
bac0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
bad0: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
bae0: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
baf0: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
bb00: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
bb10: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
bb20: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
bb30: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
bb40: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
bb50: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
bb60: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
bb70: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
bb80: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
bb90: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
bba0: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
bbb0: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
bbc0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
bbd0: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
bbe0: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
bbf0: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
bc00: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
bc10: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
bc20: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc40: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e  in1 */.  if( pIn
bc50: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
bc60: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
bc70: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
bc80: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
bc90: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
bca0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
bcb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78  /* Opcode: ToTex
bcc0: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
bcd0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
bce0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bcf0: 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a  1 to be text..**
bd00: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
bd10: 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72   numeric, conver
bd20: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
bd30: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
bd40: 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e  uivalent of prin
bd50: 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75  tf().  Blob valu
bd60: 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64  es are unchanged
bd70: 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65   and.** are afte
bd80: 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e  rwards simply in
bd90: 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
bda0: 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  t..**.** A NULL 
bdb0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
bdc0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
bdd0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
bde0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
bdf0: 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20  OP_ToText: {    
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54   same as TK_TO_T
be20: 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  EXT, in1 */.  if
be30: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
be40: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
be50: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
be60: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
be70: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
be80: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
be90: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
bea0: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
beb0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
bec0: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
bed0: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
bee0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
bef0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
bf00: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
bf10: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
bf20: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
bf30: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
bf40: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
bf50: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
bf60: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
bf70: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
bf80: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
bf90: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
bfa0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
bfb0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bfc0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
bfd0: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
bfe0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
bff0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c000: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
c010: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
c020: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
c030: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
c040: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
c050: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
c060: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
c070: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c080: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c090: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c0a0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c0b0: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c0e0: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
c0f0: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
c100: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72   & MEM_Null ) br
c110: 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  eak;.  if( (pIn1
c120: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
c130: 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  ob)==0 ){.    ap
c140: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
c150: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  , SQLITE_AFF_TEX
c160: 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  T, encoding);.  
c170: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
c180: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
c190: 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
c1a0: 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65  led );.    MemSe
c1b0: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
c1c0: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c  MEM_Blob);.  }el
c1d0: 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c  se{.    pIn1->fl
c1e0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70  ags &= ~(MEM_Typ
c1f0: 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29  eMask&~MEM_Blob)
c200: 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
c210: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
c220: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
c230: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65  * Opcode: ToNume
c240: 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ric P1 * * * *.*
c250: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c260: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c270: 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69   P1 to be numeri
c280: 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20  c (either an.** 
c290: 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f  integer or a flo
c2a0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62  ating-point numb
c2b0: 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76  er.).** If the v
c2c0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
c2d0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
c2e0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73  vert it to an us
c2f0: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
c300: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
c310: 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74  or atof() and st
c320: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
c330: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20   conversion .** 
c340: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
c350: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c360: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c370: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c380: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c390: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e  ..*/.case OP_ToN
c3a0: 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20  umeric: {       
c3b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c3c0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45  me as TK_TO_NUME
c3d0: 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  RIC, in1 */.  if
c3e0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c3f0: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49   (MEM_Null|MEM_I
c400: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
c410: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c420: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
c430: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c440: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
c450: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
c460: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  */../* Opcode: T
c470: 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  oInt P1 * * * *.
c480: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
c490: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c4a0: 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67  r P1 be an integ
c4b0: 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76  er.  If.** The v
c4c0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
c4d0: 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c  y a real number,
c4e0: 20 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69   drop its fracti
c4f0: 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66  onal part..** If
c500: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c510: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c520: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c530: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
c540: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
c550: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
c560: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
c570: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
c580: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
c590: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c5a0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c5b0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c5c0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c5d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49  ..*/.case OP_ToI
c5e0: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
c5f0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c600: 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31  s TK_TO_INT, in1
c610: 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
c620: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c630: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
c640: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
c650: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
c660: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
c670: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c680: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
c690: 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a   ToReal P1 * * *
c6a0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
c6b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c6c0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
c6d0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
c6e0: 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65  umber..** If The
c6f0: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c700: 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20  tly an integer, 
c710: 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49  convert it..** I
c720: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
c730: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
c740: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
c750: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
c760: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c770: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
c780: 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20  nd store 0.0 if 
c790: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
c7a0: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
c7b0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
c7c0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
c7d0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
c7e0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
c7f0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c800: 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  ToReal: {       
c810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c820: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c  me as TK_TO_REAL
c830: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28  , in1 */.  if( (
c840: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c850: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
c860: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c870: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
c880: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
c890: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
c8a0: 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20  MIT_CAST */../* 
c8b0: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
c8c0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
c8d0: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
c8e0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c8f0: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
c900: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
c910: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
c920: 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a  dress P2.  .**.*
c930: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
c940: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
c950: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
c960: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
c970: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
c980: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
c990: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
c9a0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
c9b0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
c9c0: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
c9d0: 72 75 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ru if either ope
c9e0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
c9f0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ca00: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
ca10: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
ca20: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
ca30: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
ca40: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
ca50: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
ca60: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
ca70: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
ca80: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
ca90: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
caa0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
cab0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
cac0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
cad0: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
cae0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
caf0: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
cb00: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
cb10: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
cb20: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
cb30: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
cb40: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
cb50: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
cb60: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
cb70: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
cb80: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
cb90: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
cba0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
cbb0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
cbc0: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
cbd0: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
cbe0: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
cbf0: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
cc00: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
cc10: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
cc20: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
cc30: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
cc40: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
cc50: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
cc60: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
cc70: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
cc80: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
cc90: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
cca0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
ccb0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
ccc0: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
ccd0: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
cce0: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
ccf0: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
cd00: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
cd10: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
cd20: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
cd30: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
cd40: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
cd50: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
cd60: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
cd70: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
cd80: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
cd90: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
cda0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
cdb0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
cdc0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
cdd0: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
cde0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
cdf0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
ce00: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
ce10: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  If the SQLITE_ST
ce20: 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20  OREP2 bit of P5 
ce30: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20  is set, then do 
ce40: 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65  not jump.  Inste
ce50: 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62  ad,.** store a b
ce60: 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65  oolean result (e
ce70: 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f  ither 0, or 1, o
ce80: 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73  r NULL) in regis
ce90: 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ter P2..*/./* Op
cea0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
ceb0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
cec0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
ced0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
cee0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
cef0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
cf00: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
cf10: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
cf20: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
cf30: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
cf40: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Lt opcode for.*
cf50: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
cf60: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
cf70: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
cf80: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
cf90: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
cfa0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
cfb0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
cfc0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cfd0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
cfe0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
cff0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
d000: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
d010: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d020: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d030: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
d040: 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33  ode: Le P1 P2 P3
d050: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d060: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d070: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d080: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d090: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d0a0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
d0b0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
d0c0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
d0d0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
d0e0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
d0f0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
d100: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
d110: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
d120: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
d130: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
d140: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
d150: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
d160: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
d170: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
d180: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
d190: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
d1a0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
d1b0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
d1c0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d1d0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d1e0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d1f0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d200: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
d210: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
d220: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d230: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d240: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d250: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d260: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d270: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
d280: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
d290: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
d2a0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
d2b0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
d2c0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
d2d0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d2e0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
d2f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
d300: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
d310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d320: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
d330: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d340: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
d350: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d360: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
d370: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
d380: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
d390: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d3a0: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
d3b0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
d3c0: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
d3d0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d3e0: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
d3f0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
d400: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
d410: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d420: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
d430: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
d440: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
d450: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
d460: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
d470: 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  3 */.  int flags
d480: 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63  ;.  int res;.  c
d490: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 0a 0a 20  har affinity;.. 
d4a0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
d4b0: 6c 61 67 73 7c 70 49 6e 33 2d 3e 66 6c 61 67 73  lags|pIn3->flags
d4c0: 3b 0a 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d  ;..  if( flags&M
d4d0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
d4e0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
d4f0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
d500: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
d510: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
d520: 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  ** The jump is t
d530: 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49  aken if the SQLI
d540: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
d550: 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 2a 2f  t is set..    */
d560: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
d570: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
d580: 32 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 20  2 ){.      pOut 
d590: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
d5a0: 70 32 5d 3b 0a 20 20 20 20 20 20 4d 65 6d 53 65  p2];.      MemSe
d5b0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
d5c0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
d5d0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d5e0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
d5f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
d600: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
d610: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
d620: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
d630: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  1;.    }.    bre
d640: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66 66 69 6e  ak;.  }..  affin
d650: 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
d660: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
d670: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20  .  if( affinity 
d680: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
d690: 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e  nity(pIn1, affin
d6a0: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
d6b0: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
d6c0: 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79  y(pIn3, affinity
d6d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
d6e0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
d6f0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
d700: 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
d710: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d720: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
d730: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
d740: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
d750: 70 49 6e 31 29 3b 0a 20 20 45 78 70 61 6e 64 42  pIn1);.  ExpandB
d760: 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 72 65 73  lob(pIn3);.  res
d770: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
d780: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
d790: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
d7a0: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
d7b0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
d7c0: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
d7d0: 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
d7e0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d7f0: 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
d800: 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
d810: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
d820: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
d830: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
d840: 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
d850: 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
d860: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d870: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
d880: 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
d890: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
d8a0: 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72  t:       res = r
d8b0: 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
d8c0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
d8d0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
d8e0: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
d8f0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
d900: 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53 65  ->p2];.    MemSe
d910: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
d920: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
d930: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
d940: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
d950: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
d960: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
d970: 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
d980: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
d990: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d9a0: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
d9b0: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
d9c0: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
d9d0: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
d9e0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
d9f0: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
da00: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
da10: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
da20: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
da30: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
da40: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
da50: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50  _Permutation, OP
da60: 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f  _Compare,.** OP_
da70: 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75  Halt, or OP_Resu
da80: 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c  ltRow.  Typicall
da90: 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61  y the OP_Permuta
daa0: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75  tion should occu
dab0: 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  r.** immediately
dac0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
dad0: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
dae0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
daf0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
db00: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
db10: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
db20: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
db30: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
db40: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
db50: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
db60: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
db70: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
db80: 6d 70 61 72 65 20 74 6f 20 76 65 63 74 6f 72 73  mpare to vectors
db90: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
dba0: 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
dbb0: 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74 68 69 73  +P3-1) (all this
dbc0: 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61 6e 64  .** one "A") and
dbd0: 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
dbe0: 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
dbf0: 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
dc00: 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
dc10: 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
dc20: 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
dc30: 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
dc40: 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e  ** P4 is a KeyIn
dc50: 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
dc60: 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74  t defines collat
dc70: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e  ing sequences an
dc80: 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73  d sort.** orders
dc90: 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69   for the compari
dca0: 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  son.  The permut
dcb0: 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f  ation applies to
dcc0: 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e   registers.** on
dcd0: 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  ly.  The KeyInfo
dce0: 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73   elements are us
dcf0: 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e  ed sequentially.
dd00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61  .**.** The compa
dd10: 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20  rison is a sort 
dd20: 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e  comparison, so N
dd30: 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ULLs compare equ
dd40: 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65  al,.** NULLs are
dd50: 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65   less than numbe
dd60: 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20  rs, numbers are 
dd70: 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67  less than string
dd80: 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67  s,.** and string
dd90: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
dda0: 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  blobs..*/.case O
ddb0: 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69  P_Compare: {.  i
ddc0: 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
ddd0: 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70   int p1;.  int p
dde0: 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
ddf0: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
de00: 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53  int idx;.  CollS
de10: 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
de20: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
de30: 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
de40: 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74  is term */.  int
de50: 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
de60: 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
de70: 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
de80: 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  r */..  n = pOp-
de90: 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  >p3;.  pKeyInfo 
dea0: 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
deb0: 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  fo;.  assert( n>
dec0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
ded0: 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20  KeyInfo!=0 );.  
dee0: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
def0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
df00: 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p1+n<=p->nMem+1 
df10: 29 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  );.  p2 = pOp->p
df20: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e  2;.  assert( p2>
df30: 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  0 && p2+n<=p->nM
df40: 65 6d 2b 31 20 29 3b 0a 20 20 66 6f 72 28 69 3d  em+1 );.  for(i=
df50: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
df60: 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
df70: 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
df80: 20 69 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   i;.    REGISTER
df90: 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
dfa0: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  p->aMem[p1+idx])
dfb0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
dfc0: 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 70 2d  RACE(p2+idx, &p-
dfd0: 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  >aMem[p2+idx]);.
dfe0: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
dff0: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
e000: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
e010: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
e020: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
e030: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
e040: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
e050: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
e060: 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d 5b  ompare(&p->aMem[
e070: 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d 65  p1+idx], &p->aMe
e080: 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
e090: 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
e0a0: 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
e0b0: 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
e0c0: 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
e0d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e0e0: 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20  .  }.  aPermute 
e0f0: 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
e100: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
e110: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
e120: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
e130: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
e140: 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
e150: 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
e160: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
e170: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
e180: 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
e190: 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
e1a0: 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
e1b0: 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
e1c0: 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
e1d0: 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
e1e0: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
e1f0: 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
e200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
e210: 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
e220: 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70  mpare<0 ){.    p
e230: 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b  c = pOp->p1 - 1;
e240: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
e250: 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
e260: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
e270: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
e280: 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  c = pOp->p3 - 1;
e290: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e2a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
e2b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
e2c0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
e2d0: 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
e2e0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
e2f0: 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
e300: 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
e310: 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
e320: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
e330: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
e340: 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
e350: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
e360: 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
e370: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
e380: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
e390: 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
e3a0: 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
e3b0: 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
e3c0: 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
e3d0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
e3e0: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
e3f0: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
e400: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
e410: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
e420: 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
e430: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
e440: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
e450: 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
e460: 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
e470: 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
e480: 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
e490: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
e4a0: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
e4b0: 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
e4c0: 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
e4d0: 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
e4e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e500: 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
e510: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
e520: 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
e530: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e540: 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
e550: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
e560: 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
e570: 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
e580: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
e590: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
e5a0: 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
e5b0: 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
e5c0: 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
e5d0: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
e5e0: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
e5f0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e600: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
e610: 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
e620: 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
e630: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e640: 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
e650: 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
e660: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
e670: 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
e680: 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
e690: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e6a0: 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
e6b0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
e6c0: 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
e6d0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
e6e0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
e6f0: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
e700: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
e710: 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
e720: 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
e730: 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
e740: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e750: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
e760: 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
e770: 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
e780: 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
e790: 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
e7a0: 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28  3+v2];.  }.  if(
e7b0: 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65   v1==2 ){.    Me
e7c0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
e7d0: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
e7e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
e7f0: 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d  >u.i = v1;.    M
e800: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e810: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
e820: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
e830: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
e840: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
e850: 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
e860: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e870: 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
e880: 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
e890: 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
e8a0: 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
e8b0: 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
e8c0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
e8d0: 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
e8e0: 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
e8f0: 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
e900: 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e920: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
e930: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20  , in1 */.  pOut 
e940: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
e950: 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
e960: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e970: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
e980: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
e990: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
e9a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
e9b0: 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
e9c0: 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
e9d0: 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
e9e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e9f0: 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
ea00: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
ea10: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
ea20: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
ea30: 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
ea40: 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
ea50: 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
ea60: 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
ea70: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
ea80: 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
ea90: 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
eaa0: 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
eab0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
eac0: 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
ead0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
eae0: 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 20   TK_BITNOT, in1 
eaf0: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  */.  pOut = &p->
eb00: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
eb10: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
eb20: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
eb30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
eb40: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
eb50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
eb60: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
eb70: 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74  t64(pOut, ~sqlit
eb80: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
eb90: 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
eba0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ebb0: 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20  : If P1 P2 P3 * 
ebc0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
ebd0: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
ebe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
ebf0: 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c  s true.  The val
ec00: 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73  ue is.** is cons
ec10: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
ec20: 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
ec30: 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
ec40: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
ec50: 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
ec60: 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
ec70: 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f  P3 is true..*/./
ec80: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20  * Opcode: IfNot 
ec90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
eca0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
ecb0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ecc0: 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c  gister P1 is Fal
ecd0: 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  se.  The value i
ece0: 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  s.** is consider
ecf0: 65 64 20 74 72 75 65 20 69 66 20 69 74 20 68 61  ed true if it ha
ed00: 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
ed10: 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
ed20: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
ed30: 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
ed40: 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
ed50: 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63  P3 is true..*/.c
ed60: 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20  ase OP_If:      
ed70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
ed80: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20  mp, in1 */.case 
ed90: 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20  OP_IfNot: {     
eda0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
edb0: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a  in1 */.  int c;.
edc0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
edd0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
ede0: 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
edf0: 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
ee00: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
ee10: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
ee20: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
ee30: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
ee40: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
ee50: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
ee60: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
ee70: 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
ee80: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
ee90: 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
eea0: 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20    }.  if( c ){. 
eeb0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
eec0: 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
eed0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
eee0: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
eef0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
ef00: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
ef10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
ef20: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ef30: 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
ef40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ef50: 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
ef60: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  p, in1 */.  if( 
ef70: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
ef80: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
ef90: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
efa0: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
efb0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
efc0: 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20  NotNull P1 P2 * 
efd0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
efe0: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
eff0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
f000: 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
f010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
f020: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
f030: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
f040: 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
f050: 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31  1 */.  if( (pIn1
f060: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f070: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)==0 ){.    pc
f080: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
f090: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
f0a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 4e 75  /* Opcode: SetNu
f0b0: 6d 43 6f 6c 75 6d 6e 73 20 2a 20 50 32 20 2a 20  mColumns * P2 * 
f0c0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
f0d0: 70 63 6f 64 65 20 73 65 74 73 20 74 68 65 20 6e  pcode sets the n
f0e0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f0f0: 20 66 6f 72 20 74 68 65 20 63 75 72 73 6f 72 20   for the cursor 
f100: 6f 70 65 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  opened by the.**
f110: 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
f120: 75 63 74 69 6f 6e 20 74 6f 20 50 32 2e 0a 2a 2a  uction to P2..**
f130: 0a 2a 2a 20 41 6e 20 4f 50 5f 53 65 74 4e 75 6d  .** An OP_SetNum
f140: 43 6f 6c 75 6d 6e 73 20 69 73 20 6f 6e 6c 79 20  Columns is only 
f150: 75 73 65 66 75 6c 20 69 66 20 69 74 20 6f 63 63  useful if it occ
f160: 75 72 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  urs immediately 
f170: 62 65 66 6f 72 65 20 0a 2a 2a 20 6f 6e 65 20 6f  before .** one o
f180: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f190: 6f 70 63 6f 64 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  opcodes:.**.**  
f1a0: 20 20 20 4f 70 65 6e 52 65 61 64 0a 2a 2a 20 20     OpenRead.**  
f1b0: 20 20 20 4f 70 65 6e 57 72 69 74 65 0a 2a 2a 20     OpenWrite.** 
f1c0: 20 20 20 20 4f 70 65 6e 50 73 65 75 64 6f 0a 2a      OpenPseudo.*
f1d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 5f 43  *.** If the OP_C
f1e0: 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 69 73 20  olumn opcode is 
f1f0: 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 6f  to be executed o
f200: 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 6e  n a cursor, then
f210: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 20  .** this opcode 
f220: 6d 75 73 74 20 62 65 20 70 72 65 73 65 6e 74 20  must be present 
f230: 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 66 6f  immediately befo
f240: 72 65 20 74 68 65 20 6f 70 63 6f 64 65 20 74 68  re the opcode th
f250: 61 74 0a 2a 2a 20 6f 70 65 6e 73 20 74 68 65 20  at.** opens the 
f260: 63 75 72 73 6f 72 2e 0a 2a 2f 0a 23 69 66 20 30  cursor..*/.#if 0
f270: 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e 75 6d 43  .case OP_SetNumC
f280: 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62 72 65 61  olumns: {.  brea
f290: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
f2a0: 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
f2b0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
f2c0: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
f2d0: 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
f2e0: 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
f2f0: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
f300: 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
f310: 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
f320: 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
f330: 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
f340: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
f350: 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
f360: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
f370: 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
f380: 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
f390: 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
f3a0: 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
f3b0: 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
f3c0: 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
f3d0: 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
f3e0: 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
f3f0: 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
f400: 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
f410: 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
f420: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
f430: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
f440: 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
f450: 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
f460: 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
f470: 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
f480: 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
f490: 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
f4a0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
f4b0: 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
f4c0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
f4d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
f4e0: 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f  n: {.  u32 paylo
f4f0: 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d  adSize;   /* Num
f500: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
f510: 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
f520: 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  i64 payloadSize6
f530: 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  4; /* Number of 
f540: 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
f550: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  ord */.  int p1;
f560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
f570: 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  1 value of the o
f580: 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70  pcode */.  int p
f590: 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
f5a0: 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
f5b0: 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
f5c0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
f5d0: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
f5e0: 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20  ursor */.  char 
f5f0: 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a  *zRec;        /*
f600: 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70   Pointer to comp
f610: 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61  lete record-data
f620: 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
f630: 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20  pCrsr;   /* The 
f640: 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a  BTree cursor */.
f650: 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20    u32 *aType;   
f660: 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d       /* aType[i]
f670: 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72   holds the numer
f680: 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69  ic type of the i
f690: 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
f6a0: 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
f6b0: 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
f6c0: 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
f6d0: 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
f6e0: 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
f6f0: 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
f700: 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66      /* number of
f710: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
f720: 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c  ecord */.  int l
f730: 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
f740: 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
f750: 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
f760: 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
f770: 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
f780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
f790: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63  p counter */.  c
f7a0: 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20  har *zData;     
f7b0: 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65    /* Part of the
f7c0: 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
f7d0: 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  coded */.  Mem *
f7e0: 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
f7f0: 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
f800: 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
f810: 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
f820: 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
f830: 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
f840: 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
f850: 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64  ded */.  u8 *zId
f860: 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
f870: 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72  ndex into header
f880: 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64   */.  u8 *zEndHd
f890: 72 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  r;       /* Poin
f8a0: 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74  ter to first byt
f8b0: 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64  e after the head
f8c0: 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73  er */.  u32 offs
f8d0: 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66  et;        /* Of
f8e0: 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61  fset into the da
f8f0: 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73  ta */.  u64 offs
f900: 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34  et64;      /* 64
f910: 2d 62 69 74 20 6f 66 66 73 65 74 2e 20 20 36 34  -bit offset.  64
f920: 20 62 69 74 73 20 6e 65 65 64 65 64 20 74 6f 20   bits needed to 
f930: 63 61 74 63 68 20 6f 76 65 72 66 6c 6f 77 20 2a  catch overflow *
f940: 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20  /.  int szHdr;  
f950: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
f960: 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a  f the header siz
f970: 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72 74  e field at start
f980: 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20   of record */.  
f990: 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20  int avail;      
f9a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f9b0: 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
f9c0: 6c 65 20 64 61 74 61 20 2a 2f 0a 0a 0a 20 20 70  le data */...  p
f9d0: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
f9e0: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  2 = pOp->p2;.  p
f9f0: 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28  C = 0;.  memset(
fa00: 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
fa10: 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73 65 72  (sMem));.  asser
fa20: 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  t( p1<p->nCursor
fa30: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
fa40: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
fa50: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
fa60: 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65   pDest = &p->aMe
fa70: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65  m[pOp->p3];.  Me
fa80: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
fa90: 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
faa0: 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a   zRec = 0;..  /*
fab0: 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73   This block sets
fac0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61   the variable pa
fad0: 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20  yloadSize to be 
fae0: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
faf0: 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69   of.  ** bytes i
fb00: 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  n the record..  
fb10: 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20  **.  ** zRec is 
fb20: 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f  set to be the co
fb30: 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74  mplete text of t
fb40: 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
fb50: 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20  is available..  
fb60: 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** The complete 
fb70: 72 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61  record text is a
fb80: 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20  lways available 
fb90: 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  for pseudo-table
fba0: 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65  s.  ** If the re
fbb0: 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69  cord is stored i
fbc0: 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20  n a cursor, the 
fbd0: 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20  complete record 
fbe0: 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20  text.  ** might 
fbf0: 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20  be available in 
fc00: 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61  the  pC->aRow ca
fc10: 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68  che.  Or it migh
fc20: 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49  t not be..  ** I
fc30: 66 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e  f the data is un
fc40: 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63  available,  zRec
fc50: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
fc60: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c  .  **.  ** We al
fc70: 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e  so compute the n
fc80: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
fc90: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20   in the record. 
fca0: 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20   For cursors,.  
fcb0: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
fcc0: 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72   columns is stor
fcd0: 65 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75  ed in the VdbeCu
fce0: 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d  rsor.nField elem
fcf0: 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d  ent..  */.  pC =
fd00: 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20   p->apCsr[p1];. 
fd10: 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
fd20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
fd30: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fd40: 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  LE.  assert( pC-
fd50: 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20  >pVtabCursor==0 
fd60: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73  );.#endif.  pCrs
fd70: 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
fd80: 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20  .  if( pCrsr!=0 
fd90: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65  ){.    /* The re
fda0: 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69  cord is stored i
fdb0: 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20  n a B-Tree */.  
fdc0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
fdd0: 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
fde0: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
fdf0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
fe00: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
fe10: 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
fe20: 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69  .      payloadSi
fe30: 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  ze = 0;.    }els
fe40: 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53  e if( pC->cacheS
fe50: 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43  tatus==p->cacheC
fe60: 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c  tr ){.      payl
fe70: 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61  oadSize = pC->pa
fe80: 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20  yloadSize;.     
fe90: 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70   zRec = (char*)p
fea0: 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c  C->aRow;.    }el
feb0: 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64  se if( pC->isInd
fec0: 65 78 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ex ){.      sqli
fed0: 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
fee0: 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53  pCrsr, &payloadS
fef0: 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 2f 2a  ize64);.      /*
ff00: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
ff10: 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
ff20: 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
ff30: 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
ff40: 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
ff50: 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
ff60: 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
ff70: 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
ff80: 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72  .      ** larger
ff90: 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
ffa0: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
ffb0: 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
ffc0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
ffd0: 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
ffe0: 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61  ze64 );.      pa
fff0: 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
10000 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
10010 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10020 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
10030 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  aSize(pCrsr, &pa
10040 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
10050 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  }.  }else if( pC
10060 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
10070 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
10080 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65  rd is the sole e
10090 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f  ntry of a pseudo
100a0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61  -table */.    pa
100b0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
100c0 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20  nData;.    zRec 
100d0 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20  = pC->pData;.   
100e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
100f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
10100 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
10110 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
10120 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65  ec!=0 );.  }else
10130 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65  {.    /* Conside
10140 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  r the row to be 
10150 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c  NULL */.    payl
10160 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d  oadSize = 0;.  }
10170 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61  ..  /* If payloa
10180 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e  dSize is 0, then
10190 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55   just store a NU
101a0 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c  LL */.  if( payl
101b0 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20  oadSize==0 ){.  
101c0 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d    assert( pDest-
101d0 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20  >flags&MEM_Null 
101e0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  );.    goto op_c
101f0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20  olumn_out;.  }. 
10200 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c 69   assert( db->aLi
10210 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
10220 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20  _LENGTH]>=0 );. 
10230 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65   if( payloadSize
10240 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   > (u32)db->aLim
10250 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
10260 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
10270 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
10280 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d  ..  nField = pC-
10290 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65 72  >nField;.  asser
102a0 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a  t( p2<nField );.
102b0 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70  .  /* Read and p
102c0 61 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68  arse the table h
102d0 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68  eader.  Store th
102e0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
102f0 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f   parse.  ** into
10300 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
10310 65 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20  er cache fields 
10320 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20  of the cursor.. 
10330 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43   */.  aType = pC
10340 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70  ->aType;.  if( p
10350 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d  C->cacheStatus==
10360 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20  p->cacheCtr ){. 
10370 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d     aOffset = pC-
10380 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73  >aOffset;.  }els
10390 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61 54  e{.    assert(aT
103a0 79 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c 20  ype);.    avail 
103b0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66  = 0;.    pC->aOf
103c0 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d  fset = aOffset =
103d0 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b   &aType[nField];
103e0 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64  .    pC->payload
103f0 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69  Size = payloadSi
10400 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  ze;.    pC->cach
10410 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
10420 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46  heCtr;..    /* F
10430 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61  igure out how ma
10440 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20  ny bytes are in 
10450 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
10460 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20    if( zRec ){.  
10470 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63      zData = zRec
10480 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
10490 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64     if( pC->isInd
104a0 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  ex ){.        zD
104b0 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c  ata = (char*)sql
104c0 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63  ite3BtreeKeyFetc
104d0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
104e0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
104f0 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
10500 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72  char*)sqlite3Btr
10510 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73  eeDataFetch(pCrs
10520 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
10530 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20    }.      /* If 
10540 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46  KeyFetch()/DataF
10550 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74  etch() managed t
10560 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  o get the entire
10570 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20   payload,.      
10580 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c  ** save the payl
10590 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61  oad in the pC->a
105a0 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74  Row cache.  That
105b0 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72   will save us fr
105c0 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69  om.      ** havi
105d0 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74  ng to make addit
105e0 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66  ional calls to f
105f0 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74  etch the content
10600 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20   portion of.    
10610 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e    ** the record.
10620 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10630 61 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d 30  assert( avail>=0
10640 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 61   );.      if( pa
10650 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33  yloadSize <= (u3
10660 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20  2)avail ){.     
10670 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b     zRec = zData;
10680 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
10690 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a  w = (u8*)zData;.
106a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
106b0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
106c0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
106d0 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
106e0 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20  owing assert is 
106f0 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65  true in all case
10700 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20  s accept when.  
10710 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
10720 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20  e file has been 
10730 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e  corrupted extern
10740 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20  ally..    **    
10750 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20  assert( zRec!=0 
10760 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61  || avail>=payloa
10770 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d  dSize || avail>=
10780 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64  9 ); */.    szHd
10790 72 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28  r = getVarint32(
107a0 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73  (u8*)zData, offs
107b0 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b  et);..    /* Mak
107c0 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
107d0 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
107e0 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
107f0 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
10800 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f     ** Do this no
10810 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76  w to avoid an ov
10820 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c  ersize memory al
10830 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  location..    **
10840 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74  .    ** Type ent
10850 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77  ries can be betw
10860 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65  een 1 and 5 byte
10870 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61  s each.  But 4 a
10880 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a  nd 5 byte.    **
10890 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75   types use so mu
108a0 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68  ch data space th
108b0 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  at there can onl
108c0 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32  y be 4096 and 32
108d0 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c   of.    ** them,
108e0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
108f0 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68  So the maximum h
10900 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73  eader length res
10910 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20  ults from a.    
10920 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66  ** 3-byte type f
10930 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d  or each of the m
10940 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20  aximum of 32768 
10950 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72  columns plus thr
10960 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20  ee.    ** extra 
10970 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
10980 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
10990 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
109a0 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f   = 98307..    */
109b0 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20  .    if( offset 
109c0 3e 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20 20  > 98307 ){.     
109d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
109e0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
109f0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
10a00 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  out;.    }..    
10a10 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65  /* Compute in le
10a20 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
10a30 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 77 65  bytes of data we
10a40 20 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69 6e   need to read in
10a50 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f   order.    ** to
10a60 20 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70 65   get nField type
10a70 20 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65 74   values.  offset
10a80 20 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75   is an upper bou
10a90 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75 74  nd on this.  But
10aa0 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d  .    ** nField m
10ab0 69 67 68 74 20 62 65 20 73 69 67 6e 69 66 69 63  ight be signific
10ac0 61 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e 20  antly less than 
10ad0 74 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72 20  the true number 
10ae0 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a  of columns.    *
10af0 2a 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  * in the table, 
10b00 61 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73 65  and in that case
10b10 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67  , 5*nField+3 mig
10b20 68 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68  ht be smaller th
10b30 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a  an offset..    *
10b40 2a 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e  * We want to min
10b50 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64  imize len in ord
10b60 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
10b70 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f  size of the memo
10b80 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61  ry.    ** alloca
10b90 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79  tion, especially
10ba0 20 69 66 20 61 20 63 6f 72 72 75 70 74 20 64 61   if a corrupt da
10bb0 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
10bc0 63 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20 20  caused offset.  
10bd0 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72 73    ** to be overs
10be0 69 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73 20  ized. Offset is 
10bf0 6c 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30 37  limited to 98307
10c00 20 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38 33   above.  But 983
10c10 30 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20  07 might.    ** 
10c20 73 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f 62  still exceed Rob
10c30 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  son memory alloc
10c40 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20  ation limits on 
10c50 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  some configurati
10c60 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73  ons..    ** On s
10c70 79 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e 6e  ystems that cann
10c80 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72 67  ot tolerate larg
10c90 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
10ca0 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33  ions, nField*5+3
10cb0 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b  .    ** will lik
10cc0 65 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61 6c  ely be much smal
10cd0 6c 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c 64  ler since nField
10ce0 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20   will likely be 
10cf0 6c 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a  less than.    **
10d00 20 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69 73   20 or so.  This
10d10 20 69 6e 73 75 72 65 73 20 74 68 61 74 20 52 6f   insures that Ro
10d20 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  bson memory allo
10d30 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72  cation limits ar
10d40 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63  e.    ** not exc
10d50 65 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20 63  eeded even for c
10d60 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
10d70 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  files..    */.  
10d80 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35    len = nField*5
10d90 20 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c 65   + 3;.    if( le
10da0 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74 20  n > (int)offset 
10db0 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66  ) len = (int)off
10dc0 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  set;..    /* The
10dd0 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20 44   KeyFetch() or D
10de0 61 74 61 46 65 74 63 68 28 29 20 61 62 6f 76 65  ataFetch() above
10df0 20 61 72 65 20 66 61 73 74 20 61 6e 64 20 77 69   are fast and wi
10e00 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  ll get the entir
10e10 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
10e20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20 63  header in most c
10e30 61 73 65 73 2e 20 20 42 75 74 20 74 68 65 79 20  ases.  But they 
10e40 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65 74  will fail to get
10e50 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20   the complete.  
10e60 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64    ** record head
10e70 65 72 20 69 66 20 74 68 65 20 72 65 63 6f 72 64  er if the record
10e80 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f 74   header does not
10e90 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65   fit on a single
10ea0 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20   page.    ** in 
10eb0 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68 65  the B-Tree.  Whe
10ec0 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c 20  n that happens, 
10ed0 75 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d  use sqlite3VdbeM
10ee0 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74 6f  emFromBtree() to
10ef0 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65 20  .    ** acquire 
10f00 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
10f10 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f  der text..    */
10f20 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63 20 26  .    if( !zRec &
10f30 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20  & avail<len ){. 
10f40 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20       sMem.flags 
10f50 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  = 0;.      sMem.
10f60 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  db = 0;.      rc
10f70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
10f80 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
10f90 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73  , 0, len, pC->is
10fa0 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
10fb0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
10fc0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
10fd0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
10fe0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
10ff0 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
11000 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45  .z;.    }.    zE
11010 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26 7a  ndHdr = (u8 *)&z
11020 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a  Data[len];.    z
11030 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61  Idx = (u8 *)&zDa
11040 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20  ta[szHdr];..    
11050 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64  /* Scan the head
11060 65 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f  er and use it to
11070 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79   fill in the aTy
11080 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  pe[] and aOffset
11090 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73  [].    ** arrays
110a0 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c  .  aType[i] will
110b0 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70   contain the typ
110c0 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68  e integer for th
110d0 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f  e i-th.    ** co
110e0 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74  lumn and aOffset
110f0 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
11100 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
11110 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
11120 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
11130 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74  ord to the start
11140 20 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72   of the data for
11150 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   the i-th column
11160 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 66 66 73  .    */.    offs
11170 65 74 36 34 20 3d 20 6f 66 66 73 65 74 3b 0a 20  et64 = offset;. 
11180 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46     for(i=0; i<nF
11190 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ield; i++){.    
111a0 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48    if( zIdx<zEndH
111b0 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f  dr ){.        aO
111c0 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
111d0 6f 66 66 73 65 74 36 34 3b 0a 20 20 20 20 20 20  offset64;.      
111e0 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72    zIdx += getVar
111f0 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70  int32(zIdx, aTyp
11200 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f  e[i]);.        o
11210 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
11220 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
11230 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20  Len(aType[i]);. 
11240 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
11250 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c      /* If i is l
11260 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c  ess that nField,
11270 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
11280 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74  less fields in t
11290 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72  his.        ** r
112a0 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75  ecord than SetNu
112b0 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74  mColumns indicat
112c0 65 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c  ed there are col
112d0 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20  umns in the.    
112e0 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65      ** table. Se
112f0 74 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72  t the offset for
11300 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d   any extra colum
11310 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69  ns not present i
11320 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  n.        ** the
11330 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68   record to 0. Th
11340 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65  is tells code be
11350 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e  low to store a N
11360 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  ULL.        ** i
11370 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69  nstead of deseri
11380 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20  alizing a value 
11390 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
113a0 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
113b0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
113c0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
113d0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
113e0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
113f0 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61  m);.    sMem.fla
11400 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a  gs = MEM_Null;..
11410 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76      /* If we hav
11420 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64  e read more head
11430 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73  er data than was
11440 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
11450 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a  e header,.    **
11460 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
11470 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
11480 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70   appears to be p
11490 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
114a0 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  he.    ** record
114b0 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  , or if the end 
114c0 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
114d0 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
114e0 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20  before the end. 
114f0 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
11500 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69  ord (when all fi
11510 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74  elds present), t
11520 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64  hen we must be d
11530 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77  ealing .    ** w
11540 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
11550 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20  tabase..    */. 
11560 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a     if( (zIdx > z
11570 45 6e 64 48 64 72 29 7c 7c 20 28 6f 66 66 73 65  EndHdr)|| (offse
11580 74 36 34 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a  t64 > payloadSiz
11590 65 29 0a 20 20 20 20 20 7c 7c 20 28 7a 49 64 78  e).     || (zIdx
115a0 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
115b0 73 65 74 36 34 21 3d 28 75 36 34 29 70 61 79 6c  set64!=(u64)payl
115c0 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20  oadSize) ){.    
115d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
115e0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
115f0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
11600 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
11610 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f  .  /* Get the co
11620 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  lumn information
11630 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
11640 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
11650 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61  en .  ** deseria
11660 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66  lize the value f
11670 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20  rom the record. 
11680 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
11690 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65  s zero,.  ** the
116a0 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  n there are not 
116b0 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e  enough fields in
116c0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73   the record to s
116d0 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20  atisfy the.  ** 
116e0 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69  request.  In thi
116f0 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20  s case, set the 
11700 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f  value NULL or to
11710 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a   P4 if P4 is.  *
11720 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
11730 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a   Mem object..  *
11740 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b  /.  if( aOffset[
11750 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72  p2] ){.    asser
11760 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
11770 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63   );.    if( zRec
11780 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
11790 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
117a0 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a  xternal(pDest);.
117b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
117c0 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a  eSerialGet((u8 *
117d0 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70  )&zRec[aOffset[p
117e0 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20  2]], aType[p2], 
117f0 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
11800 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  e{.      len = s
11810 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11820 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32  TypeLen(aType[p2
11830 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
11840 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d  3VdbeMemMove(&sM
11850 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  em, pDest);.    
11860 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
11870 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
11880 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
11890 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e  ], len, pC->isIn
118a0 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  dex, &sMem);.   
118b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
118c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
118d0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
118e0 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
118f0 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a    zData = sMem.z
11900 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
11910 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
11920 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70  *)zData, aType[p
11930 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
11940 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63  }.    pDest->enc
11950 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d   = encoding;.  }
11960 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f  else{.    if( pO
11970 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
11980 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  M ){.      sqlit
11990 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
119a0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
119b0 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
119c0 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65  atic);.    }else
119d0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
119e0 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
119f0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20  _Null );.    }. 
11a00 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64   }..  /* If we d
11a10 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
11a20 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f  ated space to ho
11a30 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20  ld the data (in 
11a40 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
11a50 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
11a60 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74  () call above) t
11a70 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e  hen transfer con
11a80 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a  trol of that.  *
11a90 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
11aa0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
11ab0 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20  er to the pDest 
11ac0 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20  structure..  ** 
11ad0 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20  This prevents a 
11ae0 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a  memory copy..  *
11af0 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61  /.  if( sMem.zMa
11b00 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65  lloc ){.    asse
11b10 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
11b20 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
11b30 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
11b40 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
11b50 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
11b60 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
11b70 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
11b80 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e  Str)) || pDest->
11b90 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
11ba0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
11bb0 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
11bc0 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44  _Static);.    pD
11bd0 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  est->flags |= ME
11be0 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73  M_Term;.    pDes
11bf0 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  t->z = sMem.z;. 
11c00 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f     pDest->zMallo
11c10 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  c = sMem.zMalloc
11c20 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71  ;.  }..  rc = sq
11c30 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
11c40 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29  Writeable(pDest)
11c50 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
11c60 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
11c70 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
11c80 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
11c90 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
11ca0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
11cb0 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
11cc0 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
11cd0 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
11ce0 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
11cf0 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
11d00 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
11d10 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
11d20 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
11d30 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
11d40 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
11d50 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
11d60 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
11d70 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
11d80 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
11d90 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
11da0 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
11db0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
11dc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
11dd0 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20  inity: {.  char 
11de0 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
11df0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
11e00 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
11e10 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
11e20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
11e30 69 73 74 65 72 20 74 6f 20 77 68 69 63 68 20 74  ister to which t
11e40 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79  o apply affinity
11e50 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
11e60 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74  ;        /* Last
11e70 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68 69   register to whi
11e80 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ch to apply affi
11e90 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nity */.  Mem *p
11ea0 52 65 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Rec;         /* 
11eb0 43 75 72 72 65 6e 74 20 72 65 67 69 73 74 65 72  Current register
11ec0 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
11ed0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
11ee0 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65  pData0 = &p->aMe
11ef0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4c  m[pOp->p1];.  pL
11f00 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 70 4f  ast = &pData0[pO
11f10 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 66 6f 72 28  p->p2-1];.  for(
11f20 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
11f30 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
11f40 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  ){.    ExpandBlo
11f50 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70 70  b(pRec);.    app
11f60 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
11f70 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
11f80 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
11f90 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  g);.  }.  break;
11fa0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
11fb0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
11fc0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
11fd0 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
11fe0 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
11ff0 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e 67  h P1 into a sing
12000 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74  le entry.** suit
12010 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73 20  able for use as 
12020 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
12030 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
12040 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
12050 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
12060 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
12070 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72 72  e format are irr
12080 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20  elevant as long 
12090 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c  as.** the OP_Col
120a0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
120b0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
120c0 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72   later..** Refer
120d0 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20   to source code 
120e0 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  comments for the
120f0 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
12100 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74  record.** format
12110 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
12120 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
12130 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
12140 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
12150 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12160 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12170 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12180 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12190 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
121a0 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
121b0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
121c0 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
121d0 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
121e0 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
121f0 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
12200 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
12210 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
12220 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
12230 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
12240 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
12250 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
12260 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e  e affinity NONE.
12270 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
12280 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a  Record: {.  u8 *
12290 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20  zNewRecord;     
122a0 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74     /* A buffer t
122b0 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
122c0 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
122d0 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rd */.  Mem *pRe
122e0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
122f0 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * The new record
12300 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b   */.  u64 nData;
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12320 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12330 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
12340 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20  .  int nHdr;    
12350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12360 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
12370 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
12380 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20    i64 nByte;    
12390 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
123a0 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
123b0 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20  for this record 
123c0 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
123d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
123e0 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
123f0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
12400 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
12410 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20    int nVarint;  
12420 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12430 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
12440 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32   varint */.  u32
12450 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20   serial_type;   
12460 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c      /* Type fiel
12470 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74  d */.  Mem *pDat
12480 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a0;           /*
12490 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20   First field to 
124a0 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
124b0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
124c0 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20   Mem *pLast;    
124d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
124e0 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63  field of the rec
124f0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ord */.  int nFi
12500 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eld;            
12510 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
12520 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
12530 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
12540 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a  finity;       /*
12550 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74   The affinity st
12560 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63  ring for the rec
12570 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c  ord */.  int fil
12580 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20  e_format;       
12590 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74  /* File format t
125a0 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69  o use for encodi
125b0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  ng */.  int i;  
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
125d0 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
125e0 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a  zNewRecord[] */.
125f0 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
12600 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
12610 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
12620 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
12630 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
12640 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
12650 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
12660 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
12670 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
12680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12690 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126c0 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
126d0 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
126e0 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
126f0 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
12700 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
12710 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
12720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12730 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12740 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12760 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
12770 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
12780 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
12790 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
127a0 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
127b0 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
127c0 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   froth..  **.  *
127d0 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
127e0 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
127f0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
12800 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
12810 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
12820 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
12830 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
12840 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
12850 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
12860 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
12870 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
12880 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
12890 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
128a0 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
128b0 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
128c0 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
128d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
128e0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
128f0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
12900 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
12910 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12920 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
12930 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79 74 65 20  pace */.  nByte 
12940 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
12950 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
12960 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
12970 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ord */.  nZero =
12980 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
12990 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
129a0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
129b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
129c0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
129d0 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
129e0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
129f0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
12a00 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
12a10 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
12a20 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70  p->nMem+1 );.  p
12a30 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d  Data0 = &p->aMem
12a40 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
12a50 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
12a60 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
12a70 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
12a80 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
12a90 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
12aa0 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
12ab0 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
12ac0 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
12ad0 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
12ae0 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
12af0 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
12b00 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
12b10 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
12b20 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
12b30 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
12b40 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
12b50 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79     if( zAffinity
12b60 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
12b70 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
12b80 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
12b90 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
12ba0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
12bb0 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a  Rec->flags&MEM_Z
12bc0 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30  ero && pRec->n>0
12bd0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12be0 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
12bf0 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ob(pRec);.    }.
12c00 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
12c10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
12c20 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
12c30 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
12c40 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
12c50 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73  eSerialTypeLen(s
12c60 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
12c70 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
12c80 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74     nHdr += sqlit
12c90 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
12ca0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
12cb0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
12cc0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
12cd0 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a    /* Only pure z
12ce0 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73  ero-filled BLOBs
12cf0 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f   can be input to
12d00 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20   this Opcode..  
12d10 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74      ** We do not
12d20 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74   allow blobs wit
12d30 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61  h a prefix and a
12d40 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
12d50 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72  l. */.      nZer
12d60 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
12d70 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ro;.    }else if
12d80 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e  ( len ){.      n
12d90 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Zero = 0;.    }.
12da0 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68    }..  /* Add th
12db0 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72  e initial header
12dc0 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61   varint and tota
12dd0 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20  l the size */.  
12de0 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20  nHdr += nVarint 
12df0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
12e00 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20  en(nHdr);.  if( 
12e10 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
12e20 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
12e30 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20  {.    nHdr++;.  
12e40 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
12e50 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20  +nData-nZero;.  
12e60 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
12e70 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
12e80 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
12e90 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
12ea0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
12eb0 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
12ec0 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
12ed0 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
12ee0 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
12ef0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
12f00 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
12f10 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
12f20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
12f30 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
12f40 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
12f50 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
12f60 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
12f70 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
12f80 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c  beMemGrow() coul
12f90 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
12fa0 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
12fb0 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61   used)..  */.  a
12fc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
12fd0 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p1 || pOp->p
12fe0 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  3>=pOp->p1+pOp->
12ff0 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  p2 );.  pOut = &
13000 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
13010 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
13020 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
13030 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20   (int)nByte, 0) 
13040 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
13050 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
13060 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
13070 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
13080 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
13090 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
130a0 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
130b0 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d  dr);.  for(pRec=
130c0 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
130d0 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
130e0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
130f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13100 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
13110 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20  _format);.    i 
13120 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
13130 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
13140 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
13150 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
13160 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52   */.  }.  for(pR
13170 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
13180 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
13190 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74 61    /* serial data
131a0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c   */.    i += sql
131b0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
131c0 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  t(&zNewRecord[i]
131d0 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69 29  , (int)(nByte-i)
131e0 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d  , pRec,file_form
131f0 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  at);.  }.  asser
13200 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( i==nByte );..
13210 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13220 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
13230 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
13240 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
13250 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
13260 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45   = MEM_Blob | ME
13270 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78  M_Dyn;.  pOut->x
13280 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e  Del = 0;.  if( n
13290 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
132a0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
132b0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
132c0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
132d0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
132e0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
132f0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
13300 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
13310 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
13320 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
13330 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
13340 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
13350 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
13360 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13370 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
13380 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
13390 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
133a0 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
133b0 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
133c0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
133d0 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
133e0 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
133f0 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
13400 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13410 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
13420 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
13430 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
13440 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
13450 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
13460 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70  sor *pCrsr;..  p
13470 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
13480 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f  pOp->p1]->pCurso
13490 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 20 29  r;.  if( pCrsr )
134a0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
134b0 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
134c0 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
134d0 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74 72  }else{.    nEntr
134e0 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75  y = 0;.  }.  pOu
134f0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
13500 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  nt;.  pOut->u.i 
13510 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
13520 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
13530 4f 70 63 6f 64 65 3a 20 53 74 61 74 65 6d 65 6e  Opcode: Statemen
13540 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
13550 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69 6e 64 69  ** Begin an indi
13560 76 69 64 75 61 6c 20 73 74 61 74 65 6d 65 6e 74  vidual statement
13570 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
13580 63 68 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  ch is part of a 
13590 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61 6e 73 61  larger.** transa
135a0 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20  ction.  This is 
135b0 6e 65 65 64 65 64 20 73 6f 20 74 68 61 74 20 74  needed so that t
135c0 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  he statement.** 
135d0 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  can be rolled ba
135e0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
135f0 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
13600 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
13610 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
13620 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 74  saction.  The st
13630 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
13640 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  ion will automat
13650 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69 74  ically.** commit
13660 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
13670 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  alts..**.** If t
13680 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
13690 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
136a0 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  tly in autocommi
136b0 74 20 6d 6f 64 65 20 28 74 68 61 74 20 0a 2a 2a  t mode (that .**
136c0 20 69 73 20 74 6f 20 73 61 79 2c 20 69 66 20 69   is to say, if i
136d0 74 20 69 73 20 69 6e 20 62 65 74 77 65 65 6e 20  t is in between 
136e0 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d 4d 49 54  BEGIN and COMMIT
136f0 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74 68 65 72  ).** and if ther
13700 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 61  e are no other a
13710 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
13720 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74   on the same dat
13730 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
13740 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  ion, then this o
13750 70 65 72 61 74 69 6f 6e 20 69 73 20 61 20 6e 6f  peration is a no
13760 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74 65 6d 65  -op.  No stateme
13770 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
13780 2a 20 69 73 20 6e 65 65 64 65 64 20 73 69 6e 63  * is needed sinc
13790 65 20 61 6e 79 20 65 72 72 6f 72 20 63 61 6e 20  e any error can 
137a0 75 73 65 20 74 68 65 20 6e 6f 72 6d 61 6c 20 52  use the normal R
137b0 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 20  OLLBACK process 
137c0 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68 61 6e 67  to.** undo chang
137d0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 73  es..**.** If a s
137e0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
137f0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
13800 20 74 68 65 6e 20 61 20 73 74 61 74 65 6d 65 6e   then a statemen
13810 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 2a  t journal file.*
13820 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63 61  * will be alloca
13830 74 65 64 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  ted and initiali
13840 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  zed..**.** The s
13850 74 61 74 65 6d 65 6e 74 20 69 73 20 62 65 67 75  tatement is begu
13860 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
13870 65 20 66 69 6c 65 20 77 69 74 68 20 69 6e 64 65  e file with inde
13880 78 20 50 31 2e 20 20 54 68 65 20 6d 61 69 6e 0a  x P1.  The main.
13890 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
138a0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
138b0 20 30 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20   0 and the file 
138c0 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
138d0 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20 68 61 73  ry tables.** has
138e0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 31 2e 0a   an index of 1..
138f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 61 74 65  */.case OP_State
13900 6d 65 6e 74 3a 20 7b 0a 20 20 42 74 72 65 65 20  ment: {.  Btree 
13910 2a 70 42 74 3b 0a 20 20 69 66 28 20 64 62 2d 3e  *pBt;.  if( db->
13920 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
13930 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
13940 6e 74 3e 31 20 29 7b 0a 20 20 20 20 61 73 73 65  nt>1 ){.    asse
13950 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
13960 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
13970 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
13980 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
13990 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ].pBt!=0 );.    
139a0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
139b0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 20 20  p->p1].pBt;.    
139c0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
139d0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
139e0 74 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  t) );.    assert
139f0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
13a00 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  & (1<<pOp->p1))!
13a10 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  =0 );.    if( p-
13a20 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
13a30 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
13a40 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
13a50 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
13a60 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
13a70 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
13a80 3b 20 0a 20 20 20 20 20 20 70 2d 3e 69 53 74 61  ; .      p->iSta
13a90 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
13aa0 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
13ab0 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 7d 0a  tatement;.    }.
13ac0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13ad0 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
13ae0 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
13af0 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
13b00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
13b10 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
13b20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
13b30 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
13b40 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
13b50 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
13b60 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
13b70 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
13b80 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
13b90 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
13ba0 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
13bb0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
13bc0 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
13bd0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
13be0 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
13bf0 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
13c00 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
13c10 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
13c20 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
13c50 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
13c60 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
13c90 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
13ca0 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
13cb0 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
13cc0 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
13cd0 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
13ce0 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
13cf0 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
13d00 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
13d10 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
13d20 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
13d30 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
13d40 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
13d50 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
13d60 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
13d70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
13d80 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
13d90 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
13da0 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
13db0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
13dc0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
13dd0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
13de0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
13df0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
13e00 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
13e10 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
13e20 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
13e30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
13e40 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
13e50 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
13e60 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
13e70 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
13e80 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
13e90 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  b) );..  if( p1=
13ea0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
13eb0 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
13ec0 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29  writeVdbeCnt>0 )
13ed0 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77  {.      /* A new
13ee0 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f   savepoint canno
13ef0 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20  t be created if 
13f00 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
13f10 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a   write .      **
13f20 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65   statements (i.e
13f30 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74  . open read/writ
13f40 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c  e incremental bl
13f50 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20  ob handles)..   
13f60 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
13f70 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
13f80 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
13f90 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70  annot open savep
13fa0 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
13fb0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
13fc0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
13fd0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13fe0 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
13ff0 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
14000 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
14010 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20  (zName);..      
14020 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
14030 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
14040 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
14050 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
14060 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
14070 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e  of(Savepoint)+nN
14080 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66  ame+1);.      if
14090 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( pNew ){.      
140a0 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20    pNew->zName = 
140b0 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d  (char *)&pNew[1]
140c0 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79  ;.        memcpy
140d0 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  (pNew->zName, zN
140e0 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20  ame, nName+1);. 
140f0 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49     .        /* I
14100 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
14110 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  en transaction, 
14120 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61  then mark this a
14130 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20  s a special.    
14140 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74      ** "transact
14150 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20  ion savepoint". 
14160 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  */.        if( d
14170 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
14180 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
14190 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
141a0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54           db->isT
141b0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
141c0 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  int = 1;.       
141d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
141e0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
141f0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
14200 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69    .        /* Li
14210 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70  nk the new savep
14220 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61  oint into the da
14230 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20  tabase handle's 
14240 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  list. */.       
14250 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64   pNew->pNext = d
14260 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
14270 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
14280 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20  point = pNew;.  
14290 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
142a0 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
142b0 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
142c0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
142d0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
142e0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
142f0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
14300 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
14310 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
14320 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
14330 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
14340 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
14350 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
14360 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
14370 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
14380 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
14390 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
143a0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
143b0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
143c0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
143d0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
143e0 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
143f0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
14400 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
14410 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
14420 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
14430 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
14440 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
14450 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
14460 73 65 20 69 66 28 20 0a 20 20 20 20 20 20 20 20  se if( .        
14470 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
14480 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50  >0 || (p1==SAVEP
14490 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26  OINT_ROLLBACK &&
144a0 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
144b0 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20  nt>1) .    ){.  
144c0 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74      /* It is not
144d0 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c   possible to rel
144e0 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20  ease (commit) a 
144f0 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65  savepoint if the
14500 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a  re are .      **
14510 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74   active write st
14520 61 74 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20  atements. It is 
14530 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
14540 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70  rollback a savep
14550 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66  oint.      ** if
14560 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
14570 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
14580 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a   at all..      *
14590 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
145a0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
145b0 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
145c0 20 20 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61     "cannot %s sa
145d0 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74  vepoint - SQL st
145e0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
145f0 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28  ress",.        (
14600 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
14610 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61  LLBACK ? "rollba
14620 63 6b 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a  ck": "release").
14630 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
14640 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
14650 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
14660 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
14670 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
14680 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
14690 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
146a0 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
146b0 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
146c0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
146d0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
146e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
146f0 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
14700 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
14710 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
14720 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
14730 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
14740 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
14750 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
14760 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
14770 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
14780 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
14790 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
147a0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
147b0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
147c0 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
147d0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
147e0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
147f0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
14800 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
14810 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
14820 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
14830 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
14840 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
14850 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14860 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
14870 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
14880 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
14890 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
148a0 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  {.        iSavep
148b0 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
148c0 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
148d0 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
148e0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
148f0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
14900 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
14910 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
14920 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
14930 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
14940 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
14950 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
14960 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
14970 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
14980 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
14990 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
149a0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
149b0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
149c0 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53   && (db->flags&S
149d0 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
149e0 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ges)!=0 ){.     
149f0 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
14a00 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
14a10 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20  ents(db);.      
14a20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
14a30 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
14a40 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  b, 0);.        }
14a50 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
14a60 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
14a70 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
14a80 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
14a90 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
14aa0 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
14ab0 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
14ac0 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
14ad0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
14ae0 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
14af0 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
14b00 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
14b10 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
14b20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
14b30 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14b40 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
14b50 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
14b60 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
14b70 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
14b80 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
14b90 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
14ba0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
14bb0 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
14bc0 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
14bd0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
14be0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 74 6f  g operated on to
14bf0 6f 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  o */.      if( p
14c00 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
14c10 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
14c20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
14c30 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
14c40 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
14c50 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
14c60 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
14c70 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
14c80 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
14c90 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
14ca0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
14cb0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
14cc0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
14cd0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
14ce0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
14cf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14d00 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
14d10 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
14d20 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
14d30 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
14d40 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
14d50 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
14d60 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
14d70 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
14d80 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
14d90 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
14da0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
14db0 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
14dc0 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
14dd0 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
14de0 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
14df0 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
14e00 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
14e10 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
14e20 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
14e30 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
14e40 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
14e50 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
14e60 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
14e70 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
14e80 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
14e90 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
14ea0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
14eb0 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b  .  int turnOnAC;
14ec0 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
14ed0 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
14ee0 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
14ef0 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e  Op->p2;.  turnOn
14f00 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f  AC = desiredAuto
14f10 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61  Commit && !db->a
14f20 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73  utoCommit;.  ass
14f30 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
14f40 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
14f50 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
14f60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
14f70 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
14f80 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
14f90 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
14fa0 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
14fb0 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  nt>0 );  /* At l
14fc0 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
14fd0 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20   is active */.. 
14fe0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
14ff0 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   iRollback && db
15000 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
15010 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
15020 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
15030 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c  implements a ROL
15040 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20  LBACK and other 
15050 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73  VMs are.    ** s
15060 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e  till running, an
15070 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  d a transaction 
15080 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72  is active, retur
15090 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
150a0 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61  ating.    ** tha
150b0 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
150c0 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
150d0 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
150e0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
150f0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15100 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  b, "cannot rollb
15110 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
15120 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
15130 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
15140 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
15150 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
15160 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72  .  }else if( tur
15170 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
15180 61 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65  ack && db->write
15190 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20  VdbeCnt>0 ){.   
151a0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
151b0 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
151c0 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20  ts a COMMIT and 
151d0 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72  other VMs are wr
151e0 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74  iting.    ** ret
151f0 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
15200 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65  icating that the
15210 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
15220 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
15230 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
15240 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
15250 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
15260 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
15270 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
15280 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
15290 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
152a0 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
152b0 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
152c0 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
152d0 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
152e0 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
152f0 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
15300 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
15310 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
15320 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
15330 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
15340 62 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  b);.      db->au
15350 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
15360 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
15370 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15380 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
15390 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
153a0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
153b0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
153c0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
153d0 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
153e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
153f0 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
15400 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
15410 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
15420 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15430 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
15440 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
15450 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
15460 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
15470 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
15480 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
15490 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
154a0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
154b0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
154c0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
154d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
154e0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
154f0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
15500 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
15510 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  se{.    sqlite3S
15520 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
15530 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20  rMsg, db,.      
15540 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
15550 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
15560 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
15570 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
15580 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
15590 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
155a0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
155b0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
155c0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
155f0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
15600 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
15610 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
15620 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
15630 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
15640 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
15650 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20  ction P1 P2 * * 
15660 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  *.**.** Begin a 
15670 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
15680 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e  e transaction en
15690 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74  ds when a Commit
156a0 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   or Rollback.** 
156b0 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e  opcode is encoun
156c0 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e  tered.  Dependin
156d0 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46  g on the ON CONF
156e0 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68  LICT setting, th
156f0 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  e.** transaction
15700 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72   might also be r
15710 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e  olled back if an
15720 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
15730 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  tered..**.** P1 
15740 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
15750 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
15760 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
15770 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
15780 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
15790 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
157a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
157b0 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
157c0 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
157d0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
157e0 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
157f0 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
15800 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
15810 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
15820 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d  ** If P2 is non-
15830 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69  zero, then a wri
15840 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
15850 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45  s started.  A RE
15860 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a  SERVED lock is.*
15870 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  * obtained on th
15880 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
15890 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  when a write-tra
158a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
158b0 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65  ted.  No.** othe
158c0 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74  r process can st
158d0 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74  art another writ
158e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  e transaction wh
158f0 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63  ile this transac
15900 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72  tion is.** under
15910 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61  way.  Starting a
15920 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
15930 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20  on also creates 
15940 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
15950 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74  al. A.** write t
15960 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
15970 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
15980 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61  e any changes ca
15990 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65  n be made to the
159a0 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49  .** database.  I
159b0 66 20 50 32 20 69 73 20 32 20 6f 72 20 67 72 65  f P2 is 2 or gre
159c0 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43  ater then an EXC
159d0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61  LUSIVE lock is a
159e0 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20  lso obtained.** 
159f0 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a  on the file..**.
15a00 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f  ** If P2 is zero
15a10 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f  , then a read-lo
15a20 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f  ck is obtained o
15a30 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
15a40 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ile..*/.case OP_
15a50 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20  Transaction: {. 
15a60 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
15a70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
15a80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
15a90 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
15aa0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
15ab0 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29   & (1<<pOp->p1))
15ac0 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  !=0 );.  pBt = d
15ad0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
15ae0 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
15af0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
15b00 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
15b10 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
15b20 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
15b30 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
15b40 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
15b50 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
15b60 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
15b70 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
15b80 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
15b90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15ba0 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  OK && rc!=SQLITE
15bb0 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20  _READONLY /* && 
15bc0 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
15bd0 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  */ ){.      goto
15be0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15bf0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
15c00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15c10 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
15c20 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
15c30 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
15c40 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
15c50 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
15c60 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
15c70 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
15c80 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
15c90 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
15ca0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
15cb0 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
15cc0 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
15cd0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
15ce0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
15cf0 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
15d00 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
15d10 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
15d20 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
15d30 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
15d40 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
15d50 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
15d60 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
15d70 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
15d80 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
15d90 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
15da0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
15db0 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
15dc0 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
15dd0 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
15de0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
15df0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
15e00 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
15e10 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
15e20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
15e30 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
15e40 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
15e50 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
15e60 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
15e70 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
15e80 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
15e90 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
15ea0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
15eb0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
15ec0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
15ed0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15ee0 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
15ef0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
15f00 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
15f10 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20  <iDb))!=0 );..  
15f20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
15f30 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  eta(db->aDb[iDb]
15f40 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28  .pBt, iCookie, (
15f50 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
15f60 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65   pOut->u.i = iMe
15f70 74 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  ta;.  MemSetType
15f80 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
15f90 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
15fa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
15fb0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
15fc0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
15fd0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
15fe0 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65 72  gister P3 (inter
15ff0 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74  preted as an int
16000 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f  eger).** into co
16010 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
16020 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  f database P1.  
16030 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
16040 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a  ema version.  .*
16050 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64  * P2==2 is the d
16060 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20  atabase format. 
16070 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
16080 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
16090 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
160a0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
160b0 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
160c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
160d0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
160e0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
160f0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
16100 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
16110 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
16120 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
16130 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
16140 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
16150 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
16160 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  tCookie: {      
16170 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20   /* in3 */.  Db 
16180 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
16190 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
161a0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
161b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
161c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
161d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
161e0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
161f0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
16200 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
16210 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
16220 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
16230 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 73 71  ->pBt!=0 );.  sq
16240 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
16250 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
16260 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75  /* See note abou
16270 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67  t index shifting
16280 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69   on OP_ReadCooki
16290 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
162a0 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65  te3BtreeUpdateMe
162b0 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70  ta(pDb->pBt, pOp
162c0 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d  ->p2, (int)pIn3-
162d0 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70  >u.i);.  if( pOp
162e0 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45  ->p2==BTREE_SCHE
162f0 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20  MA_VERSION ){.  
16300 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63    /* When the sc
16310 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e  hema cookie chan
16320 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  ges, record the 
16330 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72  new cookie inter
16340 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62  nally */.    pDb
16350 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ->pSchema->schem
16360 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29  a_cookie = (int)
16370 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64  pIn3->u.i;.    d
16380 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
16390 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
163a0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
163b0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c  p->p2==BTREE_FIL
163c0 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
163d0 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
163e0 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
163f0 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
16400 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
16410 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33  ormat = (u8)pIn3
16420 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28  ->u.i;.  }.  if(
16430 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
16440 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
16450 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
16460 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
16470 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
16480 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
16490 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
164a0 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
164b0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
164c0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
164d0 74 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72  ts(db);.  }.  br
164e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
164f0 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20  e: VerifyCookie 
16500 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  P1 P2 *.**.** Ch
16510 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66  eck the value of
16520 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65   global database
16530 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
16540 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65  r 0 (the.** sche
16550 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20  ma version) and 
16560 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
16570 65 71 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a  equal to P2.  .*
16580 2a 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61  * P1 is the data
16590 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63  base number whic
165a0 68 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d  h is 0 for the m
165b0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
165c0 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74  e.** and 1 for t
165d0 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20  he file holding 
165e0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
165f0 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72   and some higher
16600 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61   number.** for a
16610 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
16620 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  es..**.** The co
16630 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
16640 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
16650 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
16660 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
16670 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
16680 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
16690 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
166a0 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
166b0 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
166c0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
166d0 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
166e0 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  d the schema..**
166f0 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61  .** Either a tra
16700 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
16710 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72  o have been star
16720 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65  ted or an OP_Ope
16730 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65  n needs.** to be
16740 20 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73   executed (to es
16750 74 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c  tablish a read l
16760 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73  ock) before this
16770 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e   opcode is.** in
16780 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  voked..*/.case O
16790 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20  P_VerifyCookie: 
167a0 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  {.  int iMeta;. 
167b0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 61   Btree *pBt;.  a
167c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
167d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
167e0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
167f0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
16800 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  & (1<<pOp->p1))!
16810 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
16820 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
16830 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b  Bt;.  if( pBt ){
16840 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
16850 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
16860 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
16870 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
16880 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  a);.  }else{.   
16890 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
168a0 20 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70    if( iMeta!=pOp
168b0 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p2 ){.    sqli
168c0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
168d0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
168e0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
168f0 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
16900 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
16910 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
16920 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
16930 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
16940 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
16950 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
16960 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
16970 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
16980 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
16990 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
169a0 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
169b0 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
169c0 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
169d0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
169e0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
169f0 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
16a00 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
16a10 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
16a20 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
16a30 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
16a40 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
16a50 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
16a60 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
16a70 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
16a80 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
16a90 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
16aa0 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
16ab0 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
16ac0 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
16ad0 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
16ae0 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
16af0 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
16b00 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
16b10 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
16b20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
16b30 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
16b40 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
16b50 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
16b60 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
16b70 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
16b80 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
16b90 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
16ba0 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
16bb0 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
16bc0 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
16bd0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
16be0 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
16bf0 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
16c00 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
16c10 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
16c20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
16c30 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
16c40 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
16c50 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
16c60 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
16c70 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
16c80 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
16c90 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  s(db);.    rc = 
16ca0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
16cb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16cc0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
16cd0 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
16ce0 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
16cf0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
16d00 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
16d10 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
16d20 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
16d30 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
16d40 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
16d50 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
16d60 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
16d70 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
16d80 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
16d90 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
16da0 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
16db0 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
16dc0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
16dd0 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
16de0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
16df0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
16e00 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
16e10 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
16e20 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
16e30 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
16e40 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
16e50 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
16e60 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
16e70 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
16e80 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
16e90 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
16ea0 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
16eb0 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
16ec0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
16ed0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
16ee0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
16ef0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
16f00 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
16f10 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
16f20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
16f30 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
16f40 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
16f50 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
16f60 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
16f70 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
16f80 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
16f90 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
16fa0 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
16fb0 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
16fc0 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
16fd0 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
16fe0 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
16ff0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
17000 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
17010 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
17020 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
17030 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
17040 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
17050 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
17060 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
17070 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
17080 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
17090 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
170a0 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
170b0 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
170c0 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
170d0 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
170e0 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
170f0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
17100 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
17110 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
17120 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
17130 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
17140 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
17150 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
17160 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
17170 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
17180 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
17190 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
171a0 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
171b0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
171c0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
171d0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
171e0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
171f0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
17200 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
17210 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
17220 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
17230 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
17240 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
17250 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
17260 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
17270 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
17280 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
17290 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
172a0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
172b0 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
172c0 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
172d0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
172e0 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
172f0 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
17300 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
17310 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
17320 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
17330 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
17340 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
17350 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
17360 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
17370 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
17380 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
17390 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
173a0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
173b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
173c0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
173d0 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
173e0 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
173f0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
17400 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
17410 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
17420 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
17430 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
17440 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
17450 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
17460 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
17470 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17480 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
17490 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
174a0 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
174b0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
174c0 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
174d0 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
174e0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
174f0 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
17500 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
17510 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
17520 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
17530 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
17540 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
17550 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
17560 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
17570 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
17580 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
17590 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
175a0 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
175b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
175c0 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
175d0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
175e0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
175f0 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
17600 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
17610 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
17620 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
17630 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
17640 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
17650 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
17660 2a 70 44 62 3b 0a 20 20 69 6e 74 20 66 6c 61 67  *pDb;.  int flag
17670 73 3b 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30  s;..  nField = 0
17680 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
17690 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
176a0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
176b0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
176c0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
176d0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
176e0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
176f0 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  (1<<iDb))!=0 );.
17700 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
17710 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44  [iDb];.  pX = pD
17720 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74  b->pBt;.  assert
17730 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pX!=0 );.  if(
17740 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
17750 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20  _OpenWrite ){.  
17760 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20    wrFlag = 1;.  
17770 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
17780 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
17790 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
177a0 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
177b0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
177c0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
177d0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
177e0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
177f0 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
17800 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
17810 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65  ->p5 ){.    asse
17820 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
17830 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e  assert( p2<=p->n
17840 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  Mem );.    pIn2 
17850 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a  = &p->aMem[p2];.
17860 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
17870 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
17880 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
17890 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
178a0 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
178b0 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
178c0 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
178d0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
178e0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
178f0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
17900 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
17910 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
17920 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
17930 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
17940 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
17950 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
17960 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
17970 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
17980 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
17990 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
179a0 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
179b0 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
179c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
179d0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
179e0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
179f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17a00 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
17a10 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
17a20 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
17a30 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
17a40 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79  eyInfo;.    pKey
17a50 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
17a60 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65  p->db);.    nFie
17a70 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
17a80 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65  Field+1;.  }else
17a90 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
17aa0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
17ab0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
17ac0 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
17ad0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
17ae0 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
17af0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
17b00 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
17b10 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
17b20 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
17b30 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
17b40 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
17b50 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
17b60 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
17b70 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
17b80 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
17b90 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
17ba0 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 77 69  pKeyInfo;..  swi
17bb0 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63  tch( rc ){.    c
17bc0 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 7b  ase SQLITE_OK: {
17bd0 0a 20 20 20 20 20 20 66 6c 61 67 73 20 3d 20 73  .      flags = s
17be0 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
17bf0 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b  (pCur->pCursor);
17c00 0a 0a 20 20 20 20 20 20 2f 2a 20 53 61 6e 69 74  ..      /* Sanit
17c10 79 20 63 68 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c  y checking.  Onl
17c20 79 20 74 68 65 20 6c 6f 77 65 72 20 66 6f 75 72  y the lower four
17c30 20 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61   bits of the fla
17c40 67 73 20 62 79 74 65 20 73 68 6f 75 6c 64 0a 20  gs byte should. 
17c50 20 20 20 20 20 2a 2a 20 62 65 20 75 73 65 64 2e       ** be used.
17c60 20 20 42 69 74 20 33 20 28 6d 61 73 6b 20 30 78    Bit 3 (mask 0x
17c70 30 38 29 20 69 73 20 75 6e 70 72 65 64 69 63 74  08) is unpredict
17c80 61 62 6c 65 2e 20 20 54 68 65 20 6c 6f 77 65 72  able.  The lower
17c90 20 33 20 62 69 74 73 0a 20 20 20 20 20 20 2a 2a   3 bits.      **
17ca0 20 28 6d 61 73 6b 20 30 78 30 37 29 20 73 68 6f   (mask 0x07) sho
17cb0 75 6c 64 20 62 65 20 65 69 74 68 65 72 20 35 20  uld be either 5 
17cc0 28 69 6e 74 6b 65 79 2b 6c 65 61 66 64 61 74 61  (intkey+leafdata
17cd0 20 66 6f 72 20 74 61 62 6c 65 73 29 20 6f 72 0a   for tables) or.
17ce0 20 20 20 20 20 20 2a 2a 20 32 20 28 7a 65 72 6f        ** 2 (zero
17cf0 64 61 74 61 20 66 6f 72 20 69 6e 64 69 63 65 73  data for indices
17d00 29 2e 20 20 49 66 20 74 68 65 73 65 20 63 6f 6e  ).  If these con
17d10 64 69 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  ditions are not 
17d20 6d 65 74 20 69 74 20 63 61 6e 0a 20 20 20 20 20  met it can.     
17d30 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61 6e 20 74 68   ** only mean th
17d40 61 74 20 77 65 20 61 72 65 20 64 65 61 6c 69 6e  at we are dealin
17d50 67 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  g with a corrupt
17d60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
17d70 20 20 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 20        ** Note:  
17d80 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
17d90 20 69 73 20 63 68 65 63 6b 65 64 20 61 6c 72 65   is checked alre
17da0 61 64 79 20 69 6e 20 73 71 6c 69 74 65 33 42 74  ady in sqlite3Bt
17db0 72 65 65 43 75 72 73 6f 72 28 29 2e 0a 20 20 20  reeCursor()..   
17dc0 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
17dd0 72 74 28 20 28 66 6c 61 67 73 20 26 20 30 78 66  rt( (flags & 0xf
17de0 30 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  0)==0 );.      a
17df0 73 73 65 72 74 28 20 28 66 6c 61 67 73 20 26 20  ssert( (flags & 
17e00 30 78 30 37 29 3d 3d 35 20 7c 7c 20 28 66 6c 61  0x07)==5 || (fla
17e10 67 73 20 26 20 30 78 30 37 29 3d 3d 32 20 29 3b  gs & 0x07)==2 );
17e20 0a 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  ..      pCur->is
17e30 54 61 62 6c 65 20 3d 20 28 66 6c 61 67 73 20 26  Table = (flags &
17e40 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d   BTREE_INTKEY)!=
17e50 30 20 3f 31 3a 30 3b 0a 20 20 20 20 20 20 70 43  0 ?1:0;.      pC
17e60 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 28 66  ur->isIndex = (f
17e70 6c 61 67 73 20 26 20 42 54 52 45 45 5f 5a 45 52  lags & BTREE_ZER
17e80 4f 44 41 54 41 29 21 3d 30 20 3f 31 3a 30 3b 0a  ODATA)!=0 ?1:0;.
17e90 20 20 20 20 20 20 2f 2a 20 49 66 20 50 34 3d 3d        /* If P4==
17ea0 30 20 69 74 20 6d 65 61 6e 73 20 77 65 20 61 72  0 it means we ar
17eb0 65 20 65 78 70 65 63 74 65 64 20 74 6f 20 6f 70  e expected to op
17ec0 65 6e 20 61 20 74 61 62 6c 65 2e 20 20 49 66 20  en a table.  If 
17ed0 50 34 21 3d 30 20 74 68 65 6e 0a 20 20 20 20 20  P4!=0 then.     
17ee0 20 2a 2a 20 77 65 20 65 78 70 65 63 74 20 74 6f   ** we expect to
17ef0 20 62 65 20 6f 70 65 6e 69 6e 67 20 61 6e 20 69   be opening an i
17f00 6e 64 65 78 2e 20 20 49 66 20 74 68 69 73 20 69  ndex.  If this i
17f10 73 20 6e 6f 74 20 77 68 61 74 20 68 61 70 70 65  s not what happe
17f20 6e 65 64 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ned,.      ** th
17f30 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
17f40 69 73 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20  is corrupt.     
17f50 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
17f60 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 26 26 20  Cur->isTable && 
17f70 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
17f80 4b 45 59 49 4e 46 4f 29 0a 20 20 20 20 20 20 20  KEYINFO).       
17f90 7c 7c 20 28 70 43 75 72 2d 3e 69 73 49 6e 64 65  || (pCur->isInde
17fa0 78 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65  x && pOp->p4type
17fb0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 20 29 7b  !=P4_KEYINFO) ){
17fc0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
17fd0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
17fe0 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  T;.        goto 
17ff0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18000 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
18010 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
18020 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
18030 4d 50 54 59 3a 20 7b 0a 20 20 20 20 20 20 70 43  MPTY: {.      pC
18040 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
18050 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
18060 59 49 4e 46 4f 3b 0a 20 20 20 20 20 20 70 43 75  YINFO;.      pCu
18070 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  r->isIndex = !pC
18080 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 20  ur->isTable;.   
18090 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72     pCur->pCursor
180a0 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
180b0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
180c0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
180d0 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
180e0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 21 3d      assert( rc!=
180f0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 20 20  SQLITE_BUSY );  
18100 2f 2a 20 42 75 73 79 20 63 6f 6e 64 69 74 69 6f  /* Busy conditio
18110 6e 73 20 64 65 74 65 63 74 65 64 20 65 61 72 6c  ns detected earl
18120 69 65 72 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74  ier */.      got
18130 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18140 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
18150 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18160 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
18170 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
18180 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
18190 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
181a0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
181b0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
181c0 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
181d0 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
181e0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
181f0 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
18200 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72  ad-only.  The tr
18210 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72 74 75  ansient or virtu
18220 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
18230 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
18240 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
18250 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
18260 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
18270 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18280 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s in the virtual
18290 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
182a0 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
182b0 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
182c0 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
182d0 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
182e0 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
182f0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
18300 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
18310 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
18320 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
18330 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
18340 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
18350 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  dex..**.** This 
18360 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20  opcode was once 
18370 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e  called OpenTemp.
18380 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74    But that creat
18390 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20  ed.** confusion 
183a0 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d  because the term
183b0 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d   "temp table", m
183c0 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65  ight refer eithe
183d0 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74  r.** to a TEMP t
183e0 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20  able at the SQL 
183f0 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74  level, or to a t
18400 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a  able opened by.*
18410 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
18420 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  Then this opcode
18430 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69   was call OpenVi
18440 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74  rtual.  But.** t
18450 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66  hat created conf
18460 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77  usion with the w
18470 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62  hole virtual-tab
18480 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65  le idea..*/.case
18490 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
184a0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
184b0 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63  r *pCx;.  static
184c0 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46   const int openF
184d0 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
184e0 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
184f0 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
18500 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
18510 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18520 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
18530 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
18540 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
18550 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18560 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
18570 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
18580 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p1>=0 );.  pCx 
18590 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
185a0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
185b0 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
185c0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
185d0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
185e0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
185f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18600 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c 20  eFactory(db, 0, 
18610 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  1, SQLITE_DEFAUL
18620 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a  T_TEMP_CACHE_SIZ
18630 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20  E, openFlags,.  
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e 70           &pCx->p
18660 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  Bt);.  if( rc==S
18670 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18680 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18690 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
186a0 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  >pBt, 1);.  }.  
186b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
186c0 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
186d0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
186e0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
186f0 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
18700 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
18710 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
18720 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
18730 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61 67  EE_ZERODATA flag
18740 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
18750 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
18760 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
18770 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
18780 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
18790 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
187a0 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
187b0 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
187c0 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  n INTKEY table).
187d0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
187e0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
187f0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
18800 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
18810 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
18820 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
18830 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18840 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
18850 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
18860 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29   BTREE_ZERODATA)
18870 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
18880 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18890 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
188a0 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
188b0 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  1 );.        rc 
188c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
188d0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70  rsor(pCx->pBt, p
188e0 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20  gno, 1, .       
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66           (KeyInf
18910 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43  o*)pOp->p4.z, pC
18920 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
18930 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
18940 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
18950 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70  yInfo;.        p
18960 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
18970 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
18980 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
18990 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
189a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
189b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
189c0 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
189d0 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
189e0 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
189f0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
18a00 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
18a10 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
18a20 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73  Index = !pCx->is
18a30 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
18a40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
18a50 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
18a60 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  3 * *.**.** Open
18a70 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
18a80 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
18a90 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
18aa0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
18ab0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
18ac0 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    Any attempt to
18ad0 20 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20   write a second 
18ae0 72 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75 73  row of data caus
18af0 65 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  es the.** first 
18b00 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
18b10 64 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20  d.  All data is 
18b20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65  deleted when the
18b30 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c   cursor is.** cl
18b40 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  osed..**.** A ps
18b50 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
18b60 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
18b70 65 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20  e is useful for 
18b80 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  holding the.** N
18b90 45 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73  EW or OLD tables
18ba0 20 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20   in a trigger.  
18bb0 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c  Also used to hol
18bc0 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a  d the a single.*
18bd0 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
18be0 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
18bf0 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
18c00 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
18c10 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
18c20 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
18c30 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
18c40 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  code..**.** When
18c50 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78   OP_Insert is ex
18c60 65 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74  ecuted to insert
18c70 20 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65   a row in to the
18c80 20 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a   pseudo table,.*
18c90 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
18ca0 6c 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72  le cursor may or
18cb0 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74   may not make it
18cc0 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74  's own copy of t
18cd0 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72  he.** original r
18ce0 6f 77 20 64 61 74 61 2e 20 49 66 20 50 32 20 69  ow data. If P2 i
18cf0 73 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73  s 0, then the ps
18d00 65 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20  eudo-table will 
18d10 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67  copy the.** orig
18d20 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f  inal row data. O
18d30 74 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e  therwise, a poin
18d40 74 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69  ter to the origi
18d50 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a  nal memory cell.
18d60 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e  ** is stored. In
18d70 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
18d80 76 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73  vdbe program mus
18d90 74 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  t ensure that th
18da0 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  e .** memory cel
18db0 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  l containing the
18dc0 20 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74   row data is not
18dd0 20 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74   overwritten unt
18de0 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f  il the.** pseudo
18df0 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
18e00 20 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69   (or a new row i
18e10 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
18e20 69 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  it)..**.** P3 is
18e30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
18e40 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
18e50 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
18e60 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
18e70 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
18e80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
18e90 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
18ea0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
18eb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18ec0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
18ed0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
18ee0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
18ef0 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20  , -1, 0);.  if( 
18f00 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
18f10 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
18f20 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
18f30 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 3d 20 31  >pseudoTable = 1
18f40 3b 0a 20 20 70 43 78 2d 3e 65 70 68 65 6d 50 73  ;.  pCx->ephemPs
18f50 65 75 64 6f 54 61 62 6c 65 20 3d 20 28 75 38 29  eudoTable = (u8)
18f60 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
18f70 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70  isTable = 1;.  p
18f80 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b  Cx->isIndex = 0;
18f90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18fa0 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
18fb0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
18fc0 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
18fd0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
18fe0 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
18ff0 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
19000 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
19010 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
19020 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
19030 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
19040 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
19050 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
19060 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
19070 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
19080 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
19090 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
190a0 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
190b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
190c0 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20  code: SeekGe P1 
190d0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
190e0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
190f0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
19100 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
19110 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
19120 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
19130 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
19140 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
19150 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
19160 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
19170 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
19180 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
19190 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
191a0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
191b0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
191c0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
191d0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
191e0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
191f0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
19200 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
19210 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
19220 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
19230 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
19240 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
19250 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
19260 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
19270 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
19280 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
19290 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
192a0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
192b0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
192c0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
192d0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
192e0 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20  SeekLt, SeekGt, 
192f0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
19300 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50  ode: SeekGt P1 P
19310 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
19320 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19330 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
19340 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
19350 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
19360 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
19370 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
19380 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
19390 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
193a0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
193b0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
193c0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
193d0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
193e0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
193f0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
19400 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
19410 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
19420 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
19430 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
19440 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
19450 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
19460 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
19470 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
19480 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
19490 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
194a0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
194b0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
194c0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
194d0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
194e0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
194f0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
19500 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
19510 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
19520 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20   Opcode: SeekLt 
19530 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
19540 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
19550 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
19560 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
19570 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
19580 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
19590 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
195a0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
195b0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
195c0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
195d0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
195e0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
195f0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
19600 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
19610 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
19620 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
19630 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
19640 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
19650 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
19660 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
19670 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
19680 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
19690 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
196a0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
196b0 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
196c0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
196d0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
196e0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
196f0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
19700 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
19710 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
19720 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
19730 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
19740 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31  pcode: SeekLe P1
19750 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
19760 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
19770 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
19780 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
19790 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
197a0 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
197b0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
197c0 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
197d0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
197e0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
197f0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
19800 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
19810 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
19820 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
19830 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
19840 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
19850 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
19860 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
19870 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
19880 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
19890 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
198a0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
198b0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
198c0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
198d0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
198e0 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
198f0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
19900 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
19910 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
19920 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
19930 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
19940 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
19950 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
19960 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
19970 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20  case OP_SeekLt: 
19980 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
19990 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
199a0 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20  SeekLe:         
199b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
199c0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20  case OP_SeekGe: 
199d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
199e0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
199f0 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20  SeekGt: {       
19a00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
19a10 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
19a20 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   oc;.  VdbeCurso
19a30 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65  r *pC;.  Unpacke
19a40 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74  dRecord r;.  int
19a50 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69   nField;.  i64 i
19a60 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Key;      /* The
19a70 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
19a80 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61   seek to */..  a
19a90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
19aa0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
19ab0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
19ac0 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
19ad0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
19ae0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
19af0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
19b00 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
19b10 72 21 3d 30 20 29 7b 0a 20 20 20 20 6f 63 20 3d  r!=0 ){.    oc =
19b20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
19b30 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
19b40 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  0;.    if( pC->i
19b50 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
19b60 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
19b70 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
19b80 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
19b90 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
19ba0 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62  ring,.      ** b
19bb0 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
19bc0 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
19bd0 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
19be0 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
19bf0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
19c00 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a   so covert it. *
19c10 2f 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  /.      applyNum
19c20 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
19c30 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20 3d  3);.      iKey =
19c40 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
19c50 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20  alue(pIn3);.    
19c60 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
19c70 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f  id = 0;..      /
19c80 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
19c90 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
19ca0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
19cb0 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
19cc0 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f  .      ** loss o
19cd0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  f information, t
19ce0 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63  hen special proc
19cf0 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72  essing is requir
19d00 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ed... */.      i
19d10 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
19d20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
19d30 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70 49  .        if( (pI
19d40 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
19d50 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
19d60 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
19d70 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
19d80 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
19d90 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
19da0 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
19db0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
19dc0 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
19dd0 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
19de0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70  2 */.          p
19df0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
19e00 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
19e10 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19e20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61      /* If we rea
19e30 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74  ch this point, t
19e40 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75 65  hen the P3 value
19e50 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74   must be a float
19e60 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20 70  ing.        ** p
19e70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a  oint number. */.
19e80 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
19e90 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
19ea0 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a  EM_Real)!=0 );..
19eb0 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79          if( iKey
19ec0 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
19ed0 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f   && (pIn3->r<(do
19ee0 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e  uble)iKey || pIn
19ef0 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20 20  3->r>0) ){.     
19f00 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20 76       /* The P3 v
19f10 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72 67  alue is too larg
19f20 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74  e in magnitude t
19f30 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20 61  o be expressed a
19f40 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a  s an.          *
19f50 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20  * integer. */.  
19f60 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
19f70 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
19f80 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20  In3->r<0 ){.    
19f90 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d          if( oc==
19fa0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
19fb0 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
19fd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
19fe0 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
19ff0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1a000 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a010 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1a020 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a030 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1a040 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
1a060 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1a070 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1a080 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
1a090 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a0a0 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
1a0b0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1a0c0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
1a0d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1a0e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a0f0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
1a100 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
1a110 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65            if( re
1a120 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  s ){.           
1a130 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1a140 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  1;.          }. 
1a150 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1a160 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
1a170 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1a180 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  || oc==OP_SeekGe
1a190 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1a1a0 20 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67   Use the ceiling
1a1b0 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63  () function to c
1a1c0 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74  onvert real->int
1a1d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66   */.          if
1a1e0 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75  ( pIn3->r > (dou
1a1f0 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b  ble)iKey ) iKey+
1a200 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
1a210 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  {.          /* U
1a220 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66  se the floor() f
1a230 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
1a240 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a  rt real->int */.
1a250 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1a260 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc==OP_SeekLe 
1a270 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  || oc==OP_SeekGt
1a280 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   );.          if
1a290 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75  ( pIn3->r < (dou
1a2a0 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d  ble)iKey ) iKey-
1a2b0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
1a2c0 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d     } .      rc =
1a2d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1a2e0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1a2f0 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1a300 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b  )iKey, 0, &res);
1a310 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1a320 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a330 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a340 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a350 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
1a360 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1a370 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1a380 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  d = 1;.        p
1a390 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  C->lastRowid = i
1a3a0 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Key;.      }.   
1a3b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46   }else{.      nF
1a3c0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1a3d0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1a3e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a3f0 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61  INT32 );.      a
1a400 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
1a410 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  );.      r.pKeyI
1a420 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1a430 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
1a440 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1a450 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d  ;.      if( oc==
1a460 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
1a470 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
1a480 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
1a490 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1a4a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1a4b0 20 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d         r.flags =
1a4c0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1a4d0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
1a4e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1a4f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a500 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1a510 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1a520 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1a530 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1a540 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1a550 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a560 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a570 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e      }.      pC->
1a580 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1a590 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1a5a0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1a5b0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1a5c0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1a5d0 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
1a5e0 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
1a5f0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1a600 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
1a610 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1a620 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1a630 6b 47 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  kGt ){.      if(
1a640 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1a650 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1a660 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Gt) ){.        r
1a670 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a680 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1a690 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1a6a0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a6b0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1a6c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a6d0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1a6e0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1a6f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1a700 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1a710 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1a720 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1a730 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1a740 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1a750 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1a760 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1a770 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20  P_SeekLt) ){.   
1a780 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1a790 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1a7a0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1a7b0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1a7c0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1a7d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a7e0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1a7f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1a800 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1a810 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65  e{.        /* re
1a820 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1a830 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1a840 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1a850 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1a860 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1a870 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1a880 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
1a890 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
1a8a0 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
1a8b0 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1a8c0 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1a8d0 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
1a8e0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1a8f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1a900 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1a910 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1a920 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d  ppens when attem
1a930 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68  pting to open th
1a940 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72  e sqlite3_master
1a950 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f   table.    ** fo
1a960 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72 65  r read access re
1a970 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1a980 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  TY. In this case
1a990 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74   always.    ** t
1a9a0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69  ake the jump (si
1a9b0 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f  nce there are no
1a9c0 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20   records in the 
1a9d0 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1a9e0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
1a9f0 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b  seudoTable==0 );
1aa00 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1aa10 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1aa20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1aa30 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a  : Seek P1 P2 * *
1aa40 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
1aa50 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72  n open table cur
1aa60 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20  sor and P2 is a 
1aa70 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20  rowid integer.  
1aa80 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50  Arrange.** for P
1aa90 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61  1 to move so tha
1aaa0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1aab0 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62  he rowid given b
1aac0 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  y P2..**.** This
1aad0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64   is actually a d
1aae0 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
1aaf0 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
1ab00 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
1ab10 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
1ab20 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
1ab30 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
1ab40 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
1ab50 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
1ab60 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
1ab70 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  s..*/.case OP_Se
1ab80 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20  ek: {    /* in2 
1ab90 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1aba0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
1abb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1abc0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1abd0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1abe0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1abf0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1ac00 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
1ac10 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b  ->pCursor!=0) ){
1ac20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1ac30 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1ac40 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
1ac50 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1ac60 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1ac70 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1ac80 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1ac90 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1aca0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1acb0 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
1acc0 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1acd0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1ace0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1acf0 52 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  Register P3 hold
1ad00 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1ad10 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1ad20 72 64 2e 20 20 50 31 20 69 73 20 61 6e 20 69 6e  rd.  P1 is an in
1ad30 64 65 78 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e  dex..** If an en
1ad40 74 72 79 20 74 68 61 74 20 6d 61 74 63 68 65 73  try that matches
1ad50 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1ad60 67 69 73 74 65 72 20 70 33 20 65 78 69 73 74 73  gister p3 exists
1ad70 20 69 6e 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a   in P1 then.** j
1ad80 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ump to P2.  If t
1ad90 68 65 20 50 33 20 76 61 6c 75 65 20 64 6f 65 73  he P3 value does
1ada0 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 65   not match any e
1adb0 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68  ntry in P1.** th
1adc0 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54  en fall thru.  T
1add0 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
1ade0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1adf0 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
1ae00 74 72 79 0a 2a 2a 20 69 66 20 69 74 20 65 78 69  try.** if it exi
1ae10 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sts..**.** This 
1ae20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 75  instruction is u
1ae30 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1ae40 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72   the IN operator
1ae50 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65   where the.** le
1ae60 66 74 2d 68 61 6e 64 20 73 69 64 65 20 69 73 20  ft-hand side is 
1ae70 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1ae80 6e 74 2e 20 20 50 31 20 6d 61 79 20 62 65 20 61  nt.  P1 may be a
1ae90 20 74 72 75 65 20 69 6e 64 65 78 2c 20 6f 72 20   true index, or 
1aea0 69 74 0a 2a 2a 20 6d 61 79 20 62 65 20 61 20 74  it.** may be a t
1aeb0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 74  emporary index t
1aec0 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65  hat holds the re
1aed0 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c  sults of the SEL
1aee0 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ECT.** statement
1aef0 2e 20 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  .   This instruc
1af00 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20 75 73 65  tion is also use
1af10 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
1af20 68 65 0a 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b  he.** DISTINCT k
1af30 65 79 77 6f 72 64 20 69 6e 20 53 45 4c 45 43 54  eyword in SELECT
1af40 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1af50 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1af60 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 69 6e  ion checks if in
1af70 64 65 78 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  dex P1 contains 
1af80 61 20 72 65 63 6f 72 64 20 66 6f 72 20 77 68 69  a record for whi
1af90 63 68 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  ch .** the first
1afa0 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61   N serialized va
1afb0 6c 75 65 73 20 65 78 61 63 74 6c 79 20 6d 61 74  lues exactly mat
1afc0 63 68 20 74 68 65 20 4e 20 73 65 72 69 61 6c 69  ch the N seriali
1afd0 7a 65 64 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e  zed values.** in
1afe0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6e 20 72   the record in r
1aff0 65 67 69 73 74 65 72 20 50 33 2c 20 77 68 65 72  egister P3, wher
1b000 65 20 4e 20 69 73 20 74 68 65 20 74 6f 74 61 6c  e N is the total
1b010 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
1b020 73 20 69 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72  s in.** the P3 r
1b030 65 63 6f 72 64 20 28 74 68 65 20 50 33 20 72 65  ecord (the P3 re
1b040 63 6f 72 64 20 69 73 20 61 20 70 72 65 66 69 78  cord is a prefix
1b050 20 6f 66 20 74 68 65 20 50 31 20 72 65 63 6f 72   of the P1 recor
1b060 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  d). .**.** See a
1b070 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 49  lso: NotFound, I
1b080 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45 78 69 73  sUnique, NotExis
1b090 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ts.*/./* Opcode:
1b0a0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1b0b0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  P3 * *.**.** Reg
1b0c0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1b0d0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1b0e0 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1b0f0 20 20 50 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e    P1 is.** an in
1b100 64 65 78 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72  dex.  If no entr
1b110 79 20 65 78 69 73 74 73 20 69 6e 20 50 31 20 74  y exists in P1 t
1b120 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20  hat matches the 
1b130 62 6c 6f 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  blob then jump.*
1b140 2a 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 20  * to P2.  If an 
1b150 65 6e 74 72 79 20 64 6f 65 73 20 65 78 69 73 74  entry does exist
1b160 69 6e 67 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ing, fall throug
1b170 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  h.  The cursor i
1b180 73 20 6c 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69  s left.** pointi
1b190 6e 67 20 74 6f 20 74 68 65 20 65 6e 74 72 79 20  ng to the entry 
1b1a0 74 68 61 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a  that matches..**
1b1b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1b1c0 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1b1d0 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
1b1e0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
1b1f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1b200 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
1b210 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1b220 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1b230 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1b240 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b250 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1b260 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
1b270 70 49 64 78 4b 65 79 3b 0a 20 20 63 68 61 72 20  pIdxKey;.  char 
1b280 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28  aTempRec[ROUND8(
1b290 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52  sizeof(UnpackedR
1b2a0 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66  ecord)) + sizeof
1b2b0 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 20  (Mem)*3 + 7];.. 
1b2c0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1b2d0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
1b2e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1b2f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1b300 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1b310 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1b320 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1b330 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
1b340 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a  pCursor!=0) ){..
1b350 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1b360 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1b370 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1b380 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
1b390 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20   );.    pIdxKey 
1b3a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63  = sqlite3VdbeRec
1b3b0 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1b3c0 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1b3d0 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20   pIn3->z,.      
1b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
1b410 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20  (aTempRec));.   
1b420 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
1b430 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
1b440 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
1b450 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1b460 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
1b470 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1b480 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1b490 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1b4a0 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1b4b0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1b4c0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1b4d0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1b4e0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c  , &res);.    sql
1b4f0 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e  ite3VdbeDeleteUn
1b500 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64  packedRecord(pId
1b510 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72  xKey);.    if( r
1b520 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1b530 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1b540 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1b550 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1b560 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1b570 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1b580 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1b590 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1b5a0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1b5b0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1b5c0 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1b5d0 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1b5e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1b5f0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1b600 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1b610 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1b620 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1b630 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1b640 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1b650 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1b660 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1b670 20 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68   index.  So it h
1b680 61 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69  as no data and i
1b690 74 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20  ts key consists 
1b6a0 0a 2a 2a 20 6f 66 20 61 20 72 65 63 6f 72 64 20  .** of a record 
1b6b0 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f  generated by OP_
1b6c0 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65  MakeRecord where
1b6d0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
1b6e0 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64  is the .** rowid
1b6f0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1b700 61 74 20 74 68 65 20 69 6e 64 65 78 20 72 65 66  at the index ref
1b710 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68  ers to..**.** Th
1b720 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f  e P3 register co
1b730 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65  ntains an intege
1b740 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  r record number.
1b750 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72   Call this recor
1b760 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20  d .** number R. 
1b770 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74  Register P4 is t
1b780 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65  he first in a se
1b790 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75  t of N contiguou
1b7a0 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74  s registers.** t
1b7b0 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75  hat make up an u
1b7c0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1b7d0 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  y that can be us
1b7e0 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50  ed with cursor P
1b7f0 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  1..** The value 
1b800 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65  of N can be infe
1b810 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75  rred from the cu
1b820 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73  rsor. N includes
1b830 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61   the rowid.** va
1b840 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20  lue appended to 
1b850 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
1b860 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69  ndex record. Thi
1b870 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61  s rowid value ma
1b880 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20  y.** or may not 
1b890 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52  be the same as R
1b8a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f  ..**.** If any o
1b8b0 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72  f the N register
1b8c0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1b8d0 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e   register P4 con
1b8e0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20  tains a NULL.** 
1b8f0 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1b900 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1b910 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
1b920 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1b930 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f   checks if curso
1b940 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e  r P1 contains an
1b950 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20   entry.** where 
1b960 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20  the first (N-1) 
1b970 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74  fields match but
1b980 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65   the rowid value
1b990 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
1b9a0 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  f the index entr
1b9b0 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74  y is not R. If t
1b9c0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1b9d0 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a  entry, control j
1b9e0 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72  umps.** to instr
1b9f0 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
1ba00 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20  wise, the rowid 
1ba10 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1ba20 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72  ng index.** entr
1ba30 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72  y is copied to r
1ba40 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63  egister P3 and c
1ba50 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72  ontrol falls thr
1ba60 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1ba70 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1ba80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1ba90 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
1baa0 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
1bab0 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
1bac0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1bad0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20  p, in3 */.  u16 
1bae0 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1baf0 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1bb00 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20  r *pCrsr;.  u16 
1bb10 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61  nField;.  Mem *a
1bb20 4d 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Mem;.  UnpackedR
1bb30 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20  ecord r;        
1bb40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54            /* B-T
1bb50 72 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  ree index search
1bb60 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b   key */.  i64 R;
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bb90 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20  Rowid stored in 
1bba0 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a  register P3 */..
1bbb0 20 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65    aMem = &p->aMe
1bbc0 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20  m[pOp->p4.i];.  
1bbd0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
1bbe0 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72  he values of par
1bbf0 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50  ameters P1 and P
1bc00 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20  4 are in range. 
1bc10 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1bc20 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1bc30 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
1bc40 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70  pOp->p4.i>0 && p
1bc50 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65  Op->p4.i<=p->nMe
1bc60 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
1bc70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1bc80 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1bc90 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  );..  /* Find th
1bca0 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20  e index cursor. 
1bcb0 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70  */.  pCx = p->ap
1bcc0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1bcd0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66  assert( pCx->def
1bce0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1bcf0 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73  ;.  pCx->seekRes
1bd00 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e  ult = 0;.  pCx->
1bd10 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1bd20 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72  CHE_STALE;.  pCr
1bd30 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f  sr = pCx->pCurso
1bd40 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20  r;..  /* If any 
1bd50 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  of the values ar
1bd60 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65  e NULL, take the
1bd70 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65   jump. */.  nFie
1bd80 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ld = pCx->pKeyIn
1bd90 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f  fo->nField;.  fo
1bda0 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c  r(ii=0; ii<nFiel
1bdb0 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66  d; ii++){.    if
1bdc0 28 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  ( aMem[ii].flags
1bdd0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1bde0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1bdf0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72  2 - 1;.      pCr
1be00 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72  sr = 0;.      br
1be10 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
1be20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e   assert( (aMem[n
1be30 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d  Field].flags & M
1be40 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a  EM_Null)==0 );..
1be50 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
1be60 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74  {.    /* Populat
1be70 65 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72  e the index sear
1be80 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72  ch key. */.    r
1be90 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d  .pKeyInfo = pCx-
1bea0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1beb0 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64  .nField = nField
1bec0 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67   + 1;.    r.flag
1bed0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
1bee0 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20  FIX_SEARCH;.    
1bef0 72 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a  r.aMem = aMem;..
1bf00 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74      /* Extract t
1bf10 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72  he value of R fr
1bf20 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  om register P3. 
1bf30 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
1bf40 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1bf50 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70  pIn3);.    R = p
1bf60 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f  In3->u.i;..    /
1bf70 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54  * Search the B-T
1bf80 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f  ree index. If no
1bf90 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1bfa0 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75  ord is found, ju
1bfb0 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e  mp.    ** to P2.
1bfc0 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79   Otherwise, copy
1bfd0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1bfe0 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  e conflicting re
1bff0 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72  cord to.    ** r
1c000 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66  egister P3 and f
1c010 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1c020 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1c030 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20  ion.  */.    rc 
1c040 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1c050 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1c060 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70  sr, &r, 0, 0, &p
1c070 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b  Cx->seekResult);
1c080 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67  .    if( (r.flag
1c090 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s & UNPACKED_PRE
1c0a0 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72  FIX_SEARCH) || r
1c0b0 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20  .rowid==R ){.   
1c0c0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1c0d0 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  - 1;.    }else{.
1c0e0 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20        pIn3->u.i 
1c0f0 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d  = r.rowid;.    }
1c100 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c110 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1c120 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1c130 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65   *.**.** Use the
1c140 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1c150 73 74 65 72 20 50 33 20 61 73 20 61 20 69 6e 74  ster P3 as a int
1c160 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20  eger key.  If a 
1c170 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20  record .** with 
1c180 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f  that key does no
1c190 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65  t exist in table
1c1a0 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d   of P1, then jum
1c1b0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20  p to P2. .** If 
1c1c0 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20  the record does 
1c1d0 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c  exist, then fall
1c1e0 20 74 68 72 75 2e 20 20 54 68 65 20 63 75 72 73   thru.  The curs
1c1f0 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70  or is left .** p
1c200 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72  ointing to the r
1c210 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73  ecord if it exis
1c220 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69  ts..**.** The di
1c230 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1c240 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   this operation 
1c250 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20  and NotFound is 
1c260 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65  that this.** ope
1c270 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74  ration assumes t
1c280 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74  he key is an int
1c290 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31  eger and that P1
1c2a0 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72   is a table wher
1c2b0 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20  eas.** NotFound 
1c2c0 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61  assumes key is a
1c2d0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1c2e0 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72  d from MakeRecor
1c2f0 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61  d and.** P1 is a
1c300 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53  n index..**.** S
1c310 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1c320 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
1c330 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1c340 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
1c350 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1c360 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1c370 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1c380 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1c390 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
1c3a0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1c3b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1c3c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c3d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c3e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c3f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c400 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c410 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1c420 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1c430 6c 65 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  le );.  pCrsr = 
1c440 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
1c450 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
1c460 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1c470 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
1c480 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1c490 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1c4a0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
1c4b0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1c4c0 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1c4d0 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  d = pIn3->u.i;. 
1c4e0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1c4f0 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1c500 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  0;.    pC->nullR
1c510 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  ow = 0;.    pC->
1c520 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1c530 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70  CHE_STALE;.    p
1c540 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1c550 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  o = 0;.    if( r
1c560 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es!=0 ){.      p
1c570 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c580 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1c590 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1c5a0 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  =0 );.    }.    
1c5b0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1c5c0 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   res;.  }else{. 
1c5d0 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1c5e0 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d  ns when an attem
1c5f0 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61  pt to open a rea
1c600 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20  d cursor on the 
1c610 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d  .    ** sqlite_m
1c620 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75  aster table retu
1c630 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
1c640 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1c650 65 72 74 28 20 21 70 43 2d 3e 70 73 65 75 64 6f  ert( !pC->pseudo
1c660 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73  Table );.    ass
1c670 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1c680 20 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   );.    pc = pOp
1c690 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1c6a0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1c6b0 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1c6c0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1c6d0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
1c6e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c6f0 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1c700 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20   * *.**.** Find 
1c710 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
1c720 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
1c730 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
1c740 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
1c750 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
1c760 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1c770 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
1c780 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
1c790 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
1c7a0 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
1c7b0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
1c7c0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
1c7d0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
1c7e0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
1c7f0 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
1c800 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1c810 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1c820 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1c830 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c840 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  1]!=0 );.  pOut-
1c850 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
1c860 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
1c870 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79  nt++;.  MemSetTy
1c880 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
1c890 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
1c8a0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1c8b0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1c8c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
1c8d0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1c8e0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1c8f0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1c900 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1c910 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1c920 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1c930 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1c940 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1c950 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1c960 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1c970 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1c980 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1c990 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1c9a0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1c9b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1c9c0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1c9d0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1c9e0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c  that holds the l
1c9f0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
1ca00 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  y.** generated r
1ca10 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e  ecord number.  N
1ca20 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
1ca30 62 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  bers are allowed
1ca40 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74   to be less.** t
1ca50 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
1ca60 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
1ca70 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
1ca80 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46  imum, a SQLITE_F
1ca90 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  ULL.** error is 
1caa0 67 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20  generated.  The 
1cab0 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
1cac0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
1cad0 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63  generated.** rec
1cae0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  ord number.  Thi
1caf0 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
1cb00 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
1cb10 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1cb20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
1cb30 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
1cb40 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
1cb50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1cb60 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1cb70 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
1cb80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
1cb90 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
1cba0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1cbb0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
1cbc0 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
1cbd0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1cbe0 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1cbf0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1cc00 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
1cc10 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1cc20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
1cc30 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1cc40 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
1cc50 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
1cc60 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
1cc70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1cc80 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1cc90 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
1cca0 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
1ccb0 54 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  T */..  v = 0;. 
1ccc0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
1ccd0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1cce0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ccf0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1cd00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1cd10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1cd20 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  0 );.  if( NEVER
1cd30 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29  (pC->pCursor==0)
1cd40 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a   ){.    /* The z
1cd50 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ero initializati
1cd60 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20  on above is all 
1cd70 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a  that is needed *
1cd80 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  /.  }else{.    /
1cd90 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
1cda0 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
1cdb0 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
1cdc0 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
1cdd0 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
1cde0 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
1cdf0 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
1ce00 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
1ce10 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
1ce20 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
1ce30 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1ce40 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
1ce50 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
1ce60 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
1ce70 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1ce80 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
1ce90 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
1cea0 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
1ceb0 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
1cec0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1ced0 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
1cee0 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
1cef0 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
1cf00 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
1cf10 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
1cf20 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
1cf30 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
1cf40 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
1cf50 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
1cf60 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
1cf70 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
1cf80 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
1cf90 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
1cfa0 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
1cfb0 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
1cfc0 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
1cfd0 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
1cfe0 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
1cff0 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
1d000 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1d010 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1d020 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66  cnt = 0;..#ifdef
1d030 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
1d040 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
1d050 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
1d060 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
1d070 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
1d080 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
1d090 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
1d0a0 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
1d0b0 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
1d0c0 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
1d0d0 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
1d0e0 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
1d0f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1d100 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
1d110 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
1d120 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
1d130 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
1d140 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
1d150 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1d160 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
1d170 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
1d180 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
1d190 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
1d1a0 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
1d1b0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
1d1c0 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
1d1d0 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64 52  3BtreeGetCachedR
1d1e0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
1d1f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d  );.      if( v==
1d200 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
1d210 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
1d220 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1d230 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1d240 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d250 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
1d260 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d270 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
1d280 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73  .        if( res
1d290 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1d2a0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
1d2b0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  se{.          sq
1d2c0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1d2d0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
1d2e0 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  v);.          if
1d2f0 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v==MAX_ROWID )
1d300 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43  {.            pC
1d310 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1d320 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
1d330 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1d340 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20     v++;.        
1d350 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1d360 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
1d370 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
1d380 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69  NCREMENT.      i
1d390 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1d3a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1d3b0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
1d3c0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f  p3<=p->nMem ); /
1d3d0 2a 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  * P3 is a valid 
1d3e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20  memory cell */. 
1d3f0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
1d400 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
1d410 0a 09 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ..REGISTER_TRACE
1d420 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
1d430 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1d440 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1d450 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  y(pMem);.       
1d460 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
1d470 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1d480 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
1d490 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
1d4a0 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ger */.        i
1d4b0 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
1d4c0 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
1d4d0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1d4e0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1d4f0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20  SQLITE_FULL;.   
1d500 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1d510 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d520 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d530 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
1d540 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i+1 ){.         
1d550 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
1d560 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
1d570 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
1d580 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = v;.      }.#en
1d590 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  dif..      sqlit
1d5a0 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
1d5b0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1d5c0 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f  r, v<MAX_ROWID ?
1d5d0 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d   v+1 : 0);.    }
1d5e0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
1d5f0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1d600 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1d610 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
1d620 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
1d630 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
1d640 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
1d670 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
1d680 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  le. */.      v =
1d690 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
1d6a0 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
1d6b0 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
1d6c0 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28   if( cnt==0 && (
1d6d0 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29  v&0xffffff)==v )
1d6e0 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
1d6f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1d700 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1d710 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
1d720 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
1d730 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1d740 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66 66   ) v &= 0xffffff
1d750 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1d760 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d770 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1d780 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1d790 20 30 2c 20 28 75 36 34 29 76 2c 20 30 2c 20 26   0, (u64)v, 0, &
1d7a0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1d7b0 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1d7c0 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 63  e( cnt<100 && rc
1d7d0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1d7e0 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  es==0 );.      i
1d7f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1d800 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
1d810 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1d820 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20  E_FULL;.        
1d830 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d840 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1d850 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
1d860 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1d870 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1d880 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1d890 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1d8a0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1d8b0 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
1d8c0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
1d8d0 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  nt);.  pOut->u.i
1d8e0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
1d8f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
1d900 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
1d910 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  P5.**.** Write a
1d920 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
1d930 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
1d940 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
1d950 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
1d960 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
1d970 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
1d980 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
1d990 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
1d9a0 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
1d9b0 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
1d9c0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 72  e value stored r
1d9d0 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
1d9e0 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
1d9f0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1da00 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
1da10 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e  must.** be an in
1da20 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  teger..**.** If 
1da30 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1da40 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
1da50 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1da60 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1da70 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1da80 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1da90 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
1daa0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
1dab0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
1dac0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
1dad0 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
1dae0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
1daf0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
1db00 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1db10 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
1db20 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
1db30 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
1db40 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
1db50 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69   point to a stri
1db60 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
1db70 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72  e table-name, or
1db80 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  .** may be NULL.
1db90 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
1dba0 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
1dbb0 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71  ate-hook .** (sq
1dbc0 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
1dbd0 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
1dbe0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
1dbf0 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
1dc00 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
1dc10 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
1dc20 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
1dc30 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
1dc40 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
1dc50 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
1dc60 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
1dc70 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
1dc80 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
1dc90 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
1dca0 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
1dcb0 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
1dcc0 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
1dcd0 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
1dce0 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
1dcf0 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
1dd00 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
1dd10 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
1dd20 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
1dd30 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1dd40 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
1dd50 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
1dd60 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
1dd70 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
1dd80 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
1dd90 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
1dda0 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20  Insert: {.  Mem 
1ddb0 2a 70 44 61 74 61 3b 0a 20 20 4d 65 6d 20 2a 70  *pData;.  Mem *p
1ddc0 4b 65 79 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  Key;.  i64 iKey;
1ddd0 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
1dde0 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
1ddf0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
1de00 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
1de10 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1de20 3b 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20  ;.  int nZero;. 
1de30 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
1de40 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1de50 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
1de60 20 2a 7a 54 62 6c 3b 0a 20 20 69 6e 74 20 6f 70   *zTbl;.  int op
1de70 3b 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 70 2d  ;..  pData = &p-
1de80 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1de90 20 20 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65    pKey = &p->aMe
1dea0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1deb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1dec0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ded0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1dee0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1def0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1df00 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1df10 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1df20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  || pC->pseudoTab
1df30 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
1df40 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
1df50 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
1df60 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1df70 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1df80 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
1df90 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  a);.  REGISTER_T
1dfa0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
1dfb0 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 70  ey);..  iKey = p
1dfc0 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  Key->u.i;.  if( 
1dfd0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1dfe0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1dff0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
1e000 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1e010 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
1e020 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b 65 79  lastRowid = pKey
1e030 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 44 61  ->u.i;.  if( pDa
1e040 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1e050 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
1e060 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
1e070 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
1e080 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1e090 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1e0a0 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
1e0b0 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  r) );.  }.  if( 
1e0c0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
1e0d0 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  ){.    if( !pC->
1e0e0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1e0f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1e100 33 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d 3e  3DbFree(db, pC->
1e110 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20  pData);.    }.  
1e120 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65    pC->iKey = iKe
1e130 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74 61  y;.    pC->nData
1e140 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20   = pData->n;.   
1e150 20 69 66 28 20 70 43 2d 3e 65 70 68 65 6d 50 73   if( pC->ephemPs
1e160 65 75 64 6f 54 61 62 6c 65 20 7c 7c 20 70 44 61  eudoTable || pDa
1e170 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e 7a 4d  ta->z==pData->zM
1e180 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 70  alloc ){.      p
1e190 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74 61  C->pData = pData
1e1a0 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20 21  ->z;.      if( !
1e1b0 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54  pC->ephemPseudoT
1e1c0 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20  able ){.        
1e1d0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20  pData->flags &= 
1e1e0 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20  ~MEM_Dyn;.      
1e1f0 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c    pData->flags |
1e200 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20  = MEM_Ephem;.   
1e210 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c       pData->zMal
1e220 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  loc = 0;.      }
1e230 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1e240 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73 71    pC->pData = sq
1e250 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d  lite3Malloc( pC-
1e260 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20  >nData+2 );.    
1e270 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74 61    if( !pC->pData
1e280 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1e290 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43 2d        memcpy(pC-
1e2a0 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a  >pData, pData->z
1e2b0 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20  , pC->nData);.  
1e2c0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1e2d0 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20  ->nData] = 0;.  
1e2e0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1e2f0 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a  ->nData+1] = 0;.
1e300 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75      }.    pC->nu
1e310 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c  llRow = 0;.  }el
1e320 73 65 7b 0a 20 20 20 20 73 65 65 6b 52 65 73 75  se{.    seekResu
1e330 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
1e340 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
1e350 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
1e360 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
1e370 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1e380 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1e390 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  .      nZero = p
1e3a0 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
1e3b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e3c0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d  nZero = 0;.    }
1e3d0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1e3e0 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1e3f0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1e400 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1e410 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
1e420 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
1e430 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1e450 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
1e460 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
1e490 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73  OPFLAG_APPEND, s
1e4a0 65 65 6b 52 65 73 75 6c 74 0a 20 20 20 20 29 3b  eekResult.    );
1e4b0 0a 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f  .  }.  .  pC->ro
1e4c0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1e4d0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1e4e0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1e4f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1e500 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
1e510 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
1e520 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
1e530 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
1e540 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
1e550 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1e560 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
1e570 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
1e580 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1e590 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
1e5a0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
1e5b0 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
1e5c0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
1e5d0 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
1e5e0 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
1e5f0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1e600 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1e610 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
1e620 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
1e630 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
1e640 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
1e650 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
1e660 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
1e670 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e680 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
1e690 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
1e6a0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
1e6b0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
1e6c0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
1e6d0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
1e6e0 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
1e6f0 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
1e700 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
1e710 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
1e720 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
1e730 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
1e740 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
1e750 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
1e760 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
1e770 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
1e780 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
1e790 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
1e7a0 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
1e7b0 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
1e7c0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
1e7d0 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
1e7e0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
1e7f0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
1e800 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
1e810 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
1e820 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
1e830 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
1e840 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
1e850 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
1e860 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
1e870 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
1e880 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
1e890 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
1e8a0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1e8b0 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ULL, then it is 
1e8c0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1e8d0 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73  table that P1 is
1e8e0 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  .** pointing to.
1e8f0 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f    The update hoo
1e900 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1e910 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  d, if it exists.
1e920 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
1e930 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50   NULL then the P
1e940 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  1 cursor must ha
1e950 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
1e960 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e  ed.** using OP_N
1e970 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
1e980 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
1e990 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
1e9a0 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36  P_Delete: {.  i6
1e9b0 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75  4 iKey;.  VdbeCu
1e9c0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65  rsor *pC;..  iKe
1e9d0 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  y = 0;.  assert(
1e9e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1e9f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1ea00 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ea10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ea20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ea30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ea40 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
1ea50 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
1ea60 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
1ea70 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
1ea80 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
1ea90 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
1eaa0 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69  e invoked, set i
1eab0 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64  Key to the rowid
1eac0 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77   of the.  ** row
1ead0 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a   being deleted..
1eae0 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
1eaf0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
1eb00 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
1eb10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1eb20 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73  sTable );.    as
1eb30 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1eb40 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61  sValid );  /* la
1eb50 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20 70  stRowid set by p
1eb60 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f  revious OP_NotFo
1eb70 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20  und */.    iKey 
1eb80 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
1eb90 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  .  }..  /* The O
1eba0 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20  P_Delete opcode 
1ebb0 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61  always follows a
1ebc0 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  n OP_NotExists o
1ebd0 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a  r OP_Last or.  *
1ebe0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74  * OP_Column on t
1ebf0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69  he same table wi
1ec00 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76  thout any interv
1ec10 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73  ening operations
1ec20 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74   that.  ** might
1ec30 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64   move or invalid
1ec40 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ate the cursor. 
1ec50 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43   Hence cursor pC
1ec60 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74   is always point
1ec70 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ing.  ** to the 
1ec80 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
1ec90 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
1eca0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
1ecb0 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20  o() operation.  
1ecc0 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61  ** below is alwa
1ecd0 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ys a no-op and c
1ece0 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20  annot fail.  We 
1ecf0 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68  will run it anyh
1ed00 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a  ow, though,.  **
1ed10 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73   to guard agains
1ed20 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73  t future changes
1ed30 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e   to the code gen
1ed40 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20  erator..  **/.  
1ed50 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
1ed60 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1ed70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1ed80 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ed90 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
1eda0 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
1edb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1edc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71  _to_error;..  sq
1edd0 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1ede0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1edf0 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d  rsor, 0);.  rc =
1ee00 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
1ee10 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
1ee20 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1ee30 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1ee40 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
1ee50 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1ee60 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
1ee70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1ee80 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
1ee90 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1eea0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63  p->p4.z ){.    c
1eeb0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
1eec0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1eed0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e  ].zName;.    con
1eee0 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20  st char *zTbl = 
1eef0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64  pOp->p4.z;.    d
1ef00 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1ef10 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
1ef20 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
1ef30 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
1ef40 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
1ef50 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1ef60 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  }.  if( pOp->p2 
1ef70 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1ef80 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1ef90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1efa0 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
1efb0 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  nt P1 * *.**.** 
1efc0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 73 65  This opcode rese
1efd0 74 73 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  ts the VMs inter
1efe0 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
1eff0 65 72 20 74 6f 20 30 2e 20 49 66 20 50 31 20 69  er to 0. If P1 i
1f000 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20  s true,.** then 
1f010 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f020 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1f030 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
1f040 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1f050 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
1f060 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
1f070 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
1f080 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
1f090 67 65 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65  ges()).** before
1f0a0 20 69 74 20 69 73 20 72 65 73 65 74 2e 20 54 68   it is reset. Th
1f0b0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
1f0c0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
1f0d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
1f0e0 43 6f 75 6e 74 3a 20 7b 0a 20 20 69 66 28 20 70  Count: {.  if( p
1f0f0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
1f100 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
1f110 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
1f120 67 65 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43  ge);.  }.  p->nC
1f130 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
1f140 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1f150 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
1f160 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1f170 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1f180 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1f190 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
1f1a0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1f1b0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1f1c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1f1d0 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
1f1e0 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
1f1f0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
1f200 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1f210 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1f220 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1f230 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1f240 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1f250 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1f260 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1f270 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1f280 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1f290 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1f2a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
1f2b0 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
1f2c0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
1f2d0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
1f2e0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b  e complete row k
1f2f0 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ey for cursor P1
1f300 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
1f310 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
1f320 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
1f330 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70  * The key is cop
1f340 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20  ied onto the P3 
1f350 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
1f360 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
1f370 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
1f380 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1f390 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
1f3a0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
1f3b0 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
1f3c0 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
1f3d0 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
1f3e0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1f3f0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1f400 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73  e OP_RowKey:.cas
1f410 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
1f420 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f430 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1f440 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20  rsr;.  u32 n;.  
1f450 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74  i64 n64;..  pOut
1f460 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1f470 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  >p2];..  /* Note
1f480 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
1f490 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
1f4a0 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
1f4b0 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
1f4c0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1f4d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f4e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f4f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f500 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f510 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f520 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
1f530 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20  ==OP_RowKey );. 
1f540 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
1f550 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
1f560 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
1f570 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
1f580 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f590 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
1f5a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f5b0 70 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29  pseudoTable==0 )
1f5c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f5d0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1f5e0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1f5f0 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
1f600 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
1f610 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
1f620 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
1f630 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
1f640 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
1f650 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
1f660 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
1f670 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
1f680 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
1f690 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
1f6a0 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nce the followin
1f6b0 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  g sqlite3VdbeCur
1f6c0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
1f6d0 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   is always.  ** 
1f6e0 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20  a no-op and can 
1f6f0 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74  never fail.  But
1f700 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20   we leave it in 
1f710 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74  place as a safet
1f720 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  y..  */.  assert
1f730 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
1f740 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
1f750 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
1f760 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
1f770 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
1f780 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
1f790 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f7a0 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ror;..  if( pC->
1f7b0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61  isIndex ){.    a
1f7c0 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
1f7d0 62 6c 65 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ble );.    sqlit
1f7e0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1f7f0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
1f800 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
1f810 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
1f820 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
1f830 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
1f840 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
1f850 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
1f860 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1f870 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
1f880 20 26 6e 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e   &n);.    if( n>
1f890 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
1f8a0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
1f8b0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
1f8c0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
1f8d0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
1f8e0 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
1f8f0 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
1f900 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
1f910 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
1f920 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
1f930 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
1f940 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
1f950 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
1f960 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1f970 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
1f980 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
1f990 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1f9a0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
1f9b0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
1f9c0 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
1f9d0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
1f9e0 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
1f9f0 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
1fa00 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
1fa10 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1fa20 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
1fa30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1fa40 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
1fa50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
1fa60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
1fa70 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
1fa80 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
1fa90 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
1faa0 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
1fab0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
1fac0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
1fad0 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
1fae0 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
1faf0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
1fb00 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
1fb10 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
1fb20 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
1fb30 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
1fb40 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
1fb50 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
1fb60 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
1fb70 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
1fb80 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
1fb90 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1fba0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1fbb0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
1fbc0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1fbd0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
1fbe0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
1fbf0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
1fc00 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
1fc10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fc20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fc30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fc40 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1fc50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1fc60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1fc70 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
1fc80 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69  .    /* Do nothi
1fc90 6e 67 20 73 6f 20 74 68 61 74 20 72 65 67 5b 50  ng so that reg[P
1fca0 32 5d 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 20  2] remains NULL 
1fcb0 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  */.    break;.  
1fcc0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
1fcd0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
1fce0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
1fcf0 74 6f 54 61 72 67 65 74 3b 0a 20 20 7d 65 6c 73  toTarget;.  }els
1fd00 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f  e if( pC->pseudo
1fd10 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d  Table ){.    v =
1fd20 20 70 43 2d 3e 69 4b 65 79 3b 0a 23 69 66 6e 64   pC->iKey;.#ifnd
1fd30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1fd40 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65  IRTUALTABLE.  }e
1fd50 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61  lse if( pC->pVta
1fd60 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70  bCursor ){.    p
1fd70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62  Vtab = pC->pVtab
1fd80 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
1fd90 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
1fda0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
1fdb0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
1fdc0 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
1fdd0 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
1fde0 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
1fdf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
1fe00 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  use;.    rc = pM
1fe10 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
1fe20 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
1fe30 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  v);.    sqlite3D
1fe40 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
1fe50 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
1fe60 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
1fe70 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61  ErrMsg;.    pVta
1fe80 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
1fe90 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
1fea0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
1feb0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1fec0 6d 69 73 75 73 65 3b 0a 23 65 6e 64 69 66 20 2f  misuse;.#endif /
1fed0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
1fee0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20  RTUALTABLE */.  
1fef0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
1ff00 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1ff10 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
1ff20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1ff30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ff40 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
1ff50 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
1ff60 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
1ff70 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
1ff80 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
1ff90 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1ffa0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1ffb0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
1ffc0 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
1ffd0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
1ffe0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 4d 65 6d 53  >u.i = v;.  MemS
1fff0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
20000 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
20010 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20020 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
20030 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
20040 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
20050 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
20060 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
20070 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
20080 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
20090 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
200a0 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
200b0 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
200c0 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
200d0 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
200e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
200f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20100 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20110 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20120 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20130 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20140 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
20150 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
20160 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20170 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  = 0;.  if( pC->p
20180 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71  Cursor ){.    sq
20190 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43  lite3BtreeClearC
201a0 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
201b0 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
201c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .}../* Opcode: L
201d0 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
201e0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
201f0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
20200 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
20210 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
20220 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
20230 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
20240 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
20250 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
20260 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
20270 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
20280 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
20290 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
202a0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
202b0 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
202c0 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
202d0 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
202e0 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
202f0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
20300 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
20310 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73  ..*/.case OP_Las
20320 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
20330 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
20340 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
20350 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
20360 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
20370 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
20380 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
20390 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
203a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
203b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
203c0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
203d0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
203e0 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20  pCrsr==0 ){.    
203f0 72 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  res = 1;.  }else
20400 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
20410 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
20420 72 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20  r, &res);.  }.  
20430 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
20440 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
20450 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20460 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
20470 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
20480 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20490 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
204a0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65 73  pOp->p2>0 && res
204b0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
204c0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
204d0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
204e0 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
204f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
20500 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
20510 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
20520 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
20530 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
20540 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
20550 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
20560 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
20570 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
20580 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
20590 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
205a0 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
205b0 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
205c0 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
205d0 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
205e0 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
205f0 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
20600 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
20610 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
20620 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
20630 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
20640 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
20650 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
20660 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
20670 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
20680 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
20690 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
206a0 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
206b0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
206c0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
206d0 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
206e0 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
206f0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
20700 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
20710 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53  jump */.#ifdef S
20720 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
20730 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b  ite3_sort_count+
20740 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  +;.  sqlite3_sea
20750 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e  rch_count--;.#en
20760 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65  dif.  p->aCounte
20770 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
20780 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20  TUS_SORT-1]++;. 
20790 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
207a0 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
207b0 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
207c0 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
207d0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
207e0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
207f0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
20800 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
20810 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
20820 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
20830 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
20840 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
20850 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
20860 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
20870 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
20880 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
20890 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
208a0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
208b0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
208c0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
208d0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
208e0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
208f0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
20900 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
20910 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20  _Rewind: {      
20920 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
20930 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
20940 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
20950 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
20960 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20970 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20980 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20990 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
209a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
209b0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  pC!=0 );.  if( (
209c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
209d0 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72  sor)!=0 ){.    r
209e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
209f0 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
20a00 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69  s);.    pC->atFi
20a10 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  rst = res==0 ?1:
20a20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
20a30 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20a40 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
20a50 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20a60 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
20a70 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 65  sValid = 0;.  }e
20a80 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31  lse{.    res = 1
20a90 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
20aa0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
20ab0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
20ac0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
20ad0 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65  >nOp );.  if( re
20ae0 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
20af0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
20b00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
20b10 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
20b20 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
20b30 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
20b40 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
20b50 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
20b60 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
20b70 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
20b80 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
20b90 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
20ba0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
20bb0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
20bc0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
20bd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
20be0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
20bf0 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
20c00 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
20c10 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
20c20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
20c30 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
20c40 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
20c50 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
20c60 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
20c70 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a  also: Prev.*/./*
20c80 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
20c90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
20ca0 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
20cb0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
20cc0 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
20cd0 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
20ce0 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
20cf0 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
20d00 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
20d10 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
20d20 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
20d30 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
20d40 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
20d50 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
20d60 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
20d70 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
20d80 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
20d90 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
20da0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
20db0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
20dc0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
20dd0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
20de0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
20df0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
20e00 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
20e10 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
20e20 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
20e30 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
20e40 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
20e50 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46   res;..  CHECK_F
20e60 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
20e70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20e80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20e90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20ea0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20eb0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d  >p1];.  if( pC==
20ec0 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20  0 ){.    break; 
20ed0 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23   /* See ticket #
20ee0 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43  2273 */.  }.  pC
20ef0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
20f00 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d  r;.  if( pCrsr==
20f10 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  0 ){.    pC->nul
20f20 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62 72  lRow = 1;.    br
20f30 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20 3d  eak;.  }.  res =
20f40 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   1;.  assert( pC
20f50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20f60 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f  ==0 );.  rc = pO
20f70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
20f80 78 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65  xt ? sqlite3Btre
20f90 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72 65  eNext(pCrsr, &re
20fa0 73 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20  s) :.           
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fc0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 50     sqlite3BtreeP
20fd0 72 65 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26  revious(pCrsr, &
20fe0 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
20ff0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
21000 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21010 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21020 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
21030 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
21040 20 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f   - 1;.    if( pO
21050 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e  p->p5 ) p->aCoun
21060 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b  ter[pOp->p5-1]++
21070 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21080 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
21090 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
210a0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43  .#endif.  }.  pC
210b0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
210c0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
210d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
210e0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20  sert P1 P2 P3 * 
210f0 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P5.**.** Registe
21100 72 20 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c  r P2 holds a SQL
21110 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
21120 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
21130 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
21140 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
21150 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
21160 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
21170 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
21180 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
21190 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
211a0 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
211b0 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
211c0 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
211d0 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
211e0 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
211f0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
21200 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
21210 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
21220 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
21230 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
21240 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
21250 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
21260 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
21270 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
21280 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
21290 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
212a0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
212b0 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  rsr;.  int nKey;
212c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
212d0 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Key;..  assert( 
212e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
212f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21300 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21310 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21320 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21330 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
21340 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
21350 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  b );.  pCrsr = p
21360 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
21370 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
21380 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
21390 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
213a0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70   );.    rc = Exp
213b0 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
213c0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
213d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 6e 4b  E_OK ){.      nK
213e0 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
213f0 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d      zKey = pIn2-
21400 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  >z;.      rc = s
21410 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
21420 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e  t(pCrsr, zKey, n
21430 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70  Key, "", 0, 0, p
21440 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20  Op->p3, .       
21450 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
21460 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
21470 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
21480 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
21490 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
214a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
214b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20  veto==0 );.     
214c0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
214d0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
214e0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
214f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21500 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
21510 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
21520 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
21530 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
21540 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
21550 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
21560 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
21570 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
21580 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
21590 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
215a0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
215b0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
215c0 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
215d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
215e0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
215f0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
21600 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
21610 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
21620 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
21630 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
21640 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
21650 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p3<=p->nMem+1 );
21660 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21670 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21680 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21690 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
216a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
216b0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
216c0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
216d0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
216e0 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
216f0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
21700 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
21710 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
21720 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66  pOp->p3;.    r.f
21730 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e  lags = 0;.    r.
21740 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  aMem = &p->aMem[
21750 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63  pOp->p2];.    rc
21760 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21770 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21780 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
21790 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
217a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
217b0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  es==0 ){.      r
217c0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
217d0 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20  Delete(pCrsr);. 
217e0 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
217f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21800 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
21810 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21820 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
21830 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21840 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
21850 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21860 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
21870 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
21880 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
21890 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
218a0 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a  the record at.**
218b0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
218c0 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65  index key pointe
218d0 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50  d to by cursor P
218e0 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72  1.  This integer
218f0 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68   should be.** th
21900 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
21910 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68  able entry to wh
21920 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65  ich this index e
21930 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a  ntry points..**.
21940 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77  ** See also: Row
21950 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a  id, MakeRecord..
21960 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  */.case OP_IdxRo
21970 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
21980 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
21990 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75  elease */.  BtCu
219a0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
219b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
219c0 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61   i64 rowid;..  a
219d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
219e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
219f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21a00 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21a10 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21a20 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
21a30 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
21a40 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
21a50 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  r!=0) ){.    rc 
21a60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
21a70 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
21a80 20 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 29     if( NEVER(rc)
21a90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
21aa0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
21ab0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
21ac0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
21ad0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21ae0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
21af0 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c     if( !pC->null
21b00 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20  Row ){.      rc 
21b10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
21b20 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c  Rowid(db, pCrsr,
21b30 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20   &rowid);.      
21b40 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
21b50 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
21b60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
21b70 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
21b80 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
21b90 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
21ba0 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75  );.      pOut->u
21bb0 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
21bc0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
21bd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
21be0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
21bf0 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
21c00 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
21c10 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
21c20 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
21c30 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
21c40 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
21c50 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
21c60 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
21c70 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
21c80 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
21c90 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
21ca0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
21cb0 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
21cc0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
21cd0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
21ce0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
21cf0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
21d00 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
21d10 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
21d20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
21d30 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
21d40 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
21d50 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
21d60 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
21d70 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
21d80 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
21d90 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70  an epsilon .** p
21da0 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70  rior to the comp
21db0 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
21dc0 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f  ke the opcode wo
21dd0 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78  rk like IdxGT ex
21de0 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20  cept.** that if 
21df0 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67  the key from reg
21e00 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70 72  ister P3 is a pr
21e10 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20  efix of the key 
21e20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a  in the cursor,.*
21e30 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
21e40 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69 74  false whereas it
21e50 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77   would be true w
21e60 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a  ith IdxGT..*/./*
21e70 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
21e80 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
21e90 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
21ea0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
21eb0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
21ec0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
21ed0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
21ee0 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
21ef0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
21f00 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
21f10 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
21f20 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
21f30 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
21f40 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
21f50 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
21f60 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
21f70 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
21f80 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
21f90 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
21fa0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
21fb0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
21fc0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
21fd0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
21fe0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
21ff0 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
22000 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
22010 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
22020 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
22030 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
22040 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
22050 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
22060 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
22070 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
22080 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22090 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n3 */.case OP_Id
220a0 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  xGE: {        /*
220b0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
220c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
220d0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
220e0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
220f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22110 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22120 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22130 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22140 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
22150 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72   ALWAYS(pC->pCur
22160 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61  sor!=0) ){.    a
22170 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
22180 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22190 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
221a0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
221b0 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  5==1 );.    asse
221c0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
221d0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
221e0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
221f0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
22200 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
22210 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69  pOp->p4.i;.    i
22220 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
22230 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
22240 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c  PACKED_INCRKEY |
22250 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
22260 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73  _ROWID;.    }els
22270 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  e{.      r.flags
22280 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   = UNPACKED_IGNO
22290 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a  RE_ROWID;.    }.
222a0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d      r.aMem = &p-
222b0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
222c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
222d0 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
222e0 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  e(pC, &r, &res);
222f0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
22300 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
22310 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72  {.      res = -r
22320 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  es;.    }else{. 
22330 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
22340 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
22350 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b  GE );.      res+
22360 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
22370 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20   res>0 ){.      
22380 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
22390 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   ;.    }.  }.  b
223a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
223b0 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
223c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
223d0 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
223e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
223f0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
22400 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
22410 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
22420 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
22430 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
22440 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
22450 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
22460 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
22470 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
22480 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
22490 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
224a0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
224b0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
224c0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
224d0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
224e0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
224f0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
22500 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
22510 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
22520 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
22530 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
22540 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
22550 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
22560 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
22570 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
22580 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
22590 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
225a0 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
225b0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
225c0 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
225d0 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
225e0 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
225f0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
22600 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
22610 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
22620 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
22630 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
22640 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
22650 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
22660 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
22670 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
22680 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
22690 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
226a0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
226b0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
226c0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
226d0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
226e0 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
226f0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
22700 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
22710 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
22720 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
22730 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
22740 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
22750 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72  {     /* out2-pr
22760 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
22770 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
22780 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56  iCnt;.  Vdbe *pV
22790 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  dbe;.  int iDb;.
227a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
227b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
227c0 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66  .  iCnt = 0;.  f
227d0 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64  or(pVdbe=db->pVd
227e0 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65  be; pVdbe; pVdbe
227f0 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29   = pVdbe->pNext)
22800 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65 2d  {.    if( pVdbe-
22810 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
22820 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d  IC_RUN && pVdbe-
22830 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20  >inVtabMethod<2 
22840 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20  && pVdbe->pc>=0 
22850 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b  ){.      iCnt++;
22860 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65  .    }.  }.#else
22870 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63  .  iCnt = db->ac
22880 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e  tiveVdbeCnt;.#en
22890 64 69 66 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  dif.  if( iCnt>1
228a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
228b0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
228c0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
228d0 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
228e0 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
228f0 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
22900 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
22910 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
22920 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
22930 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  b))!=0 );.    rc
22940 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22950 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
22960 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
22970 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
22980 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
22990 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
229a0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
229b0 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66   iMoved;.#ifndef
229c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
229d0 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
229e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
229f0 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
22a00 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
22a10 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44  ageMoved(&db->aD
22a20 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20  b[iDb], iMoved, 
22a30 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
22a40 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
22a50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22a60 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
22a70 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
22a80 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
22a90 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
22aa0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
22ab0 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
22ac0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
22ad0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
22ae0 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
22af0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
22b00 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
22b10 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
22b20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
22b30 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
22b40 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
22b50 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
22b60 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
22b70 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
22b80 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
22b90 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
22ba0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
22bb0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
22bc0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
22bd0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
22be0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
22bf0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
22c00 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
22c10 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
22c20 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
22c30 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
22c40 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
22c50 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
22c60 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
22c70 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
22c80 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
22c90 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
22ca0 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
22cb0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
22cc0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
22cd0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
22ce0 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
22cf0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
22d00 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
22d10 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
22d20 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
22d30 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
22d40 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
22d50 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
22d60 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
22d70 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22d80 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
22d90 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
22da0 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
22db0 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
22dc0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
22dd0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
22de0 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63  >p2))!=0 );.  rc
22df0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
22e00 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
22e10 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
22e20 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
22e30 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
22e40 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
22e50 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
22e60 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
22e70 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
22e80 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
22e90 20 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70       p->aMem[pOp
22ea0 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
22eb0 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
22ec0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22ed0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
22ee0 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
22ef0 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
22f00 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
22f10 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
22f20 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
22f30 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
22f40 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
22f50 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
22f60 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
22f70 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
22f80 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
22f90 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
22fa0 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
22fb0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
22fc0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
22fd0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
22fe0 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
22ff0 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
23000 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
23010 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
23020 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
23030 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
23040 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
23050 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
23060 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
23070 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
23080 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
23090 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
230a0 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
230b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
230c0 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
230d0 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
230e0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
230f0 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
23100 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
23110 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
23120 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
23130 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
23140 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
23150 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
23160 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
23170 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
23180 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
23190 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
231a0 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
231b0 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
231c0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
231d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
231e0 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
231f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
23200 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20  release */.case 
23210 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
23220 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
23230 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
23240 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
23250 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
23260 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30  pDb;..  pgno = 0
23270 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23280 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23290 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
232a0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
232b0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
232c0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  p1))!=0 );.  pDb
232d0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
232e0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
232f0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
23300 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
23310 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
23320 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
23330 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
23340 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
23350 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42  BTREE_LEAFDATA|B
23360 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
23370 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
23380 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  = BTREE_ZERODATA
23390 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
233a0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
233b0 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
233c0 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
233d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
233e0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
233f0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
23400 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
23410 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
23420 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34  chema P1 P2 * P4
23430 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
23440 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
23450 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
23460 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
23470 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
23480 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
23490 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
234a0 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66  4.  P2 is the "f
234b0 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c  orce" flag.   Al
234c0 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70  ways do.** the p
234d0 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20  arsing if P2 is 
234e0 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20  true.  If P2 is 
234f0 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73  false, then this
23500 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a   routine is a.**
23510 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63   no-op if the sc
23520 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72  hema is not curr
23530 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49  ently loaded.  I
23540 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
23550 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65  f P2.** is false
23560 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  , the SQLITE_MAS
23570 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c  TER table is onl
23580 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20  y parsed if the 
23590 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73  rest of the.** s
235a0 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79  chema is already
235b0 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65   loaded into the
235c0 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a   symbol table..*
235d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
235e0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
235f0 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
23600 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
23610 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
23620 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
23630 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
23640 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
23650 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
23660 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
23670 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
23680 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23690 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
236a0 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
236b0 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69 44   initData;..  iD
236c0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
236d0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
236e0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
236f0 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32  .  /* If pOp->p2
23700 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69 73   is 0, then this
23710 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67   opcode is being
23720 20 65 78 65 63 75 74 65 64 20 74 6f 20 72 65 61   executed to rea
23730 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  d a.  ** single 
23740 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  row, for example
23750 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73 70   the row corresp
23760 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77 20  onding to a new 
23770 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61 74  index.  ** creat
23780 65 64 20 62 79 20 74 68 69 73 20 56 44 42 45 2c  ed by this VDBE,
23790 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65   from the sqlite
237a0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 49  _master table. I
237b0 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73  t only.  ** does
237c0 20 74 68 69 73 20 69 66 20 74 68 65 20 63 6f 72   this if the cor
237d0 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65  responding in-me
237e0 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20 63  mory schema is c
237f0 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f  urrently.  ** lo
23800 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  aded. Otherwise,
23810 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20 64   the new index d
23820 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65  efinition can be
23830 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20   loaded along.  
23840 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65 73 74  ** with the rest
23850 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 77   of the schema w
23860 68 65 6e 20 69 74 20 69 73 20 72 65 71 75 69 72  hen it is requir
23870 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c  ed..  **.  ** Al
23880 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65 78  though the mutex
23890 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65 64   on the BtShared
238a0 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 72   object that cor
238b0 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a  responds to.  **
238c0 20 64 61 74 61 62 61 73 65 20 69 44 62 20 28 74   database iDb (t
238d0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
238e0 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69 74  aining the sqlit
238f0 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20  e_master table. 
23900 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69 73   ** read by this
23910 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69 73   instruction) is
23920 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c   currently held,
23930 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
23940 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20   to.  ** obtain 
23950 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 61  the mutexes on a
23960 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
23970 62 61 73 65 73 20 62 65 66 6f 72 65 20 63 68 65  bases before che
23980 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68  cking if.  ** th
23990 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62 20  e schema of iDb 
239a0 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73 20  is loaded. This 
239b0 69 73 20 62 65 63 61 75 73 65 2c 20 61 74 20 74  is because, at t
239c0 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a  he start of.  **
239d0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65   the sqlite3_exe
239e0 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20  c() call below, 
239f0 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f  SQLite will invo
23a00 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ke .  ** sqlite3
23a10 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e  BtreeEnterAll().
23a20 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73 20   If all mutexes 
23a30 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  are not already 
23a40 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69  held, the.  ** i
23a50 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65 20  Db mutex may be 
23a60 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c 65  temporarily rele
23a70 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64 65  ased to avoid de
23a80 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a  adlock. If .  **
23a90 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20 74   this happens, t
23aa0 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 74  hen some other t
23ab0 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74 65  hread may delete
23ac0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a   the in-memory .
23ad0 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20 64    ** schema of d
23ae0 61 74 61 62 61 73 65 20 69 44 62 20 62 65 66 6f  atabase iDb befo
23af0 72 65 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  re the SQL state
23b00 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20 73  ment runs. The s
23b10 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20  chema.  ** will 
23b20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64 20  not be reloaded 
23b30 62 65 63 75 61 73 65 20 74 68 65 20 64 62 2d 3e  becuase the db->
23b40 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20 69  init.busy flag i
23b50 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a  s set. This.  **
23b60 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61   can result in a
23b70 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   "no such table:
23b80 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20   sqlite_master" 
23b90 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20  or "malformed.  
23ba0 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
23bb0 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20  ma" error being 
23bc0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
23bd0 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  user..  */.  ass
23be0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
23bf0 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e  eHoldsMutex(db->
23c00 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b  aDb[iDb].pBt) );
23c10 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45  .  sqlite3BtreeE
23c20 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69  nterAll(db);.  i
23c30 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62  f( pOp->p2 || Db
23c40 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
23c50 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
23c60 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61  aded) ){.    zMa
23c70 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
23c80 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e  BLE(iDb);.    in
23c90 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
23ca0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
23cb0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
23cc0 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
23cd0 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
23ce0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
23cf0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
23d00 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
23d10 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
23d20 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
23d30 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20 20  HERE %s",.      
23d40 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
23d50 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
23d60 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
23d70 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
23d80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
23d90 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
23da0 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c  .      (void)sql
23db0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
23dc0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
23dd0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
23de0 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
23df0 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
23e00 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
23e10 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
23e20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
23e30 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
23e40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23e50 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
23e60 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
23e70 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
23e80 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
23e90 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
23ea0 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
23eb0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
23ec0 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
23ed0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
23ee0 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  busy = 0;.      
23ef0 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66  (void)sqlite3Saf
23f00 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d  etyOn(db);.    }
23f10 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
23f20 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
23f30 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
23f40 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
23f50 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
23f60 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
23f70 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23f80 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
23f90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
23fa0 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
23fb0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
23fc0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
23fd0 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
23fe0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
23ff0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
24000 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
24010 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
24020 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
24030 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
24040 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
24050 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
24060 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
24070 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
24080 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
24090 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
240a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
240b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
240c0 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
240d0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
240e0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
240f0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
24100 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
24110 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
24120 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
24130 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
24140 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
24150 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
24160 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
24170 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
24180 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
24190 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
241a0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
241b0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
241c0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
241d0 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
241e0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
241f0 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
24200 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
24210 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
24220 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
24230 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
24240 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
24250 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
24260 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
24270 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
24280 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
24290 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
242a0 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
242b0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
242c0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
242d0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
242e0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
242f0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
24300 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
24310 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
24320 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
24330 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
24340 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
24350 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
24360 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
24370 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
24380 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
24390 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
243a0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
243b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
243c0 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
243d0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
243e0 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
243f0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
24400 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24410 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
24420 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
24430 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
24440 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
24450 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
24460 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
24470 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
24480 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
24490 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
244a0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
244b0 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
244c0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
244d0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
244e0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
244f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
24500 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
24510 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
24520 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
24530 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
24540 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
24550 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
24560 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
24570 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
24580 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
24590 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
245a0 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
245b0 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
245c0 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
245d0 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
245e0 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
245f0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
24600 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
24610 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
24620 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
24630 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
24640 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
24650 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
24660 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
24670 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
24680 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
24690 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
246a0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
246b0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
246c0 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
246d0 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
246e0 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
246f0 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
24700 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
24710 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
24720 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
24730 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
24740 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
24750 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
24760 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
24770 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
24780 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
24790 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
247a0 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
247b0 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
247c0 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
247d0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
247e0 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
247f0 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
24800 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
24810 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
24820 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
24830 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
24840 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
24850 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
24860 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
24870 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24880 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
24890 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
248a0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
248b0 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
248c0 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
248d0 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
248e0 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
248f0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
24900 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
24910 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
24920 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
24930 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
24940 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
24950 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
24960 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
24970 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
24980 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
24990 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
249a0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
249b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
249c0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
249d0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
249e0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
249f0 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
24a00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
24a10 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
24a20 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
24a30 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
24a40 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f  ing */.  .  nRoo
24a50 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
24a60 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
24a70 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
24a80 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
24a90 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
24aa0 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
24ab0 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
24ac0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
24ad0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
24ae0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
24af0 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  m );.  pnErr = &
24b00 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
24b10 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
24b20 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
24b30 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
24b40 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
24b50 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
24b60 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
24b70 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn1 = &p->aMem
24b80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
24b90 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
24ba0 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
24bb0 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
24bc0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
24bd0 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
24be0 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
24bf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
24c00 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
24c10 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
24c20 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29   & (1<<pOp->p5))
24c30 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  !=0 );.  z = sql
24c40 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
24c50 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
24c60 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
24c70 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
24ca0 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e  t)pnErr->u.i, &n
24cb0 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Err);.  sqlite3D
24cc0 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29  bFree(db, aRoot)
24cd0 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
24ce0 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
24cf0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
24d00 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
24d10 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
24d20 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
24d30 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
24d40 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
24d50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
24d60 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
24d70 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
24d80 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
24d90 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
24da0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
24db0 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
24dc0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
24dd0 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
24de0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
24df0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
24e00 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
24e10 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
24e20 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
24e30 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
24e40 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
24e50 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
24e60 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
24e70 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61  P2 into a boolea
24e80 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20  n index.** held 
24e90 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
24ea0 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
24eb0 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
24ec0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
24ed0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
24ee0 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
24ef0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20  /* in2 */.  Mem 
24f00 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20 2a 70 56  *pIdx;.  Mem *pV
24f10 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  al;.  assert( pO
24f20 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
24f30 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
24f40 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIdx = &p->aMem
24f50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24f60 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
24f70 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  & pOp->p2<=p->nM
24f80 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20 3d 20 26  em );.  pVal = &
24f90 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
24fa0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 56 61  ;.  assert( (pVa
24fb0 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  l->flags & MEM_I
24fc0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
24fd0 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIdx->flags & M
24fe0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
24ff0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25000 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 64  MemSetRowSet(pId
25010 78 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 64  x);.    if( (pId
25020 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  x->flags & MEM_R
25030 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
25040 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
25050 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
25060 72 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53  rt(pIdx->u.pRowS
25070 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69 29 3b 0a  et, pVal->u.i);.
25080 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25090 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
250a0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
250b0 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
250c0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
250d0 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  from boolean ind
250e0 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68  ex P1 and put th
250f0 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a  at value into.**
25100 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f   register P3.  O
25110 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e  r, if boolean in
25120 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61  dex P1 is initia
25130 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
25140 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
25150 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
25160 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
25170 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
25180 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
25190 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 4d  ump, out3 */.  M
251a0 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69 36 34 20  em *pIdx;.  i64 
251b0 76 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70  val;.  assert( p
251c0 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
251d0 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
251e0 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
251f0 52 52 55 50 54 3b 0a 20 20 70 49 64 78 20 3d 20  RRUPT;.  pIdx = 
25200 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
25210 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ];.  pOut = &p->
25220 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
25230 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67   if( (pIdx->flag
25240 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
25250 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
25260 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 64 78  3RowSetNext(pIdx
25270 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
25280 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
25290 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
252a0 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
252b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
252c0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 64 78 29 3b  emSetNull(pIdx);
252d0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
252e0 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
252f0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
25300 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
25310 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
25320 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
25330 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
25340 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 73 71 6c  >nMem );.    sql
25350 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
25360 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29 3b 0a  t64(pOut, val);.
25370 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25380 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
25390 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
253a0 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  4.**.** Register
253b0 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
253c0 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
253d0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
253e0 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
253f0 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
25400 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
25410 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
25420 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
25430 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
25440 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
25450 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
25460 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
25470 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
25480 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
25490 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
254a0 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
254b0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
254c0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
254d0 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
254e0 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
254f0 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
25500 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
25510 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
25520 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
25530 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
25540 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
25550 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
25560 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
25570 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
25580 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
25590 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
255a0 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
255b0 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
255c0 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
255d0 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
255e0 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
255f0 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
25600 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
25610 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
25620 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
25630 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
25640 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
25650 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
25660 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
25670 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
25680 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
25690 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
256a0 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
256b0 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
256c0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
256d0 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
256e0 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
256f0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
25700 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
25710 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
25720 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
25730 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
25740 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
25750 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
25760 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
25770 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
25780 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
25790 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
257a0 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
257b0 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
257c0 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
257d0 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
257e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
257f0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25810 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
25820 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
25830 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 69  int exists;..  i
25840 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
25850 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
25860 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
25870 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
25880 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
25890 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
258a0 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
258b0 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
258c0 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
258d0 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
258e0 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
258f0 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
25900 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
25910 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
25920 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25930 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
25940 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
25950 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
25960 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
25970 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
25980 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25990 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
259a0 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
259b0 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
259c0 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
259d0 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
259e0 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
259f0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
25a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69  (u8)(iSet>=0 ? i
25a30 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66  Set & 0xf : 0xff
25a40 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20    pIn3->u.i);.  
25a70 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a    if( exists ){.
25a80 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
25a90 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
25aa0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
25ab0 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
25ac0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
25ad0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
25ae0 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
25af0 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
25b00 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
25b10 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
25b20 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  R./* Opcode: Con
25b30 74 65 78 74 50 75 73 68 20 2a 20 2a 20 2a 20 0a  textPush * * * .
25b40 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65 20 63  **.** Save the c
25b50 75 72 72 65 6e 74 20 56 64 62 65 20 63 6f 6e 74  urrent Vdbe cont
25b60 65 78 74 20 73 75 63 68 20 74 68 61 74 20 69 74  ext such that it
25b70 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
25b80 20 62 79 20 61 20 43 6f 6e 74 65 78 74 50 6f 70   by a ContextPop
25b90 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  .** opcode. The 
25ba0 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74  context stores t
25bb0 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72  he last insert r
25bc0 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20  ow id, the last 
25bd0 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65  statement change
25be0 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74  .** count, and t
25bf0 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
25c00 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e  ment change coun
25c10 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
25c20 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a 20 20 69  ntextPush: {.  i
25c30 6e 74 20 69 3b 0a 20 20 43 6f 6e 74 65 78 74 20  nt i;.  Context 
25c40 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 69 20  *pContext;..  i 
25c50 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  = p->contextStac
25c60 6b 54 6f 70 2b 2b 3b 0a 20 20 61 73 73 65 72 74  kTop++;.  assert
25c70 28 20 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46  ( i>=0 );.  /* F
25c80 49 58 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75  IX ME: This shou
25c90 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20  ld be allocated 
25ca0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 76  as part of the v
25cb0 64 62 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  dbe at compile-t
25cc0 69 6d 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d  ime */.  if( i>=
25cd0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44  p->contextStackD
25ce0 65 70 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63  epth ){.    p->c
25cf0 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68  ontextStackDepth
25d00 20 3d 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63   = i+1;.    p->c
25d10 6f 6e 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71  ontextStack = sq
25d20 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
25d30 46 72 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74  Free(db, p->cont
25d40 65 78 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20  extStack,.      
25d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d70 20 20 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65      sizeof(Conte
25d80 78 74 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20  xt)*(i+1));.    
25d90 69 66 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  if( p->contextSt
25da0 61 63 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  ack==0 ) goto no
25db0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e  _mem;.  }.  pCon
25dc0 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65  text = &p->conte
25dd0 78 74 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43  xtStack[i];.  pC
25de0 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69  ontext->lastRowi
25df0 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
25e00 64 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  d;.  pContext->n
25e10 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
25e20 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nge;.  break;.}.
25e30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74  ./* Opcode: Cont
25e40 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a  extPop * * * .**
25e50 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20  .** Restore the 
25e60 56 64 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20  Vdbe context to 
25e70 74 68 65 20 73 74 61 74 65 20 69 74 20 77 61 73  the state it was
25e80 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74   in when context
25e90 50 75 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a  Push was last.**
25ea0 20 65 78 65 63 75 74 65 64 2e 20 54 68 65 20 63   executed. The c
25eb0 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74 68  ontext stores th
25ec0 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f  e last insert ro
25ed0 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73  w id, the last s
25ee0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e  tatement.** chan
25ef0 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68  ge count, and th
25f00 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
25f10 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ent change count
25f20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
25f30 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e  textPop: {.  Con
25f40 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a  text *pContext;.
25f50 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d    pContext = &p-
25f60 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d  >contextStack[--
25f70 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54  p->contextStackT
25f80 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  op];.  assert( p
25f90 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f  ->contextStackTo
25fa0 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61  p>=0 );.  db->la
25fb0 73 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65  stRowid = pConte
25fc0 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  xt->lastRowid;. 
25fd0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43   p->nChange = pC
25fe0 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b  ontext->nChange;
25ff0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
26000 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
26010 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
26020 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
26030 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
26040 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
26050 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
26060 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
26070 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
26080 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
26090 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63  maximum of its c
260a0 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20  urrent value.** 
260b0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
260c0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
260d0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
260e0 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
260f0 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
26100 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
26110 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
26120 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
26130 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
26140 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
26150 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
26160 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
26170 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
26180 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
26190 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
261a0 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
261b0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
261c0 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
261d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
261e0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
261f0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
26200 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
26210 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
26220 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
26230 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
26240 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
26250 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
26260 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
26270 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
26280 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
26290 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
262a0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
262b0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
262c0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
262d0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
262e0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
262f0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
26300 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
26310 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
26320 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
26330 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
26340 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
26350 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
26360 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
26370 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
26380 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
26390 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
263a0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
263b0 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
263c0 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
263d0 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
263e0 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
263f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
26400 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
26410 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
26420 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
26430 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
26440 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
26450 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
26460 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
26470 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
26480 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
26490 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
264a0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
264b0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
264c0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
264d0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
264e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
264f0 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20   IfZero P1 P2 * 
26500 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
26510 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
26520 65 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79  er P1 is exactly
26530 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
26540 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
26550 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
26560 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
26570 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
26580 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
26590 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
265a0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
265b0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
265c0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
265d0 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
265e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
265f0 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
26600 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
26610 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
26620 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
26630 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
26640 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
26650 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26660 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
26670 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
26680 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
26690 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
266a0 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
266b0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
266c0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
266d0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
266e0 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
266f0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
26700 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
26710 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
26720 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
26730 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
26740 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
26750 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
26760 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
26770 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
26780 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
26790 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
267a0 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
267b0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
267c0 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  em *pRec;.  sqli
267d0 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
267e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
267f0 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
26800 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
26810 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
26820 65 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ec = &p->aMem[pO
26830 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
26840 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
26850 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
26860 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
26870 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
26880 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ++){.    apVal[i
26890 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 74  ] = pRec;.    st
268a0 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65 63  oreTypeInfo(pRec
268b0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d  , encoding);.  }
268c0 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
268d0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
268e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
268f0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
26900 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70  >nMem );.  ctx.p
26910 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d  Mem = pMem = &p-
26920 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
26930 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63    pMem->n++;.  c
26940 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
26950 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a  _Null;.  ctx.s.z
26960 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
26970 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78  alloc = 0;.  ctx
26980 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
26990 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
269a0 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b  ctx.isError = 0;
269b0 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30  .  ctx.pColl = 0
269c0 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
269d0 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
269e0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
269f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
26a00 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20  Op>p->aOp );.   
26a10 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
26a20 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
26a30 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
26a40 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
26a50 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
26a60 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
26a70 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
26a80 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46  l;.  }.  (ctx.pF
26a90 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78  unc->xStep)(&ctx
26aa0 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69  , n, apVal);.  i
26ab0 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
26ac0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
26ad0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
26ae0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
26af0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
26b00 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72  (&ctx.s));.    r
26b10 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
26b20 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
26b30 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
26b40 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  x.s);.  break;.}
26b50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
26b60 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
26b70 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65   *.**.** Execute
26b80 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
26b90 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
26ba0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
26bb0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
26bc0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
26bd0 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
26be0 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
26bf0 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
26c00 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
26c10 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
26c20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
26c30 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
26c40 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
26c50 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
26c60 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
26c70 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
26c80 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
26c90 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
26ca0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
26cb0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
26cc0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
26cd0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
26ce0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
26cf0 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
26d00 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
26d10 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
26d20 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
26d30 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
26d40 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
26d50 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
26d60 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
26d70 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
26d80 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
26d90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
26da0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
26db0 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  nMem );.  pMem =
26dc0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
26dd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
26de0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
26df0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
26e00 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
26e10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
26e20 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
26e30 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
26e40 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
26e50 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
26e60 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
26e70 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
26e80 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
26e90 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
26ea0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
26eb0 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
26ec0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
26ed0 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
26ee0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
26ef0 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
26f00 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
26f10 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
26f20 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  }...#if !defined
26f30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
26f40 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
26f50 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
26f60 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
26f70 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a  Vacuum * * * * *
26f80 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
26f90 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
26fa0 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
26fb0 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72  will cause other
26fc0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68   virtual.** mach
26fd0 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74  ines to be creat
26fe0 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20  ed and run.  It 
26ff0 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65  may not be calle
27000 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a  d from within.**
27010 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
27020 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
27030 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  m: {.  if( sqlit
27040 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
27050 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27060 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72  _to_misuse; .  r
27070 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
27080 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
27090 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c  , db);.  if( sql
270a0 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
270b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
270c0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62  e_to_misuse;.  b
270d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
270e0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
270f0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
27100 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
27110 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
27120 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
27130 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
27140 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
27150 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
27160 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
27170 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
27180 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
27190 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
271a0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
271b0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
271c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
271d0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
271e0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
271f0 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
27200 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27210 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
27220 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27230 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27240 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
27250 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
27260 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
27270 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
27280 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
27290 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
272a0 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
272b0 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28  cuum(pBt);.  if(
272c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
272d0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
272e0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
272f0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
27300 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
27310 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
27320 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
27330 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
27340 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
27350 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65  ents to become e
27360 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72  xpired. An expir
27370 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
27380 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
27390 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  ror code of SQLI
273a0 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20  TE_SCHEMA if it 
273b0 69 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64  is ever executed
273c0 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65   .** (via sqlite
273d0 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a  3_step())..** .*
273e0 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
273f0 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
27400 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
27410 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
27420 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
27430 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
27440 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
27450 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63  atement is affec
27460 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  ted. .*/.case OP
27470 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
27480 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
27490 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
274a0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
274b0 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
274c0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
274d0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
274e0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
274f0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
27500 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
27510 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
27520 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74  3 P4 *.**.** Obt
27530 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
27540 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
27550 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
27560 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
27570 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
27580 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
27590 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
275a0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
275b0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
275c0 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
275d0 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
275e0 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
275f0 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
27600 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
27610 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
27620 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
27630 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
27640 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
27650 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
27660 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
27670 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
27680 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
27690 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
276a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
276b0 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
276c0 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
276d0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
276e0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
276f0 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
27700 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
27710 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
27720 4c 6f 63 6b 3a 20 7b 0a 20 20 69 6e 74 20 70 31  Lock: {.  int p1
27730 3b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  ;.  u8 isWriteLo
27740 63 6b 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ck;..  p1 = pOp-
27750 3e 70 31 3b 20 0a 20 20 69 73 57 72 69 74 65 4c  >p1; .  isWriteL
27760 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
27770 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e  3;.  assert( p1>
27780 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
27790 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
277a0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
277b0 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61  <<p1))!=0 );.  a
277c0 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
277d0 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
277e0 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 72 63 20  Lock==1 );.  rc 
277f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
27800 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
27810 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
27820 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
27830 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
27840 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
27850 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
27860 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
27870 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
27880 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27890 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
278a0 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
278b0 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 7d 0a 20  : %s", z);.  }. 
278c0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
278d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
278e0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
278f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27900 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27910 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
27920 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
27930 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
27940 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
27950 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
27960 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
27970 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
27980 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
27990 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
279a0 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
279b0 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
279c0 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
279d0 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
279e0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
279f0 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
27a00 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
27a10 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
27a20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
27a30 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
27a40 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
27a50 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
27a60 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
27a70 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
27a80 56 74 61 62 3b 0a 20 20 70 56 74 61 62 20 3d 20  Vtab;.  pVtab = 
27a90 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
27aa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
27ab0 62 42 65 67 69 6e 28 64 62 2c 20 70 56 74 61 62  bBegin(db, pVtab
27ac0 29 3b 0a 20 20 69 66 28 20 70 56 74 61 62 20 29  );.  if( pVtab )
27ad0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
27ae0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
27af0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
27b00 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
27b10 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
27b20 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
27b30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
27b40 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
27b50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
27b60 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
27b70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27b80 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
27b90 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50  VCreate P1 * * P
27ba0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
27bb0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
27bc0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
27bd0 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c  atabase P1. Call
27be0 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
27bf0 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20  hod.** for that 
27c00 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
27c10 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72  P_VCreate: {.  r
27c20 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
27c30 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f  allCreate(db, pO
27c40 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27c50 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
27c60 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
27c70 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
27c80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
27c90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27ca0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
27cb0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44  LE./* Opcode: VD
27cc0 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34  estroy P1 * * P4
27cd0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
27ce0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
27cf0 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
27d00 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c  tabase P1.  Call
27d10 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   the xDestroy me
27d20 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20  thod.** of that 
27d30 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
27d40 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20  P_VDestroy: {.  
27d50 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
27d60 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 2;.  rc = sqli
27d70 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
27d80 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
27d90 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d  pOp->p4.z);.  p-
27da0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
27db0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  0;.  break;.}.#e
27dc0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
27dd0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
27de0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
27df0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27e00 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
27e10 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
27e20 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
27e30 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
27e40 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
27e50 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
27e60 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
27e70 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
27e80 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
27e90 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
27ea0 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
27eb0 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
27ec0 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
27ed0 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
27ee0 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
27ef0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
27f00 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
27f10 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43  b_cursor *pVtabC
27f20 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33  ursor;.  sqlite3
27f30 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
27f40 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
27f50 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72  pModule;..  pCur
27f60 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72   = 0;.  pVtabCur
27f70 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  sor = 0;.  pVtab
27f80 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
27f90 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73  ;.  pModule = (s
27fa0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
27fb0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
27fc0 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26    assert(pVtab &
27fd0 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66  & pModule);.  if
27fe0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
27ff0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
28000 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
28010 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
28020 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20  e->xOpen(pVtab, 
28030 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  &pVtabCursor);. 
28040 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
28050 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
28060 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
28070 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
28080 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
28090 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  = 0;.  if( sqlit
280a0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
280b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
280c0 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28  to_misuse;.  if(
280d0 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
280e0 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
280f0 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
28100 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
28110 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
28120 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
28130 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
28140 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63 75  itialise vdbe cu
28150 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
28160 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
28170 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
28180 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
28190 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
281a0 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
281b0 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
281c0 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75  ursor;.      pCu
281d0 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  r->pModule = pVt
281e0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d  abCursor->pVtab-
281f0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65  >pModule;.    }e
28200 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
28210 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
28220 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
28230 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
28240 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
28250 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
28260 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
28270 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
28280 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28290 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
282a0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
282b0 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
282c0 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
282d0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
282e0 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
282f0 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
28300 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
28310 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
28320 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
28330 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
28340 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
28350 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
28360 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
28370 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
28380 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
28390 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
283a0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
283b0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
283c0 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
283d0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
283e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
283f0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
28400 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
28410 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
28420 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
28430 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
28440 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
28450 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
28460 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
28470 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
28480 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
28490 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
284a0 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
284b0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
284c0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
284d0 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
284e0 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
284f0 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
28500 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
28510 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
28520 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
28530 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
28540 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
28550 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
28560 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
28570 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
28580 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
28590 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
285a0 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
285b0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
285c0 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
285d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
285e0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
285f0 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
28600 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
28610 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
28620 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
28630 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
28640 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
28650 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
28660 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
28670 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28680 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
28690 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
286a0 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
286b0 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  y = &p->aMem[pOp
286c0 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
286d0 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
286e0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
286f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45 47 49 53  Op->p1];.  REGIS
28700 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
28710 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
28720 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
28730 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74  bCursor );.  pVt
28740 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d  abCursor = pCur-
28750 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  >pVtabCursor;.  
28760 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72  pVtab = pVtabCur
28770 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
28780 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
28790 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
287a0 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
287b0 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
287c0 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
287d0 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
287e0 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
287f0 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
28800 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
28810 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
28820 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
28830 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
28840 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
28850 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
28860 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65  od */.  {.    re
28870 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67  s = 0;.    apArg
28880 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
28890 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
288a0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
288b0 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
288c0 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 74  c[i+1];.      st
288d0 6f 72 65 54 79 70 65 49 6e 66 6f 28 61 70 41 72  oreTypeInfo(apAr
288e0 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  g[i], 0);.    }.
288f0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
28900 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
28910 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28920 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71  o_misuse;.    sq
28930 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56  lite3VtabLock(pV
28940 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56  tab);.    p->inV
28950 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
28960 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
28970 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
28980 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
28990 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
289a0 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
289b0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
289c0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
289d0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
289e0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
289f0 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
28a00 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
28a10 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
28a20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
28a30 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
28a40 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28a50 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73  _OK ){.      res
28a60 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
28a70 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
28a80 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
28a90 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
28aa0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28ab0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20  e_to_misuse;..  
28ac0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
28ad0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
28ae0 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
28af0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
28b00 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
28b10 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
28b20 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28b30 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
28b40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
28b50 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
28b60 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
28b70 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
28b80 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
28b90 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
28ba0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
28bb0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
28bc0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
28bd0 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
28be0 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
28bf0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
28c00 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
28c10 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
28c20 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
28c30 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
28c40 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
28c50 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
28c60 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
28c70 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
28c80 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
28c90 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28ca0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
28cb0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  tabCursor );.  a
28cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
28cd0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
28ce0 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
28cf0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
28d00 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  p3];.  if( pCur-
28d10 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
28d20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
28d30 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
28d40 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
28d50 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74  Vtab = pCur->pVt
28d60 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
28d70 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
28d80 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
28d90 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
28da0 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d  xColumn );.  mem
28db0 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30  set(&sContext, 0
28dc0 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78  , sizeof(sContex
28dd0 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  t));..  /* The o
28de0 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
28df0 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
28e00 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
28e10 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  Move.  ** the cu
28e20 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74  rrent contents t
28e30 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20  o sContext.s so 
28e40 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
28e50 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20  -function .  ** 
28e60 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65  can use the alre
28e70 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
28e80 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
28e90 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20  allocating a .  
28ea0 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f  ** new one..  */
28eb0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
28ec0 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e  mMove(&sContext.
28ed0 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d  s, pDest);.  Mem
28ee0 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f  SetTypeFlag(&sCo
28ef0 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  ntext.s, MEM_Nul
28f00 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  l);..  if( sqlit
28f10 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
28f20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28f30 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63  _to_misuse;.  rc
28f40 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
28f50 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43  umn(pCur->pVtabC
28f60 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74  ursor, &sContext
28f70 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
28f80 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
28f90 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
28fa0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
28fb0 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56  b->zErrMsg;.  pV
28fc0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
28fd0 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
28fe0 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
28ff0 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
29000 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Error;.  }..  /*
29010 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
29020 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
29030 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73   to the P3 regis
29040 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20  ter. We.  ** do 
29050 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73 20  this regardless 
29060 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
29070 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  t an error occur
29080 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e  red to ensure an
29090 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61  y.  ** dynamic a
290a0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f  llocation in sCo
290b0 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73  ntext.s (a Mem s
290c0 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65 61  truct) is  relea
290d0 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  sed..  */.  sqli
290e0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
290f0 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e  oding(&sContext.
29100 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  s, encoding);.  
29110 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
29120 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
29130 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29140 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f  Move(pDest, &sCo
29150 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50 44 41  ntext.s);.  UPDA
29160 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
29170 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
29180 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
29190 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  b) ){.    goto a
291a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
291b0 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  se;.  }.  if( sq
291c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
291d0 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
291e0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
291f0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
29200 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
29210 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29220 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
29230 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29240 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
29250 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
29260 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
29270 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
29280 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
29290 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
292a0 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
292b0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
292c0 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
292d0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
292e0 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
292f0 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
29300 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
29310 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
29320 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
29330 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
29340 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
29350 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
29360 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
29370 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
29380 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
29390 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
293a0 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
293b0 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
293c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
293d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
293e0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
293f0 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
29400 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
29410 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
29420 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
29430 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
29440 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
29450 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
29460 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
29470 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
29480 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
29490 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
294a0 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
294b0 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
294c0 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
294d0 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
294e0 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
294f0 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
29500 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
29510 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
29520 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
29530 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
29540 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
29550 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
29560 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
29570 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
29580 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
29590 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
295a0 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
295b0 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
295c0 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
295d0 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
295e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
295f0 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
29600 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29610 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65  misuse;.  sqlite
29620 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29  3VtabLock(pVtab)
29630 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
29640 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  hod = 1;.  rc = 
29650 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
29660 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
29670 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
29680 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69  thod = 0;.  sqli
29690 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
296a0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
296b0 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
296c0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
296d0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
296e0 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c    sqlite3VtabUnl
296f0 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a  ock(db, pVtab);.
29700 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
29710 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
29720 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
29730 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
29740 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
29750 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
29760 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
29770 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20  e_to_misuse;..  
29780 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
29790 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
297a0 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
297b0 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
297c0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
297d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
297e0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
297f0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
29800 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29810 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
29820 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
29830 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
29840 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
29850 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
29860 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
29870 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
29880 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
29890 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
298a0 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
298b0 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
298c0 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
298d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
298e0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
298f0 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
29900 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
29910 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
29920 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
29930 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
29940 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
29950 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
29960 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70 4e  ->p4.pVtab;.  pN
29970 61 6d 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ame = &p->aMem[p
29980 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29990 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
299a0 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
299b0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
299c0 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
299d0 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
299e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
299f0 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   );.  if( sqlite
29a00 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
29a10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
29a20 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c  to_misuse;.  sql
29a30 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74  ite3VtabLock(pVt
29a40 61 62 29 3b 0a 20 20 72 63 20 3d 20 70 56 74 61  ab);.  rc = pVta
29a50 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
29a60 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65  ame(pVtab, pName
29a70 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  ->z);.  sqlite3D
29a80 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
29a90 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
29aa0 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
29ab0 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
29ac0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71  ErrMsg = 0;.  sq
29ad0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
29ae0 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  db, pVtab);.  if
29af0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
29b00 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
29b10 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
29b20 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  ;..  break;.}.#e
29b30 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
29b40 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29b50 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
29b60 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20  : VUpdate P1 P2 
29b70 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34  P3 P4 *.**.** P4
29b80 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
29b90 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
29ba0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
29bb0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
29bc0 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
29bd0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
29be0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
29bf0 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
29c00 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
29c10 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
29c20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
29c30 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
29c40 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
29c50 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
29c60 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
29c70 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
29c80 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
29c90 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
29ca0 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
29cb0 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
29cc0 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
29cd0 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
29ce0 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
29cf0 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
29d00 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
29d10 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
29d20 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
29d30 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
29d40 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
29d50 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
29d60 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
29d70 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
29d80 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
29d90 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
29da0 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
29db0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
29dc0 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
29dd0 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
29de0 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
29df0 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
29e00 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
29e10 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
29e20 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
29e30 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
29e40 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
29e50 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
29e60 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
29e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
29e80 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
29e90 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
29ea0 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
29eb0 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
29ec0 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
29ed0 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
29ee0 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
29ef0 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
29f00 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
29f10 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
29f20 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
29f30 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
29f40 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
29f50 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
29f60 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
29f70 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
29f80 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
29f90 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73  inserted..*/.cas
29fa0 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
29fb0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
29fc0 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
29fd0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
29fe0 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  ;.  int nArg;.  
29ff0 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f  int i;.  sqlite_
2a000 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d  int64 rowid;.  M
2a010 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65  em **apArg;.  Me
2a020 6d 20 2a 70 58 3b 0a 0a 20 20 70 56 74 61 62 20  m *pX;..  pVtab 
2a030 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
2a040 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2a050 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2a060 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2a070 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
2a080 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a090 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
2a0a0 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
2a0b0 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
2a0c0 29 20 29 7b 0a 20 20 20 20 61 70 41 72 67 20 3d  ) ){.    apArg =
2a0d0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
2a0e0 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  X = &p->aMem[pOp
2a0f0 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
2a100 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
2a110 7b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70  {.      storeTyp
2a120 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20 20  eInfo(pX, 0);.  
2a130 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
2a140 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
2a150 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
2a160 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
2a170 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2a180 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
2a190 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
2a1a0 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20 72 63  k(pVtab);.    rc
2a1b0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
2a1c0 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
2a1d0 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
2a1e0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
2a1f0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2a200 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
2a210 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
2a220 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
2a230 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2a240 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2a250 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
2a260 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
2a270 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
2a280 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2a290 69 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20 72  isuse;.    if( r
2a2a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
2a2b0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
2a2c0 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
2a2d0 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
2a2e0 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
2a2f0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
2a300 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
2a310 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
2a320 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
2a330 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2a340 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2a350 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2a360 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2a370 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
2a380 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
2a390 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
2a3a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a3b0 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
2a3c0 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
2a3d0 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
2a3e0 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
2a3f0 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
2a400 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
2a410 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2a420 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2a430 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 6e   int p1;.  int n
2a440 50 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70  Page;.  Pager *p
2a450 50 61 67 65 72 3b 0a 0a 20 20 70 31 20 3d 20 70  Pager;..  p1 = p
2a460 4f 70 2d 3e 70 31 3b 20 0a 20 20 70 50 61 67 65  Op->p1; .  pPage
2a470 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
2a480 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31  Pager(db->aDb[p1
2a490 5d 2e 70 42 74 29 3b 0a 20 20 72 63 20 3d 20 73  ].pBt);.  rc = s
2a4a0 71 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63  qlite3PagerPagec
2a4b0 6f 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50  ount(pPager, &nP
2a4c0 61 67 65 29 3b 0a 20 20 2f 2a 20 4f 50 5f 50 61  age);.  /* OP_Pa
2a4d0 67 65 63 6f 75 6e 74 20 69 73 20 61 6c 77 61 79  gecount is alway
2a4e0 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
2a4f0 74 68 69 6e 20 61 20 72 65 61 64 20 74 72 61 6e  thin a read tran
2a500 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 0a 20 20  saction.  The.  
2a510 2a 2a 20 70 61 67 65 20 63 6f 75 6e 74 20 68 61  ** page count ha
2a520 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73  s already been s
2a530 75 63 63 65 73 73 66 75 6c 6c 79 20 72 65 61 64  uccessfully read
2a540 20 61 6e 64 20 63 61 63 68 65 64 2e 20 20 53 6f   and cached.  So
2a550 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
2a560 33 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28  3PagerPagecount(
2a570 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 63 61 6e  ) call above can
2a580 6e 6f 74 20 66 61 69 6c 2e 20 2a 2f 0a 20 20 69  not fail. */.  i
2a590 66 28 20 41 4c 57 41 59 53 28 72 63 3d 3d 53 51  f( ALWAYS(rc==SQ
2a5a0 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
2a5b0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
2a5c0 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
2a5d0 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20  >u.i = nPage;.  
2a5e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2a5f0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2a600 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f  ITE_OMIT_TRACE./
2a610 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20  * Opcode: Trace 
2a620 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2a630 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
2a640 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
2a650 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
2a660 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
2a670 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
2a680 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
2a690 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
2a6a0 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
2a6b0 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  back..*/.case OP
2a6c0 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72  _Trace: {.  char
2a6d0 20 2a 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72   *zTrace;..  zTr
2a6e0 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
2a6f0 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
2a700 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
2a710 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28  Trace ){.    if(
2a720 20 64 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20   db->xTrace ){. 
2a730 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28       db->xTrace(
2a740 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
2a750 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 69  Trace);.    }.#i
2a760 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2a770 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66  G.    if( (db->f
2a780 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71  lags & SQLITE_Sq
2a790 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20  lTrace)!=0 ){.  
2a7a0 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
2a7b0 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
2a7c0 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
2a7d0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
2a7e0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
2a7f0 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
2a800 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
2a810 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
2a820 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
2a830 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
2a840 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
2a850 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
2a860 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
2a870 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
2a880 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
2a890 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
2a8a0 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
2a8b0 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
2a8c0 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
2a8d0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
2a8e0 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
2a8f0 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
2a900 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
2a910 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
2a920 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
2a930 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
2a940 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
2a950 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
2a960 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
2a970 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
2a980 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
2a990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
2a9a0 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
2a9b0 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
2a9c0 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  in */.  break;.}
2a9d0 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
2a9e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa20 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
2aa30 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
2aa40 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
2aa50 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
2aa60 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
2aa70 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
2aa80 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
2aa90 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
2aaa0 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
2aab0 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
2aac0 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
2aad0 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
2aae0 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
2aaf0 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
2ab00 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
2ab10 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
2ab20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
2ab60 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
2ab70 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
2ab80 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
2ab90 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
2aba0 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
2abb0 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
2abc0 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
2abd0 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
2abe0 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
2abf0 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
2ac00 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
2ac10 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
2ac20 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
2ac30 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d  out, origPc, &p-
2ac40 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  >aOp[origPc]);.#
2ac50 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
2ac60 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
2ac70 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
2ac80 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
2ac90 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
2aca0 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
2acb0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
2acc0 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
2acd0 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
2ace0 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
2acf0 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
2ad00 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
2ad10 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
2ad20 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
2ad30 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
2ad40 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
2ad50 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
2ad60 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
2ad70 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
2ad80 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2ad90 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
2ada0 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
2adb0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2adc0 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
2add0 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
2ade0 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
2adf0 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
2ae00 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
2ae10 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
2ae20 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  ty & OPFLG_OUT2_
2ae30 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
2ae40 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
2ae50 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
2ae60 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
2ae70 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2ae80 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
2ae90 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
2aea0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
2aeb0 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
2aec0 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p3, pOut);.     
2aed0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
2aee0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
2aef0 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
2af00 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
2af10 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
2af20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
2af30 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
2af40 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
2af50 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
2af60 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
2af70 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
2af80 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
2af90 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
2afa0 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
2afb0 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
2afc0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
2afd0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
2afe0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
2aff0 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
2b000 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
2b010 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
2b020 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
2b030 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2b040 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
2b050 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
2b060 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
2b070 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
2b080 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
2b090 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
2b0a0 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
2b0b0 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
2b0c0 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
2b0d0 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
2b0e0 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
2b0f0 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
2b100 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
2b110 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2b120 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
2b130 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
2b140 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
2b150 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
2b160 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
2b170 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
2b180 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2b190 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
2b1a0 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
2b1b0 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
2b1c0 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
2b1d0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2b1e0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2b1f0 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
2b200 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
2b210 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
2b220 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2b230 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2b240 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2b250 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
2b260 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
2b270 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
2b280 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2b290 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2b2a0 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c   here for an SQL
2b2b0 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
2b2c0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2b2d0 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63  _to_misuse:.  rc
2b2e0 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
2b2f0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75  ;.  /* Fall thru
2b300 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   into abort_due_
2b310 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f  to_error */..  /
2b320 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
2b330 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
2b340 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
2b350 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
2b360 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
2b370 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
2b380 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
2b390 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
2b3a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
2b3b0 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
2b3c0 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
2b3d0 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
2b3e0 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
2b3f0 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
2b400 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
2b410 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2b420 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2b430 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
2b440 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
2b450 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
2b460 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
2b470 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
2b480 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
2b490 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
2b4a0 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
2b4b0 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
2b4c0 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
2b4d0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
2b4e0 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
2b4f0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2b500 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
2b510 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
2b520 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2b530 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2b540 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
2b550 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
2b560 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2b570 7d 0a                                            }.