/ Hex Artifact Content
Login

Artifact 74158ea3fd68231720ba75ebec5072eda1ad8cf9:


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 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
0870: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
0880: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
0890: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08a0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08b0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
08c0: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
08d0: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
08e0: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
08f0: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0900: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0910: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0920: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0930: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0940: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0950: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
0960: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0970: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
0980: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
0990: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09a0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
09c0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
09d0: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
09e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
09f0: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a00: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a10: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a20: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a30: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a40: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a50: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0a60: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0a70: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0a80: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0a90: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0aa0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0ab0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0ac0: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0ad0: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0ae0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0af0: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b00: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b10: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b20: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b30: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b40: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b50: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0b60: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0b70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0b80: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0b90: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0ba0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bb0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0bc0: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0bd0: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0be0: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0bf0: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c00: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c10: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c20: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c30: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c40: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c50: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0c60: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0c70: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0c80: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0c90: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ca0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0cc0: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0cd0: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0ce0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0cf0: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d00: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d10: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d20: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d30: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d40: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d50: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0d60: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0d70: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0d80: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0d90: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0da0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0db0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0dc0: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0dd0: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0de0: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0df0: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e00: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e10: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e20: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e30: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e40: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e50: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0e60: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0e70: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0e80: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0e90: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ea0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0eb0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0ec0: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0ed0: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0ee0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0ef0: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f00: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f10: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0f20: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0f30: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0f40: 79 70 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64  ype the OP_Found
0f50: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0f60: 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73 20  ecuted. This is 
0f70: 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65  used to test whe
0f80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
0f90: 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f  foreign key.** o
0fa0: 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  peration impleme
0fb0: 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b  nted using OP_Fk
0fc0: 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e  IsZero is workin
0fd0: 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  g. This variable
0fe0: 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  .** has no funct
0ff0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
1000: 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  o help verify th
1010: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
1020: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  ion of the.** li
1030: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
1040: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
1050: 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
1060: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
1070: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72  ../*.** Test a r
1080: 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20 69  egister to see i
1090: 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68 65  f it exceeds the
10a0: 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d   current maximum
10b0: 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49   blob size..** I
10c0: 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72  f it does, recor
10d0: 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75  d the new maximu
10e0: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a  m blob size..*/.
10f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1100: 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65 66  TE_TEST) && !def
1110: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1120: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23  _BUILTIN_TEST).#
1130: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1140: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20  AX_BLOBSIZE(P)  
1150: 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a  updateMaxBlobsiz
1160: 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  e(P).#else.# def
1170: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1180: 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69  LOBSIZE(P).#endi
1190: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
11a0: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
11b0: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
11c0: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
11d0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
11e0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
11f0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
1200: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
1210: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
1220: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1230: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1240: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1250: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1260: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
1270: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
1280: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  em; }../*.** An 
1290: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12a0: 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65   value (signifie
12b0: 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68  d by the MEM_Eph
12c0: 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e  em flag) contain
12d0: 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  s.** a pointer t
12e0: 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20  o a dynamically 
12f0: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67  allocated string
1300: 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65   where some othe
1310: 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72  r entity.** is r
1320: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
1330: 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74  eallocating that
1340: 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73   string.  Becaus
1350: 65 20 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a  e the register.*
1360: 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72  * does not contr
1370: 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69  ol the string, i
1380: 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74  t might be delet
1390: 65 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 72  ed without the r
13a0: 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69  egister.** knowi
13b0: 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ng it..**.** Thi
13c0: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
13d0: 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ts an ephemeral 
13e0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79  string into a dy
13f0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
1400: 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ted.** string th
1410: 61 74 20 74 68 65 20 72 65 67 69 73 74 65 72 20  at the register 
1420: 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e  itself controls.
1430: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1440: 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73  , it.** converts
1450: 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74   an MEM_Ephem st
1460: 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d  ring into an MEM
1470: 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  _Dyn string..*/.
1480: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1490: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
14a0: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
14b0: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
14c0: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
14d0: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
14e0: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
14f0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  no_mem;}../*.** 
1500: 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64 62 65  Call sqlite3Vdbe
1510: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 29 20  MemExpandBlob() 
1520: 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  on the supplied 
1530: 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65 6d 2a  value (type Mem*
1540: 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75 69 72  ).** P if requir
1550: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ed..*/.#define E
1560: 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28 28 28  xpandBlob(P) (((
1570: 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  P)->flags&MEM_Ze
1580: 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62 65 4d  ro)?sqlite3VdbeM
1590: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a  emExpandBlob(P):
15a0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65  0)../*.** Argume
15b0: 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61  nt pMem points a
15c0: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  t a register tha
15d0: 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64  t will be passed
15e0: 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65   to a.** user-de
15f0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f  fined function o
1600: 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  r returned to th
1610: 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72 65  e user as the re
1620: 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79 2e  sult of a query.
1630: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
1640: 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e   sets the pMem->
1650: 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75 73  type variable us
1660: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
1670: 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20  3_value_*() .** 
1680: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69  routines..*/.voi
1690: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
16a0: 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a 70  StoreType(Mem *p
16b0: 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67  Mem){.  int flag
16c0: 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  s = pMem->flags;
16d0: 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  .  if( flags & M
16e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
16f0: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1700: 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65  TE_NULL;.  }.  e
1710: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1720: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1740: 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a  TE_INTEGER;.  }.
1750: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1760: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
1770: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
1780: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20  SQLITE_FLOAT;.  
1790: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
17a0: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a  gs & MEM_Str ){.
17b0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17c0: 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20   SQLITE_TEXT;.  
17d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d  }else{.    pMem-
17e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42  >type = SQLITE_B
17f0: 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  LOB;.  }.}../*.*
1800: 2a 20 50 72 6f 70 65 72 74 69 65 73 20 6f 66 20  * Properties of 
1810: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 4f 50  opcodes.  The OP
1820: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
1830: 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63 72 65 61  macro is.** crea
1840: 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f 64 65 68  ted by mkopcodeh
1850: 2e 61 77 6b 20 64 75 72 69 6e 67 20 63 6f 6d 70  .awk during comp
1860: 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74 61 20 69  ilation.  Data i
1870: 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72  s obtained.** fr
1880: 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20  om the comments 
1890: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 22 63  following the "c
18a0: 61 73 65 20 4f 50 5f 78 78 78 78 3a 22 20 73 74  ase OP_xxxx:" st
18b0: 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 74  atements in.** t
18c0: 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73  his file.  .*/.s
18d0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
18e0: 67 6e 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65  gned char opcode
18f0: 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46  Property[] = OPF
1900: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a  LG_INITIALIZER;.
1910: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1920: 75 65 20 69 66 20 61 6e 20 6f 70 63 6f 64 65 20  ue if an opcode 
1930: 68 61 73 20 61 6e 79 20 6f 66 20 74 68 65 20 4f  has any of the O
1940: 50 46 4c 47 5f 78 78 78 20 70 72 6f 70 65 72 74  PFLG_xxx propert
1950: 69 65 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64  ies.** specified
1960: 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74   by mask..*/.int
1970: 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 63 6f   sqlite3VdbeOpco
1980: 64 65 48 61 73 50 72 6f 70 65 72 74 79 28 69 6e  deHasProperty(in
1990: 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61  t opcode, int ma
19a0: 73 6b 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6f  sk){.  assert( o
19b0: 70 63 6f 64 65 3e 30 20 26 26 20 6f 70 63 6f 64  pcode>0 && opcod
19c0: 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66 28 6f 70  e<(int)sizeof(op
19d0: 63 6f 64 65 50 72 6f 70 65 72 74 79 29 20 29 3b  codeProperty) );
19e0: 0a 20 20 72 65 74 75 72 6e 20 28 6f 70 63 6f 64  .  return (opcod
19f0: 65 50 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64 65  eProperty[opcode
1a00: 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f  ]&mask)!=0;.}../
1a10: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64  *.** Allocate Vd
1a20: 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  beCursor number 
1a30: 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20  iCur.  Return a 
1a40: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20  pointer to it.  
1a50: 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69  Return NULL.** i
1a60: 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20  f we run out of 
1a70: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69  memory..*/.stati
1a80: 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c  c VdbeCursor *al
1a90: 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20  locateCursor(.  
1aa0: 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20  Vdbe *p,        
1ab0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72        /* The vir
1ac0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a  tual machine */.
1ad0: 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20    int iCur,     
1ae0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1af0: 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65   of the new Vdbe
1b00: 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  Cursor */.  int 
1b10: 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20  nField,         
1b20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
1b30: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62  ields in the tab
1b40: 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  le or index */. 
1b50: 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20   int iDb,       
1b60: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 64         /* When d
1b70: 61 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73  atabase the curs
1b80: 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f  or belongs to, o
1b90: 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73  r -1 */.  int is
1ba0: 42 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20  BtreeCursor     
1bb0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72  /* True for B-Tr
1bc0: 65 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70  ee.  False for p
1bd0: 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76  seudo-table or v
1be0: 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  tab */.){.  /* F
1bf0: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1c00: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1c10: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1c20: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1c30: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1c40: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1c50: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1c60: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1c70: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1c80: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1c90: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1ca0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1cb0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1cc0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1cd0: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1ce0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1cf0: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1d00: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1d10: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1d20: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1d30: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1d40: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1d50: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1d60: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1d70: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1d80: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1d90: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1da0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1db0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1dc0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1dd0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1de0: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1df0: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1e00: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1e10: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1e20: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1e30: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1e40: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1e50: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1e60: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1e70: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1e80: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1e90: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1ea0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1eb0: 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20   **.  ** Memory 
1ec0: 63 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72  cells for cursor
1ed0: 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20  s are allocated 
1ee0: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
1ef0: 65 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73  e address.  ** s
1f00: 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  pace. Memory cel
1f10: 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72  l (p->nMem) corr
1f20: 65 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f  esponds to curso
1f30: 72 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20  r 0. Space for. 
1f40: 20 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20   ** cursor 1 is 
1f50: 6d 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72  managed by memor
1f60: 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d  y cell (p->nMem-
1f70: 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20  1), etc..  */.  
1f80: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e  Mem *pMem = &p->
1f90: 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75  aMem[p->nMem-iCu
1fa0: 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65  r];..  int nByte
1fb0: 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1fc0: 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65  pCx = 0;.  nByte
1fd0: 20 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38   = .      ROUND8
1fe0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
1ff0: 6f 72 29 29 20 2b 20 0a 20 20 20 20 20 20 28 69  or)) + .      (i
2000: 73 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c  sBtreeCursor?sql
2010: 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53  ite3BtreeCursorS
2020: 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20 20 20  ize():0) + .    
2030: 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f    2*nField*sizeo
2040: 66 28 75 33 32 29 3b 0a 0a 20 20 61 73 73 65 72  f(u32);..  asser
2050: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
2060: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
2070: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
2080: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2090: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
20a0: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
20b0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
20c0: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
20d0: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
20e0: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
20f0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
2100: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2110: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
2120: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
2130: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
2140: 30 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70  0, nByte);.    p
2150: 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20  Cx->iDb = iDb;. 
2160: 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d     pCx->nField =
2170: 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28   nField;.    if(
2180: 20 6e 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20   nField ){.     
2190: 20 70 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75   pCx->aType = (u
21a0: 33 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 52 4f  32 *)&pMem->z[RO
21b0: 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
21c0: 43 75 72 73 6f 72 29 29 5d 3b 0a 20 20 20 20 7d  Cursor))];.    }
21d0: 0a 20 20 20 20 69 66 28 20 69 73 42 74 72 65 65  .    if( isBtree
21e0: 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 20 20  Cursor ){.      
21f0: 70 43 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28  pCx->pCursor = (
2200: 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20  BtCursor*).     
2210: 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f       &pMem->z[RO
2220: 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
2230: 43 75 72 73 6f 72 29 29 2b 32 2a 6e 46 69 65 6c  Cursor))+2*nFiel
2240: 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a  d*sizeof(u32)];.
2250: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
2260: 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn pCx;.}../*.**
2270: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2280: 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  a value into a n
2290: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
22a0: 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a  ation if we can.
22b0: 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74  ** do so without
22c0: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
22d0: 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
22e0: 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74  words, if the st
22f0: 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69  ring.** looks li
2300: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e  ke a number, con
2310: 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e  vert it into a n
2320: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f  umber.  If it do
2330: 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c  es not.** look l
2340: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65  ike a number, le
2350: 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f  ave it alone..*/
2360: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
2370: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2380: 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20  y(Mem *pRec){.  
2390: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
23a0: 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d   & (MEM_Real|MEM
23b0: 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20  _Int))==0 ){.   
23c0: 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20   int realnum;.  
23d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
23e0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65  NulTerminate(pRe
23f0: 63 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65  c);.    if( (pRe
2400: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2410: 29 0a 20 20 20 20 20 20 20 20 20 26 26 20 73 71  ).         && sq
2420: 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52  lite3IsNumber(pR
2430: 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c  ec->z, &realnum,
2440: 20 70 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20   pRec->enc) ){. 
2450: 20 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a       i64 value;.
2460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2470: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2480: 70 52 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46  pRec, SQLITE_UTF
2490: 38 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72  8);.      if( !r
24a0: 65 61 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65  ealnum && sqlite
24b0: 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c  3Atoi64(pRec->z,
24c0: 20 26 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20   &value) ){.    
24d0: 20 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20      pRec->u.i = 
24e0: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d  value;.        M
24f0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 52  emSetTypeFlag(pR
2500: 65 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ec, MEM_Int);.  
2510: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2530: 6d 52 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a  mRealify(pRec);.
2540: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2550: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
2560: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
2570: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
2580: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2590: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
25a0: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
25b0: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
25c0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
25d0: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
25e0: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
25f0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2600: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2610: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2620: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
2630: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
2640: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2650: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
2660: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
2670: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
2680: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2690: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
26a0: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
26b0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
26c0: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
26d0: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
26e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
26f0: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2700: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2710: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2720: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
2730: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
2740: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
2750: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
2760: 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20  _AFF_NONE:.**   
2770: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
2780: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2790: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
27a0: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
27b0: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
27c0: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
27d0: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
27e0: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
27f0: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2800: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2810: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2820: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
2830: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
2840: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
2850: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
2860: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
2870: 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  T ){.    /* Only
2880: 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e   attempt the con
2890: 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20  version to TEXT 
28a0: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  if there is an i
28b0: 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20  nteger or real. 
28c0: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
28d0: 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e  tion (blob and N
28e0: 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63  ULL do not get c
28f0: 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f  onverted) but no
2900: 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72   string.    ** r
2910: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20  epresentation.. 
2920: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d     */.    if( 0=
2930: 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  =(pRec->flags&ME
2940: 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d  M_Str) && (pRec-
2950: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c  >flags&(MEM_Real
2960: 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20  |MEM_Int)) ){.  
2970: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2980: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63  emStringify(pRec
2990: 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20  , enc);.    }.  
29a0: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d    pRec->flags &=
29b0: 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f   ~(MEM_Real|MEM_
29c0: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Int);.  }else if
29d0: 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49  ( affinity!=SQLI
29e0: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20  TE_AFF_NONE ){. 
29f0: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2a00: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2a10: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2a20: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2a30: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
2a40: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
2a50: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2a60: 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  C );.    applyNu
2a70: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52  mericAffinity(pR
2a80: 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  ec);.    if( pRe
2a90: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2aa0: 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eal ){.      sql
2ab0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2ac0: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2ad0: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
2ae0: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2af0: 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66   the type of a f
2b00: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
2b10: 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c   or a result col
2b20: 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75  umn.** into a nu
2b30: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
2b40: 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65  tion.  Use eithe
2b50: 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  r INTEGER or REA
2b60: 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69  L whichever.** i
2b70: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20  s appropriate.  
2b80: 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20  But only do the 
2b90: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74  conversion if it
2ba0: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74   is possible wit
2bb0: 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20  hout.** loss of 
2bc0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
2bd0: 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73  return the revis
2be0: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61  ed type of the a
2bf0: 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  rgument..**.** T
2c00: 68 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49  his is an EXPERI
2c10: 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69  MENTAL api and i
2c20: 73 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61  s subject to cha
2c30: 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a  nge or removal..
2c40: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  */.int sqlite3_v
2c50: 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70  alue_numeric_typ
2c60: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  e(sqlite3_value 
2c70: 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70  *pVal){.  Mem *p
2c80: 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c  Mem = (Mem*)pVal
2c90: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
2ca0: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2cb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2cc0: 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d 29 3b  StoreType(pMem);
2cd0: 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e  .  return pMem->
2ce0: 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  type;.}../*.** E
2cf0: 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20  xported version 
2d00: 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  of applyAffinity
2d10: 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72  (). This one wor
2d20: 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61  ks on sqlite3_va
2d30: 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68  lue*, .** not th
2d40: 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20  e internal Mem* 
2d50: 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  type..*/.void sq
2d60: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2d70: 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74  ffinity(.  sqlit
2d80: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20  e3_value *pVal, 
2d90: 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20  .  u8 affinity, 
2da0: 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61  .  u8 enc.){.  a
2db0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65  pplyAffinity((Me
2dc0: 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69  m *)pVal, affini
2dd0: 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66  ty, enc);.}..#if
2de0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2df0: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
2e00: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
2e10: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2e20: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
2e30: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
2e40: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
2e50: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
2e60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
2e70: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
2e80: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
2e90: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
2ea0: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
2eb0: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
2ec0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
2ed0: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
2ee0: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
2ef0: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
2f00: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
2f10: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
2f20: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
2f30: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
2f40: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
2f50: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
2f60: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2f70: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2f80: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2f90: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2fa0: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
2fb0: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
2fc0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2fd0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
2fe0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2ff0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3000: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3010: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
3020: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3030: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
3040: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3050: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
3060: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  ';.    }..    sq
3070: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3080: 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20  00, zCsr, "%c", 
3090: 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  c);.    zCsr += 
30a0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
30b0: 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCsr);.    sqlit
30c0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
30d0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
30e0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
30f0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3100: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
3110: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3120: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3130: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3140: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3150: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
3160: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
3170: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
3180: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3190: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
31a0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
31b0: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
31c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
31d0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
31e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
31f0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
3200: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
3210: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
3220: 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  z;.    }..    sq
3230: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3240: 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c  00, zCsr, "]%s",
3250: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3260: 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20  enc]);.    zCsr 
3270: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3280: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  30(zCsr);.    if
3290: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
32a0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
32b0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
32c0: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
32d0: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
32e0: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
32f0: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3300: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3310: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3320: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3330: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3340: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3350: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
3360: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3370: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
3380: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3390: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
33a0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
33b0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
33c0: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
33d0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
33e0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
33f0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3400: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3410: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3420: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3430: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3440: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3450: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3460: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3470: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3480: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3490: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
34a0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
34b0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
34c0: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
34d0: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
34e0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
34f0: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3500: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3510: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3520: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3530: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3540: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3550: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3560: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3570: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3580: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3590: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
35a0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
35b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
35c0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
35d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
35e0: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
35f0: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3600: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3610: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3620: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3630: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3640: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3650: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3660: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3670: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3680: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3690: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
36a0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
36b0: 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20  TracePrint(FILE 
36c0: 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  *out, Mem *p){. 
36d0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
36e0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
36f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3700: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3710: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3720: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3730: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3740: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
3760: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
3770: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3780: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3790: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37a0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
37b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
37c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
37d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
37e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
37f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3800: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3810: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3820: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3830: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3840: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
3850: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
3860: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3870: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3880: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3890: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
38a0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
38b0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
38c0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
38d0: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
38e0: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
38f0: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3900: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3910: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3920: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3930: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3940: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3950: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
3960: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
3970: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
3980: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3990: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
39a0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
39b0: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
39c0: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
39d0: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
39e0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
39f0: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3a00: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3a10: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3a20: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3a30: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3a40: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3a50: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3a60: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3a70: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3a80: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3a90: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
3aa0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
3ab0: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
3ac0: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
3ad0: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
3ae0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
3af0: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3b00: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3b10: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3b20: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3b30: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3b40: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3b50: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3b60: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3b70: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3b80: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3b90: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3ba0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3bb0: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3bc0: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3bd0: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3be0: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3bf0: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3c00: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3c10: 61 74 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  at we needed.  B
3c20: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3c30: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3c40: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3c50: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3c60: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3c70: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3c80: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3c90: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3ca0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3cb0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3cc0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3cd0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3ce0: 44 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74  DEBUG.static int
3cf0: 20 66 69 6c 65 45 78 69 73 74 73 28 73 71 6c 69   fileExists(sqli
3d00: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
3d10: 68 61 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69  har *zFile){.  i
3d20: 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e  nt res = 0;.  in
3d30: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
3d40: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
3d50: 54 45 53 54 0a 20 20 2f 2a 20 49 66 20 77 65 20  TEST.  /* If we 
3d60: 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 74 65  are currently te
3d70: 73 74 69 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c  sting IO errors,
3d80: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c   then do not cal
3d90: 6c 20 4f 73 41 63 63 65 73 73 28 29 20 74 6f 0a  l OsAccess() to.
3da0: 20 20 2a 2a 20 74 65 73 74 20 66 6f 72 20 74 68    ** test for th
3db0: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 7a 46  e presence of zF
3dc0: 69 6c 65 2e 20 54 68 69 73 20 69 73 20 62 65 63  ile. This is bec
3dd0: 61 75 73 65 20 61 6e 79 20 49 4f 20 65 72 72 6f  ause any IO erro
3de0: 72 20 74 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75  r that.  ** occu
3df0: 72 73 20 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74  rs here will not
3e00: 20 62 65 20 72 65 70 6f 72 74 65 64 2c 20 63 61   be reported, ca
3e10: 75 73 69 6e 67 20 74 68 65 20 74 65 73 74 20 74  using the test t
3e20: 6f 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65  o fail..  */.  e
3e30: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
3e40: 33 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69  3_io_error_pendi
3e50: 6e 67 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  ng;.  if( sqlite
3e60: 33 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69  3_io_error_pendi
3e70: 6e 67 3c 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20  ng<=0 ).#endif. 
3e80: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
3e90: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
3ea0: 2c 20 7a 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  , zFile, SQLITE_
3eb0: 41 43 43 45 53 53 5f 45 58 49 53 54 53 2c 20 26  ACCESS_EXISTS, &
3ec0: 72 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  res);.  return (
3ed0: 72 65 73 20 26 26 20 72 63 3d 3d 53 51 4c 49 54  res && rc==SQLIT
3ee0: 45 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  E_OK);.}.#endif.
3ef0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
3f00: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
3f10: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
3f20: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
3f30: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
3f40: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
3f50: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
3f60: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
3f70: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
3f80: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
3f90: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
3fa0: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
3fb0: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
3fc0: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
3fd0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
3fe0: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
3ff0: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
4000: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
4010: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
4020: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
4030: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
4040: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
4050: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
4060: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
4070: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
4080: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
4090: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
40a0: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
40b0: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
40c0: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
40d0: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
40e0: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
40f0: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
4100: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  if../*.** Execut
4110: 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56  e as much of a V
4120: 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77  DBE program as w
4130: 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72  e can then retur
4140: 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  n..**.** sqlite3
4150: 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20  VdbeMakeReady() 
4160: 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62  must be called b
4170: 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69  efore this routi
4180: 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
4190: 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67  * close the prog
41a0: 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c  ram with a final
41b0: 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20   OP_Halt and to 
41c0: 73 65 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62  set up the callb
41d0: 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  acks.** and the 
41e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f  error message po
41f0: 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  inter..**.** Whe
4200: 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72  never a row or r
4210: 65 73 75 6c 74 20 64 61 74 61 20 69 73 20 61 76  esult data is av
4220: 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f  ailable, this ro
4230: 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65  utine will eithe
4240: 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20  r.** invoke the 
4250: 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20  result callback 
4260: 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65  (if there is one
4270: 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68  ) or return with
4280: 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a  .** SQLITE_ROW..
4290: 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65  **.** If an atte
42a0: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f  mpt is made to o
42b0: 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74  pen a locked dat
42c0: 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73  abase, then this
42d0: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c   routine.** will
42e0: 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74   either invoke t
42f0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
4300: 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e   (if there is on
4310: 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a  e) or it will.**
4320: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
4330: 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  USY..**.** If an
4340: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61   error occurs, a
4350: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
4360: 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65  is written to me
4370: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
4380: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
4390: 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45  lloc() and p->zE
43a0: 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f  rrMsg is made to
43b0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d   point to that m
43c0: 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72  emory..** The er
43d0: 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72  ror code is stor
43e0: 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20  ed in p->rc and 
43f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
4400: 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f  urns SQLITE_ERRO
4410: 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  R..**.** If the 
4420: 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65  callback ever re
4430: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
4440: 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d  then the program
4450: 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69   exits.** immedi
4460: 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69  ately.  There wi
4470: 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d  ll be no error m
4480: 65 73 73 61 67 65 20 62 75 74 20 74 68 65 20 70  essage but the p
4490: 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a  ->rc field is.**
44a0: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41   set to SQLITE_A
44b0: 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f  BORT and this ro
44c0: 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72  utine will retur
44d0: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
44e0: 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61  **.** A memory a
44f0: 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20  llocation error 
4500: 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20  causes p->rc to 
4510: 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
4520: 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a  _NOMEM and this.
4530: 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65  ** routine to re
4540: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4550: 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66  R..**.** Other f
4560: 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75  atal errors retu
4570: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
4580: 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69  .**.** After thi
4590: 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69  s routine has fi
45a0: 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56  nished, sqlite3V
45b0: 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68  dbeFinalize() sh
45c0: 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20  ould be.** used 
45d0: 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20  to clean up the 
45e0: 6d 65 73 73 20 74 68 61 74 20 77 61 73 20 6c 65  mess that was le
45f0: 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e  ft behind..*/.in
4600: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
4610: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
4640: 7b 0a 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20  {.  int pc;     
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4660: 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  * The program co
4670: 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 70  unter */.  Op *p
4680: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4690: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
46a0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
46b0: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
46c0: 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61  OK;        /* Va
46d0: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f  lue to return */
46e0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
46f0: 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a   p->db;       /*
4700: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   The database */
4710: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4720: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4730: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
4740: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20  coding */.  Mem 
4750: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
4760: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
4770: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4780: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
4790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
47a0: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
47b0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
47c0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
47d0: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
47e0: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
47f0: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4800: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4810: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20  operand */.  u8 
4820: 6f 70 50 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e  opProperty;.  in
4830: 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20  t iCompare = 0; 
4840: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
4850: 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f  lt of last OP_Co
4860: 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20  mpare operation 
4870: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4880: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4890: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
48a0: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
48b0: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64  _Compare */.#ifd
48c0: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
48d0: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
48f0: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
4900: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
4910: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67  de */.  int orig
4920: 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Pc;             
4930: 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f     /* Program co
4940: 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f  unter at start o
4950: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
4960: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4970: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4980: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 6e  CALLBACK.  int n
4990: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
49a0: 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73        /* Opcodes
49b0: 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20   executed since 
49c0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
49d0: 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f  k. */.#endif.  /
49e0: 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b  *** INSERT STACK
49f0: 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f   UNION HERE ***/
4a00: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d  ..  assert( p->m
4a10: 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
4a20: 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69  _RUN );  /* sqli
4a30: 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66  te3_step() verif
4a40: 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73  ies this */.  as
4a50: 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d  sert( db->magic=
4a60: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
4a70: 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  SY );.  sqlite3V
4a80: 64 62 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74  dbeMutexArrayEnt
4a90: 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e  er(p);.  if( p->
4aa0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
4ab0: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
4ac0: 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c  happens if a mal
4ad0: 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63  loc() inside a c
4ae0: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  all to sqlite3_c
4af0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a  olumn_text() or.
4b00: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63      ** sqlite3_c
4b10: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66  olumn_text16() f
4b20: 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67  ailed.  */.    g
4b30: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
4b40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d    assert( p->rc=
4b50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
4b60: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  >rc==SQLITE_BUSY
4b70: 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51   );.  p->rc = SQ
4b80: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
4b90: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4ba0: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
4bb0: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
4bc0: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
4bd0: 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   = 0;.  CHECK_FO
4be0: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73  R_INTERRUPT;.  s
4bf0: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4c00: 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66 20  eSql(p);.#ifdef 
4c10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4c20: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4c30: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4c40: 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26 26   p->pc==0 .   &&
4c50: 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20   ((p->db->flags 
4c60: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  & SQLITE_VdbeLis
4c70: 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78 69  ting) || fileExi
4c80: 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65 78  sts(db, "vdbe_ex
4c90: 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20 20  plain")).  ){.  
4ca0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69    int i;.    pri
4cb0: 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61  ntf("VDBE Progra
4cc0: 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a  m Listing:\n");.
4cd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4ce0: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4cf0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4d00: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  p; i++){.      s
4d10: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4d20: 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70 2d  p(stdout, i, &p-
4d30: 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  >aOp[i]);.    }.
4d40: 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45 78    }.  if( fileEx
4d50: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 74  ists(db, "vdbe_t
4d60: 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70 2d  race") ){.    p-
4d70: 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74 3b  >trace = stdout;
4d80: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4d90: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4da0: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4db0: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4dc0: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4dd0: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
4de0: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
4df0: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
4e00: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
4e10: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
4e20: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
4e30: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
4e40: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4e50: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4e60: 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e 61  .    pOp = &p->a
4e70: 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20  Op[pc];..    /* 
4e80: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69  Only allow traci
4e90: 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ng if SQLITE_DEB
4ea0: 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
4eb0: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4ec0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
4ed0: 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
4ee0: 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b      if( pc==0 ){
4ef0: 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
4f00: 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20  "VDBE Execution 
4f10: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20  Trace:\n");.    
4f20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4f30: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4f40: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4f50: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e  3VdbePrintOp(p->
4f60: 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b  trace, pc, pOp);
4f70: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4f80: 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70 63  ->trace==0 && pc
4f90: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
4fa0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4fb0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20 69  alloc();.      i
4fc0: 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  f( fileExists(db
4fd0: 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63 65  , "vdbe_sqltrace
4fe0: 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ") ){.        sq
4ff0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
5000: 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  l(p);.      }.  
5010: 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65      sqlite3EndBe
5020: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
5030: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
5040: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
5050: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
5060: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
5070: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
5080: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
5090: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
50a0: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
50b0: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
50c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
50d0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
50e0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
50f0: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
5100: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5110: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
5120: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5130: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
5140: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
5150: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
5160: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
5170: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
5180: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
5190: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a  _CALLBACK.    /*
51a0: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
51b0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
51c0: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
51d0: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
51e0: 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f   number.    ** o
51f0: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
5200: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
5210: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
5220: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
5230: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62     ** sqlite3Vdb
5240: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
5250: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
5260: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
5270: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
5280: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
5290: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
52a0: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
52b0: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
52c0: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
52d0: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
52e0: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
52f0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
5300: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
5310: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  .      if( db->n
5320: 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72  ProgressOps==nPr
5330: 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20  ogressOps ){.   
5340: 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20       int prc;.  
5350: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
5360: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
5370: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
5380: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20  to_misuse;.     
5390: 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72 6f     prc =db->xPro
53a0: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
53b0: 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20  essArg);.       
53c0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
53d0: 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
53e0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
53f0: 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28  use;.        if(
5400: 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20   prc!=0 ){.     
5410: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
5420: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
5430: 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
5440: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20  error_halt;.    
5450: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50      }.        nP
5460: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
5470: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50        }.      nP
5480: 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20  rogressOps++;.  
5490: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
54a0: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
54b0: 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  up processing fo
54c0: 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68 61  r any opcode tha
54d0: 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20 20  t is marked.    
54e0: 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75 74  ** with the "out
54f0: 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74 61  2-prerelease" ta
5500: 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65 73  g.  Such opcodes
5510: 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a 20   have a single. 
5520: 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68 69     ** output whi
5530: 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ch is specified 
5540: 62 79 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  by the P2 parame
5550: 74 65 72 2e 20 20 54 68 65 20 50 32 20 72 65 67  ter.  The P2 reg
5560: 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73 20  ister.    ** is 
5570: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 61  initialized to a
5580: 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20   NULL..    */.  
5590: 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 6f    opProperty = o
55a0: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
55b0: 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20  p->opcode];.    
55c0: 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26  if( opProperty &
55d0: 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45   (OPFLG_OUT2_PRE
55e0: 52 45 4c 45 41 53 45 20 7c 20 4f 50 46 4c 47 5f  RELEASE | OPFLG_
55f0: 49 4e 31 20 7c 20 4f 50 46 4c 47 5f 49 4e 32 0a  IN1 | OPFLG_IN2.
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 20 20 20 20 20 20 7c 20 4f 50 46 4c 47 5f 49 4e        | OPFLG_IN
5620: 33 20 7c 20 4f 50 46 4c 47 5f 4f 55 54 32 20 7c  3 | OPFLG_OUT2 |
5630: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 0a 20 20 20   OPFLG_OUT3).   
5640: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 6f   ){.      if( (o
5650: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5660: 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
5670: 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  E)!=0 ){.       
5680: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5690: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
56a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
56b0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
56c0: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
56d0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
56e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
56f0: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
5700: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20  l(pOut);.       
5710: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
5720: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
5730: 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20   pOut->n = 0;.  
5740: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5750: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5760: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
5770: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
5780: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5790: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  0 );.          a
57a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
57b0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
57c0: 20 20 20 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e       pIn1 = &p->
57d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
57e0: 20 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45           REGISTE
57f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5800: 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 20 20   pIn1);.        
5810: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  }.        if( (o
5820: 70 50 72 6f 70 65 72 74 79 20 26 20 28 4f 50 46  pProperty & (OPF
5830: 4c 47 5f 49 4e 32 7c 4f 50 46 4c 47 5f 4f 55 54  LG_IN2|OPFLG_OUT
5840: 32 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  2))!=0 ){.      
5850: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5860: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
5870: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5880: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5890: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
58a0: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
58b0: 50 46 4c 47 5f 4f 55 54 32 29 3d 3d 30 20 7c 7c  PFLG_OUT2)==0 ||
58c0: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
58d0: 50 46 4c 47 5f 49 4e 33 29 3d 3d 30 20 29 3b 0a  PFLG_IN3)==0 );.
58e0: 20 20 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d            pIn2 =
58f0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
5900: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
5910: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
5920: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 28   (opProperty & (
5930: 4f 50 46 4c 47 5f 49 4e 33 7c 4f 50 46 4c 47 5f  OPFLG_IN3|OPFLG_
5940: 4f 55 54 33 29 29 21 3d 30 20 29 7b 0a 20 20 20  OUT3))!=0 ){.   
5950: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5960: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5970: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5980: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5990: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 49 6e 33  ;.          pIn3
59a0: 20 3d 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d   = pOut = &p->aM
59b0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
59c0: 20 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51       }.#ifdef SQ
59d0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
59e0: 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74     if( opPropert
59f0: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 20 29 7b  y & OPFLG_IN2 ){
5a00: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5a10: 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 20  pOp->p2, pIn2); 
5a20: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 70  }.        if( op
5a30: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5a40: 5f 49 4e 33 20 29 7b 20 52 45 47 49 53 54 45 52  _IN3 ){ REGISTER
5a50: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
5a60: 70 49 6e 33 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  pIn3); }.#endif.
5a70: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
5a80: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5a90: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ae0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5af0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5b00: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5b10: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5b20: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5b30: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5b40: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5b50: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5b60: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5b70: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5b80: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5b90: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5ba0: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5bb0: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5bc0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5bd0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5be0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5bf0: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5c00: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5c10: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5c20: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5c30: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5c40: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5c50: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5c60: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5c70: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5c80: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5c90: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5ca0: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5cb0: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5cc0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5cd0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5ce0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5cf0: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5d00: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5d10: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5d20: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5d30: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5d40: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5d50: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5d60: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5d70: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5d80: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5d90: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5da0: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5db0: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5dc0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5dd0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5de0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5df0: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5e00: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5e10: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5e20: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5e30: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5e40: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5e50: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5e60: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5e70: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5e80: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5e90: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5ea0: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5eb0: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5ec0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5ed0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5ee0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5ef0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5f00: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5f10: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5f20: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5f30: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5f40: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5f50: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5f60: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5f70: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5f80: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5f90: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5fa0: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5fb0: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5fc0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5fd0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
5fe0: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
5ff0: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
6000: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
6010: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
6020: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
6030: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
6040: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
6050: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
6060: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
6070: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
6080: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
6090: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
60a0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
60b0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
60c0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
60d0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
60e0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
60f0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
6100: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
6110: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
6120: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
6130: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
6140: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
6150: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
6160: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
6170: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
6180: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
6190: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
61a0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
6200: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
6210: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
6220: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
6230: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
6240: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
6250: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
6260: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
6270: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
6280: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
6290: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
62a0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
62b0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
62d0: 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f  jump */.  CHECK_
62e0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
62f0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
6300: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6310: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6320: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6330: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6340: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6350: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6360: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6370: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6380: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
6390: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
63a0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61  jump, in1 */.  a
63b0: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
63c0: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
63d0: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
63e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
63f0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6400: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6410: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6420: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
6430: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
6440: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
6450: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
6460: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
6470: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6480: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
6490: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
64a0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P1..*/.case OP_R
64b0: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
64c0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61     /* in1 */.  a
64d0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
64e0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
64f0: 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31    pc = (int)pIn1
6500: 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a  ->u.i;.  break;.
6510: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59  }../* Opcode:  Y
6520: 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ield P1 * * * *.
6530: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
6540: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
6550: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
6560: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6570: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
6580: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6590: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  in1 */.  int pcD
65a0: 65 73 74 3b 0a 20 20 61 73 73 65 72 74 28 20 28  est;.  assert( (
65b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
65c0: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70  M_Dyn)==0 );.  p
65d0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
65e0: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
65f0: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6600: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
6610: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
6620: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6630: 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73  1);.  pc = pcDes
6640: 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  t;.  break;.}../
6650: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49  * Opcode:  HaltI
6660: 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20  fNull  P1 P2 P3 
6670: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P4 *.**.** Check
6680: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
6690: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69  gister P3.  If i
66a0: 73 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48  s is NULL then H
66b0: 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72  alt using.** par
66c0: 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61  ameter P1, P2, a
66d0: 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73  nd P4 as if this
66e0: 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73   were a Halt ins
66f0: 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
6700: 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
6710: 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74  gister P3 is not
6720: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73   NULL, then this
6730: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
6740: 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
6750: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
6760: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 69     /* in3 */.  i
6770: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
6780: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
6790: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
67a0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
67b0: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
67c0: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
67d0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
67e0: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
67f0: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
6800: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
6810: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
6820: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
6830: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
6840: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
6850: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
6860: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
6870: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
6880: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
6890: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
68a0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
68b0: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
68c0: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
68d0: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
68e0: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
68f0: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
6900: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
6910: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
6920: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
6930: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
6940: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
6950: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
6960: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
6970: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
6980: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
6990: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
69a0: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
69b0: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
69c0: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
69d0: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
69e0: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
69f0: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
6a00: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
6a10: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
6a20: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
6a30: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
6a40: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
6a50: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
6a60: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
6a70: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
6a80: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
6a90: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
6aa0: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
6ab0: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
6ac0: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
6ad0: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
6ae0: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
6af0: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
6b00: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
6b10: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66 28  OP_Halt: {.  if(
6b20: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
6b30: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
6b40: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
6b50: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
6b60: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
6b70: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
6b80: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65  ame. */.    Vdbe
6b90: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20  Frame *pFrame = 
6ba0: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
6bb0: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
6bc0: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
6bd0: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
6be0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
6bf0: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
6c00: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d  hange);.    pc =
6c10: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
6c20: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
6c30: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
6c40: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
6c50: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
6c60: 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f  tion pc is the O
6c70: 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69  P_Program that i
6c80: 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70  nvoked the sub-p
6c90: 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a  rogram .      **
6ca0: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
6cb0: 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20   halted. If the 
6cc0: 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  p2 instruction o
6cd0: 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20  f this OP_Halt. 
6ce0: 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74       ** instruct
6cf0: 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45  ion is set to OE
6d00: 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68  _Ignore, then th
6d10: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73  e sub-program is
6d20: 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20   throwing.      
6d30: 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63  ** an IGNORE exc
6d40: 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20  eption. In this 
6d50: 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65  case jump to the
6d60: 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69   address specifi
6d70: 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74  ed.      ** as t
6d80: 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c  he p2 of the cal
6d90: 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e  ling OP_Program.
6da0: 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20    */.      pc = 
6db0: 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b  p->aOp[pc].p2-1;
6dc0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6dd0: 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20 3d  ;.  }..  p->rc =
6de0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65   pOp->p1;.  p->e
6df0: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38  rrorAction = (u8
6e00: 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70  )pOp->p2;.  p->p
6e10: 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70 4f  c = pc;.  if( pO
6e20: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73  p->p4.z ){.    s
6e30: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
6e40: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
6e50: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
6e60: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
6e70: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
6e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
6e90: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
6ea0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
6eb0: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
6ec0: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
6ed0: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
6ee0: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
6ef0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
6f00: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
6f10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
6f20: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43   p->rc==SQLITE_C
6f30: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
6f40: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6f50: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
6f60: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b  eferredCons>0 );
6f70: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
6f80: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
6f90: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
6fa0: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
6fb0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
6fc0: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
6fd0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
6fe0: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
6ff0: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
7000: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7010: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7020: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
7030: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7040: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
7050: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
7060: 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  nt;.  pOut->u.i 
7070: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
7080: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7090: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
70a0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
70b0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
70c0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
70d0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
70e0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
70f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7100: 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20  se OP_Int64: {  
7110: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7120: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7130: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
7140: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
7150: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7160: 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Int;.  pOut->u.i
7170: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
7180: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7190: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
71a0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
71b0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
71c0: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
71d0: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
71e0: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
71f0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
7200: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7210: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
7220: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7230: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d   TK_FLOAT, out2-
7240: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7250: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7260: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
7270: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
7280: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
7290: 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a  );.  pOut->r = *
72a0: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20  pOp->p4.pReal;. 
72b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
72c0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
72d0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
72e0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
72f0: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
7300: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
7310: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
7320: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
7330: 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66  an OP_String bef
7340: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
7350: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
7360: 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   time..*/.case O
7370: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
7380: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7390: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
73a0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
73b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
73c0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
73d0: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
73e0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
73f0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
7400: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
7410: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7420: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
7430: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
7440: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
7450: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7460: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7470: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
7480: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
7490: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
74a0: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
74b0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
74c0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
74d0: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
74e0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
74f0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
7500: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
7510: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61  ssert( pOut->zMa
7520: 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b  lloc==pOut->z );
7530: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
7540: 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
7550: 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  yn );.    pOut->
7560: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7570: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
7580: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
7590: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pOut->flags &= ~
75a0: 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28  MEM_Dyn;.    if(
75b0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
75c0: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
75d0: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
75e0: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
75f0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
7600: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
7610: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
7620: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
7630: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
7640: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
7650: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
7660: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
7670: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
7680: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
7690: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
76a0: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
76b0: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
76c0: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
76d0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
76e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
76f0: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
7700: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
7710: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
7720: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
7730: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P2..*/.case OP_S
7740: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
7750: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7760: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7770: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
7780: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
7790: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
77a0: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
77b0: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
77c0: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
77d0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
77e0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
77f0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
7800: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
7810: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7820: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32  pcode: Null * P2
7830: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
7840: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
7850: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7860: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
7870: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7880: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7890: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
78a0: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
78b0: 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  2 * P4.**.** P4 
78c0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
78d0: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
78e0: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
78f0: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
7900: 65 67 69 73 74 65 72 20 50 32 2e 20 54 68 69 73  egister P2. This
7910: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
7920: 6e 6f 74 20 63 6f 64 65 64 20 64 69 72 65 63 74  not coded direct
7930: 6c 79 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d  ly.** by the com
7940: 70 69 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20  piler. Instead, 
7950: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79  the compiler lay
7960: 65 72 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20  er specifies.** 
7970: 61 6e 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70  an OP_HexBlob op
7980: 63 6f 64 65 2c 20 77 69 74 68 20 74 68 65 20 68  code, with the h
7990: 65 78 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ex string repres
79a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  entation of.** t
79b0: 68 65 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54  he blob as P4. T
79c0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
79d0: 61 6e 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20  ansformed to an 
79e0: 4f 50 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66  OP_Blob.** the f
79f0: 69 72 73 74 20 74 69 6d 65 20 69 74 20 69 73 20  irst time it is 
7a00: 65 78 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73  executed..*/.cas
7a10: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7a30: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7a40: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7a50: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
7a60: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71  X_LENGTH );.  sq
7a70: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7a80: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7a90: 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  .z, pOp->p1, 0, 
7aa0: 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  0);.  pOut->enc 
7ab0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
7ac0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7ad0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
7ae0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7af0: 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 50  Variable P1 P2 P
7b00: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61  3 P4 *.**.** Tra
7b10: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
7b20: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
7b30: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ters P1..P1+P3-1
7b40: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 0a   into registers.
7b50: 2a 2a 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 0a  ** P2..P2+P3-1..
7b60: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
7b70: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
7b80: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
7b90: 70 70 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64  ppears in P4 and
7ba0: 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50   P3==1..** The P
7bb0: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
7bc0: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
7bd0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
7be0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
7bf0: 69 61 62 6c 65 3a 20 7b 0a 20 20 69 6e 74 20 70  iable: {.  int p
7c00: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  1;          /* V
7c10: 61 72 69 61 62 6c 65 20 74 6f 20 63 6f 70 79 20  ariable to copy 
7c20: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
7c30: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
7c40: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
7c50: 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  o */.  int n;   
7c60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7c70: 72 20 6f 66 20 76 61 6c 75 65 73 20 6c 65 66 74  r of values left
7c80: 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 4d 65   to copy */.  Me
7c90: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
7ca0: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
7cb0: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
7cc0: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  p1 = pOp->p1 - 1
7cd0: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
7ce0: 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ;.  n = pOp->p3;
7cf0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30  .  assert( p1>=0
7d00: 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 56 61   && p1+n<=p->nVa
7d10: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
7d20: 32 3e 3d 31 20 26 26 20 70 32 2b 6e 2d 31 3c 3d  2>=1 && p2+n-1<=
7d30: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73  p->nMem );.  ass
7d40: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  ert( pOp->p4.z==
7d50: 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20  0 || pOp->p3==1 
7d60: 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b  || pOp->p3==0 );
7d70: 0a 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 3e  ..  while( n-- >
7d80: 20 30 20 29 7b 0a 20 20 20 20 70 56 61 72 20 3d   0 ){.    pVar =
7d90: 20 26 70 2d 3e 61 56 61 72 5b 70 31 2b 2b 5d 3b   &p->aVar[p1++];
7da0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
7db0: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
7dc0: 61 72 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ar) ){.      got
7dd0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
7de0: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  .    pOut = &p->
7df0: 61 4d 65 6d 5b 70 32 2b 2b 5d 3b 0a 20 20 20 20  aMem[p2++];.    
7e00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
7e10: 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f  leaseExternal(pO
7e20: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
7e30: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
7e40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7e50: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
7e60: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
7e70: 74 61 74 69 63 29 3b 0a 20 20 20 20 55 50 44 41  tatic);.    UPDA
7e80: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7e90: 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pOut);.  }.  bre
7ea0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7eb0: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
7ec0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
7ed0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
7ee0: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
7ef0: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
7f00: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
7f10: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
7f20: 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65   P1..P1+P1-1 are
7f30: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
7f40: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
7f50: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
7f60: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
7f70: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
7f80: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
7f90: 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20  verlap..*/.case 
7fa0: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61  OP_Move: {.  cha
7fb0: 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a  r *zMalloc;   /*
7fc0: 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c   Holding variabl
7fd0: 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20  e for allocated 
7fe0: 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
7ff0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
8000: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
8010: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
8020: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
8030: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
8040: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
8050: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
8060: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
8070: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
8080: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
8090: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
80a0: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
80b0: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
80c0: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
80d0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
80e0: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
80f0: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d  );..  pIn1 = &p-
8100: 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  >aMem[p1];.  pOu
8110: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d  t = &p->aMem[p2]
8120: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
8130: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8140: 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  ut<=&p->aMem[p->
8150: 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73  nMem] );.    ass
8160: 65 72 74 28 20 70 49 6e 31 3c 3d 26 70 2d 3e 61  ert( pIn1<=&p->a
8170: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
8180: 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f      zMalloc = pO
8190: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20  ut->zMalloc;.   
81a0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
81b0: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
81c0: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
81d0: 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31   pIn1);.    pIn1
81e0: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
81f0: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
8200: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
8210: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
8220: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
8230: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8240: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
8250: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
8260: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
8270: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
8280: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8290: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
82a0: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
82b0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
82c0: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
82d0: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
82e0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
82f0: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
8300: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
8310: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
8320: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
8330: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
8340: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
8350: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
8360: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
8370: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
8380: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70  M_Ephem);.  Deep
8390: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
83a0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
83b0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
83c0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
83d0: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
83e0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
83f0: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
8400: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8410: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
8420: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
8430: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8440: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
8450: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
8460: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
8470: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
8480: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
8490: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
84a0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
84b0: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
84c0: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
84d0: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
84e0: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
84f0: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
8500: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
8510: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
8520: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
8530: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
8540: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
8550: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
8560: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
8570: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
8580: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
8590: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
85a0: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
85b0: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
85c0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
85d0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
85e0: 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20     /* in1, out2 
85f0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  */.  assert( pOu
8600: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8610: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8620: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
8630: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
8640: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8650: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
8660: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8670: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
8680: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8690: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
86a0: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
86b0: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
86c0: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
86d0: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
86e0: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
86f0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
8700: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
8710: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
8720: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
8730: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
8740: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
8750: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
8760: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
8770: 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76   to the top P1 v
8780: 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73  alues as the res
8790: 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63  ult.** row..*/.c
87a0: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
87b0: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
87c0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
87d0: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
87e0: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
87f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8800: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
8810: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
8820: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20  p->nMem+1 );..  
8830: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
8840: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
8850: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
8860: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
8870: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
8880: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8890: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
88a0: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
88b0: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
88c0: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
88d0: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
88e0: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
88f0: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
8900: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
8910: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
8920: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
8930: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
8940: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
8950: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
8960: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
8970: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61  rnal );.    brea
8980: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  k;.  }..  /* If 
8990: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
89a0: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
89b0: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
89c0: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
89d0: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
89e0: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
89f0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
8a00: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8a10: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
8a20: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8a30: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
8a40: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
8a50: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
8a60: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8a70: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
8a80: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
8a90: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
8aa0: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
8ab0: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
8ac0: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
8ad0: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
8ae0: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
8af0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
8b00: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
8b10: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
8b20: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
8b30: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
8b40: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
8b50: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
8b60: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
8b70: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
8b80: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
8b90: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
8ba0: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
8bb0: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
8bc0: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
8bd0: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
8be0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
8bf0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
8c00: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
8c10: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
8c20: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8c30: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
8c40: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8c50: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
8c60: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
8c70: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
8c80: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
8c90: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
8ca0: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
8cb0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
8cc0: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
8cd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8ce0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
8cf0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
8d00: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
8d10: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
8d20: 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  SE);.  if( NEVER
8d30: 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
8d40: 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
8d50: 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  }..  /* Invalida
8d60: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
8d70: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
8d80: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
8d90: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
8da0: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
8db0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
8dc0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
8dd0: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
8de0: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
8df0: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
8e00: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
8e10: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
8e20: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
8e30: 61 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20  as.  ** as side 
8e40: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
8e50: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
8e60: 53 65 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Set = &p->aMem[p
8e70: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
8e80: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
8e90: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
8ea0: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
8eb0: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
8ec0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8ed0: 6d 53 74 6f 72 65 54 79 70 65 28 26 70 4d 65 6d  mStoreType(&pMem
8ee0: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
8ef0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
8f00: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
8f10: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
8f20: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
8f30: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
8f40: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
8f50: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
8f60: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
8f70: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
8f80: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
8f90: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
8fa0: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
8fb0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
8fc0: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
8fd0: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
8fe0: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
8ff0: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
9000: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9010: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9020: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9030: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
9040: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
9050: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
9060: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
9070: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
9080: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
9090: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
90a0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
90b0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
90c0: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
90d0: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
90e0: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
90f0: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
9100: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
9110: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
9120: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
9130: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
9140: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
9150: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
9160: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73  64 nByte;..  ass
9170: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
9180: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
9190: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
91a0: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
91b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
91c0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
91d0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
91e0: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
91f0: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
9200: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
9210: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
9220: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
9230: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
9240: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
9250: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
9260: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
9270: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
9280: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9290: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
92a0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
92b0: 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  big;.  }.  MemSe
92c0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
92d0: 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20  MEM_Str);.  if( 
92e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
92f0: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
9300: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
9310: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
9320: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28  o_mem;.  }.  if(
9330: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
9340: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
9350: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
9360: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
9370: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
9380: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
9390: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
93a0: 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a 20  >z[nByte] = 0;. 
93b0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
93c0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
93d0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
93e0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
93f0: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
9400: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9410: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9420: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9430: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9440: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
9450: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64  P3 * *.**.** Add
9460: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9470: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
9480: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9490: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
94a0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
94b0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
94c0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
94d0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
94e0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
94f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
9500: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
9510: 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  *.**.**.** Multi
9520: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
9530: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9540: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9550: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9560: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9570: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9580: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
9590: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
95a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
95b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
95c0: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
95d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72   * *.**.** Subtr
95e0: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
95f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
9600: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
9610: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9620: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9630: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9640: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9650: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9660: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9670: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9680: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
9690: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64   * *.**.** Divid
96a0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
96b0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
96c0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
96d0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
96e0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
96f0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
9700: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
9710: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
9720: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
9730: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
9740: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
9750: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
9760: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
9770: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9780: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
9790: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
97a0: 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  *.**.** Compute 
97b0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
97c0: 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76 69  ter integer divi
97d0: 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75  sion of the valu
97e0: 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
97f0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9800: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
9810: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9820: 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20  sult in P3. .** 
9830: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9840: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 7a  register P2 is z
9850: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
9860: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
9870: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
9880: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9890: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
98a0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
98c0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
98d0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
98e0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
98f0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
9900: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
9910: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
9920: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9930: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
9940: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9950: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
9960: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
9970: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
9980: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9990: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
99a0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
99b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
99c0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
99d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
99e0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
99f0: 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  ut3 */.  int fla
9a00: 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62  gs;      /* Comb
9a10: 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73  ined MEM_* flags
9a20: 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74   from both input
9a30: 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20  s */.  i64 iA;  
9a40: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
9a50: 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  r value of left 
9a60: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
9a70: 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iB;         /* 
9a80: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9a90: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
9aa0: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20  /.  double rA;  
9ab0: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
9ac0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
9ad0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42  d */.  double rB
9ae0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
9af0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
9b00: 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 61 70 70 6c  erand */..  appl
9b10: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
9b20: 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79 4e  (pIn1);.  applyN
9b30: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
9b40: 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20  In2);.  flags = 
9b50: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
9b60: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
9b70: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
9b80: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
9b90: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9ba0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
9bb0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
9bc0: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
9bd0: 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b  Int)==MEM_Int ){
9be0: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
9bf0: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
9c00: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69  n2->u.i;.    swi
9c10: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
9c20: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
9c30: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 69  P_Add:         i
9c40: 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20 62  B += iA;       b
9c50: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9c60: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
9c70: 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20 20   iB -= iA;      
9c80: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9c90: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
9ca0: 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20 20     iB *= iA;    
9cb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9cc0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
9cd0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
9ce0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
9cf0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9d00: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a  null;.        /*
9d10: 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c 61   Dividing the la
9d20: 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 6e  rgest possible n
9d30: 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20 69  egative 64-bit i
9d40: 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20 62  nteger (1<<63) b
9d50: 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d 31  y .        ** -1
9d60: 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65   returns an inte
9d70: 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f  ger too large to
9d80: 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d 62   store in a 64-b
9d90: 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e  it data-type. On
9da0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65  .        ** some
9db0: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c 20   architectures, 
9dc0: 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66 6c  the value overfl
9dd0: 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20  ows to (1<<63). 
9de0: 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20 20  On others,.     
9df0: 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20 69     ** a SIGFPE i
9e00: 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66 6f  s issued. The fo
9e10: 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
9e20: 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69  t normalizes thi
9e30: 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65 68  s.        ** beh
9e40: 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61 6c  avior so that al
9e50: 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73 20  l architectures 
9e60: 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e 74  behave as if int
9e70: 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a 2a  eger .        **
9e80: 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 72   overflow occurr
9e90: 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  ed..        */. 
9ea0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
9eb0: 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53  1 && iB==SMALLES
9ec0: 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20 31  T_INT64 ) iA = 1
9ed0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
9ee0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
9ef0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
9f00: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
9f10: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
9f20: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9f30: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9f40: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9f50: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
9f60: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
9f70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9f80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
9f90: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
9fa0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
9fb0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
9fc0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
9fd0: 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rA = sqlite3Vdbe
9fe0: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b  RealValue(pIn1);
9ff0: 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65  .    rB = sqlite
a000: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
a010: 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68  In2);.    switch
a020: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
a030: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
a040: 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b  dd:         rB +
a050: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
a060: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a070: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42  _Subtract:    rB
a080: 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   -= rA;       br
a090: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a0a0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
a0b0: 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20  rB *= rA;       
a0c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a0d0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
a0e0: 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c         /* (doubl
a0f0: 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53  e)0 In case of S
a100: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
a110: 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a  ING_POINT... */.
a120: 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d          if( rA==
a130: 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f  (double)0 ) goto
a140: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a150: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
a160: 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20      rB /= rA;.  
a170: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a180: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
a190: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41  lt: {.        iA
a1a0: 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20   = (i64)rA;.    
a1b0: 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42      iB = (i64)rB
a1c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a1d0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a1e0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a1f0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
a200: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
a210: 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20  1;.        rB = 
a220: 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41  (double)(iB % iA
a230: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
a240: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
a250: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
a260: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
a270: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
a280: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a290: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
a2a0: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
a2b0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a2c0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
a2d0: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
a2e0: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
a2f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a300: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
a310: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pOut);.    }.  }
a320: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
a330: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a340: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
a350: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
a360: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
a370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
a380: 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a  Seq * * P4.**.**
a390: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
a3a0: 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74   to a CollSeq st
a3b0: 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78  ruct. If the nex
a3c0: 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72  t call to a user
a3d0: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20   function.** or 
a3e0: 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20  aggregate calls 
a3f0: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
a400: 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f  llSeq(), this co
a410: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
a420: 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75   will.** be retu
a430: 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  rned. This is us
a440: 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d  ed by the built-
a450: 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20  in min(), max() 
a460: 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20  and nullif().** 
a470: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
a480: 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75   The interface u
a490: 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65  sed by the imple
a4a0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
a4b0: 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20   aforementioned 
a4c0: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20  functions.** to 
a4d0: 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c  retrieve the col
a4e0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
a4f0: 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f  set by this opco
a500: 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  de is not availa
a510: 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c  ble.** publicly,
a520: 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75   only to user fu
a530: 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20  nctions defined 
a540: 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61  in func.c..*/.ca
a550: 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b  se OP_CollSeq: {
a560: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a570: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
a580: 45 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  EQ );.  break;.}
a590: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  ../* Opcode: Fun
a5a0: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
a5b0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  4 P5.**.** Invok
a5c0: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
a5d0: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
a5e0: 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e  er to a Function
a5f0: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a   structure that.
a600: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
a610: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
a620: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
a630: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
a640: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
a650: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
a660: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a670: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
a680: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
a690: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
a6a0: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
a6b0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
a6c0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
a6d0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
a6e0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
a6f0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
a700: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
a710: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
a720: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
a730: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
a740: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
a750: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
a760: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
a770: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
a780: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
a790: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
a7a0: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
a7b0: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
a7c0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
a7d0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
a7e0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
a7f0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
a800: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
a810: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
a820: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
a830: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
a840: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
a850: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53  * See also: AggS
a860: 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c  tep and AggFinal
a870: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63  .*/.case OP_Func
a880: 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  tion: {.  int i;
a890: 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20  .  Mem *pArg;.  
a8a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
a8b0: 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
a8c0: 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20  alue **apVal;.  
a8d0: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
a8e0: 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d  p->p5;.  apVal =
a8f0: 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
a900: 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
a910: 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  =0 );..  assert(
a920: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
a930: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
a940: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a  <=p->nMem+1) );.
a950: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a960: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
a970: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
a980: 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 70 2d 3e  );.  pArg = &p->
a990: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a9a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
a9b0: 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20  ++, pArg++){.   
a9c0: 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67   apVal[i] = pArg
a9d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a9e0: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
a9f0: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
aa00: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
aa10: 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61   pArg);.  }..  a
aa20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
aa30: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c  pe==P4_FUNCDEF |
aa40: 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  | pOp->p4type==P
aa50: 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20  4_VDBEFUNC );.  
aa60: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
aa70: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20  =P4_FUNCDEF ){. 
aa80: 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70     ctx.pFunc = p
aa90: 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
aaa0: 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20    ctx.pVdbeFunc 
aab0: 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
aac0: 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20    ctx.pVdbeFunc 
aad0: 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70  = (VdbeFunc*)pOp
aae0: 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a  ->p4.pVdbeFunc;.
aaf0: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
ab00: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70  ctx.pVdbeFunc->p
ab10: 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  Func;.  }..  ass
ab20: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
ab30: 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
ab40: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
ab50: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
ab60: 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
ab70: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
ab80: 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
ab90: 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20  tx.s.xDel = 0;. 
aba0: 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
abb0: 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75   0;..  /* The ou
abc0: 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c  tput cell may al
abd0: 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66  ready have a buf
abe0: 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d  fer allocated. M
abf0: 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69  ove.  ** the poi
ac00: 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f  nter to ctx.s so
ac10: 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
ac20: 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75  r-function can u
ac30: 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65  se.  ** the alre
ac40: 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ady allocated bu
ac50: 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  ffer instead of 
ac60: 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77  allocating a new
ac70: 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   one..  */.  sql
ac80: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
ac90: 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20  &ctx.s, pOut);. 
aca0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
acb0: 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c  &ctx.s, MEM_Null
acc0: 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f  );..  ctx.isErro
acd0: 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  r = 0;.  if( ctx
ace0: 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
acf0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ad00: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
ad10: 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
ad20: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
ad30: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
ad40: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
ad50: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
ad60: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
ad70: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
ad80: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
ad90: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66  .pColl;.  }.  if
ada0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
adb0: 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
adc0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
add0: 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63  e;.  (*ctx.pFunc
ade0: 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e  ->xFunc)(&ctx, n
adf0: 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28 20  , apVal);.  if( 
ae00: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
ae10: 64 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  db) ){.    sqlit
ae20: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
ae30: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
ae40: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
ae50: 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66  misuse;.  }.  if
ae60: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
ae70: 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65  ed ){.    /* Eve
ae80: 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f  n though a mallo
ae90: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
aea0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
aeb0: 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  on of the.    **
aec0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d   user function m
aed0: 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61  ay have called a
aee0: 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  n sqlite3_result
aef0: 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a  _XXX() function.
af00: 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e      ** to return
af10: 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f   a value. The fo
af20: 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c  llowing call rel
af30: 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72  eases any resour
af40: 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  ces.    ** assoc
af50: 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20  iated with such 
af60: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a  a value..    **.
af70: 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79      ** Note: May
af80: 62 65 20 4d 65 6d 52 65 6c 65 61 73 65 28 29 20  be MemRelease() 
af90: 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64  should be called
afa0: 20 69 66 20 73 71 6c 69 74 65 33 53 61 66 65 74   if sqlite3Safet
afb0: 79 4f 6e 28 29 0a 20 20 20 20 2a 2a 20 66 61 69  yOn().    ** fai
afc0: 6c 73 20 61 6c 73 6f 20 28 74 68 65 20 69 66 28  ls also (the if(
afd0: 2e 2e 2e 29 20 73 74 61 74 65 6d 65 6e 74 20 61  ...) statement a
afe0: 62 6f 76 65 29 2e 20 42 75 74 20 69 66 20 70 65  bove). But if pe
aff0: 6f 70 6c 65 20 61 72 65 0a 20 20 20 20 2a 2a 20  ople are.    ** 
b000: 6d 69 73 75 73 69 6e 67 20 73 71 6c 69 74 65 2c  misusing sqlite,
b010: 20 74 68 65 79 20 68 61 76 65 20 62 69 67 67 65   they have bigge
b020: 72 20 70 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20  r problems than 
b030: 61 20 6c 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a  a leaked value..
b040: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
b050: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
b060: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
b070: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
b080: 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69    /* If any auxi
b090: 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74  liary data funct
b0a0: 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63  ions have been c
b0b0: 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73  alled by this us
b0c0: 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a  er function,.  *
b0d0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61  * immediately ca
b0e0: 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  ll the destructo
b0f0: 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74  r for any non-st
b100: 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a  atic values..  *
b110: 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62  /.  if( ctx.pVdb
b120: 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c  eFunc ){.    sql
b130: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
b140: 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46  xData(ctx.pVdbeF
b150: 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  unc, pOp->p1);. 
b160: 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65     pOp->p4.pVdbe
b170: 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65  Func = ctx.pVdbe
b180: 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  Func;.    pOp->p
b190: 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46  4type = P4_VDBEF
b1a0: 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  UNC;.  }..  /* I
b1b0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
b1c0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
b1d0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
b1e0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
b1f0: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
b200: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
b210: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
b220: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
b230: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
b240: 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
b250: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
b260: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
b270: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b280: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
b290: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
b2a0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
b2b0: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
b2c0: 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
b2d0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
b2e0: 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69  ut, &ctx.s);.  i
b2f0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
b300: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
b310: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
b320: 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45  g;.  }.  REGISTE
b330: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
b340: 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
b350: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b360: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
b380: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
b390: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b3a0: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
b3b0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
b3c0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
b3d0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
b3e0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b3f0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b400: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b410: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b420: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b430: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
b440: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b450: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b460: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
b470: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b480: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b490: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b4a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b4b0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b4c0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b4d0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b4e0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b4f0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
b500: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
b510: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b520: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b530: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
b540: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b550: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b560: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b570: 69 6e 20 72 65 67 69 73 65 72 20 50 31 2e 0a 2a  in regiser P1..*
b580: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
b590: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b5a0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b5b0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b5c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b5d0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b5e0: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
b5f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
b600: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
b610: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b620: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
b630: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
b640: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
b650: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
b660: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
b670: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
b680: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b690: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b6a0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b6b0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b6c0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b6d0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b6f0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
b700: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b710: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
b720: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
b730: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b740: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
b750: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b760: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
b770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b780: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
b790: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b7a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b7b0: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
b7c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b7d0: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
b7e0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
b7f0: 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20   a;.  i64 b;..  
b800: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b810: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
b820: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
b830: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b840: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
b850: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b860: 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  a = sqlite3VdbeI
b870: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
b880: 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   b = sqlite3Vdbe
b890: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
b8a0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
b8b0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
b8c0: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
b8d0: 20 20 61 20 26 3d 20 62 3b 20 20 20 20 20 62 72    a &= b;     br
b8e0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
b8f0: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 61 20  _BitOr:       a 
b900: 7c 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b  |= b;     break;
b910: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 53 68 69  .    case OP_Shi
b920: 66 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20  ftLeft:   a <<= 
b930: 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  b;    break;.   
b940: 20 64 65 66 61 75 6c 74 3a 20 20 61 73 73 65 72   default:  asser
b950: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
b960: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 29 3b  OP_ShiftRight );
b970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b980: 20 20 20 20 20 20 20 20 20 20 61 20 3e 3e 3d 20            a >>= 
b990: 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  b;    break;.  }
b9a0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61  .  pOut->u.i = a
b9b0: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
b9c0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
b9d0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b9e0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d  * Opcode: AddImm
b9f0: 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a    P1 P2 * * *.**
ba00: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
ba10: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
ba20: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ba30: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
ba40: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
ba50: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
ba60: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
ba70: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
ba80: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
ba90: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
baa0: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
bab0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bac0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
bad0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
bae0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
baf0: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
bb00: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
bb10: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
bb20: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
bb30: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
bb40: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bb50: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
bb60: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
bb70: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
bb80: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
bb90: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
bba0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
bbb0: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
bbc0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
bbd0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
bbe0: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
bbf0: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
bc00: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
bc10: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
bc20: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
bc30: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
bc40: 69 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66  in1 */.  applyAf
bc50: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
bc60: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
bc70: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
bc80: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
bc90: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
bca0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
bcb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
bcc0: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
bcd0: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
bce0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
bcf0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
bd00: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
bd10: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
bd20: 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  e{.    MemSetTyp
bd30: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
bd40: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
bd50: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
bd60: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
bd70: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
bd80: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
bd90: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
bda0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
bdb0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
bdc0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
bdd0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
bde0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
bdf0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
be00: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
be10: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
be20: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
be30: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
be40: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
be50: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
be60: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
be70: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
be80: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
be90: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
bea0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
beb0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
bec0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
bed0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bee0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
bef0: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
bf00: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
bf10: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
bf20: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
bf30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bf40: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
bf50: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
bf60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
bf70: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bf80: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
bf90: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
bfa0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
bfb0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bfc0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
bfd0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
bfe0: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
bff0: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c000: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c010: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c020: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c030: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c040: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c050: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c060: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c070: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c080: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c090: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c0a0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c0b0: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c0c0: 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  */.  if( pIn1->f
c0d0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
c0e0: 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72  ) break;.  asser
c0f0: 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d  t( MEM_Str==(MEM
c100: 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70  _Blob>>3) );.  p
c110: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70  In1->flags |= (p
c120: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42  In1->flags&MEM_B
c130: 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79  lob)>>3;.  apply
c140: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
c150: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
c160: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20  encoding);.  rc 
c170: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
c180: 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1);.  assert( pI
c190: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c1a0: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
c1b0: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e  cFailed );.  pIn
c1c0: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
c1d0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
c1e0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f  EM_Blob|MEM_Zero
c1f0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
c200: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
c210: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c220: 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31  pcode: ToBlob P1
c230: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
c240: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
c250: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
c260: 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49   be a BLOB..** I
c270: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
c280: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
c290: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66  it to a string f
c2a0: 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73  irst..** Strings
c2b0: 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e   are simply rein
c2c0: 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f  terpreted as blo
c2d0: 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67  bs with no chang
c2e0: 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65  e.** to the unde
c2f0: 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a  rlying data..**.
c300: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
c310: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
c320: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
c330: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
c340: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42  ..*/.case OP_ToB
c350: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
c360: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c370: 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69  as TK_TO_BLOB, i
c380: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31  n1 */.  if( pIn1
c390: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
c3a0: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66  ll ) break;.  if
c3b0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c3c0: 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
c3d0: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
c3e0: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
c3f0: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
c400: 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ng);.    assert(
c410: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c420: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
c430: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
c440: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c450: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
c460: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
c470: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
c480: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45  MEM_TypeMask&~ME
c490: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55  M_Blob);.  }.  U
c4a0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
c4b0: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
c4c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c4d0: 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20   ToNumeric P1 * 
c4e0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c4f0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c500: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c510: 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72   numeric (either
c520: 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f   an.** integer o
c530: 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  r a floating-poi
c540: 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49  nt number.).** I
c550: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
c560: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
c570: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
c580: 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a  o an using the.*
c590: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
c5a0: 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29  atoi() or atof()
c5b0: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
c5c0: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
c5d0: 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62  on .** is possib
c5e0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c5f0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c600: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c610: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c620: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c630: 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b   OP_ToNumeric: {
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c660: 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20  TO_NUMERIC, in1 
c670: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
c680: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c  flags & (MEM_Nul
c690: 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  l|MEM_Int|MEM_Re
c6a0: 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  al))==0 ){.    s
c6b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
c6c0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
c6d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
c6e0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
c6f0: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
c700: 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a  code: ToInt P1 *
c710: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c720: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c730: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 20 61  register P1 be a
c740: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
c750: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
c760: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
c770: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
c780: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
c790: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c7a0: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
c7b0: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
c7c0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
c7d0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
c7e0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
c7f0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
c800: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c810: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c820: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c830: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c840: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c850: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c860: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c870: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c890: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
c8a0: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  NT, in1 */.  if(
c8b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c8c0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
c8d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c8e0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
c8f0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
c900: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
c910: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
c920: 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50  Opcode: ToReal P
c930: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c940: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c960: 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20  o be a floating 
c970: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a  point number..**
c980: 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73   If The value is
c990: 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e   currently an in
c9a0: 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  teger, convert i
c9b0: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c9c0: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
c9d0: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
c9e0: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
c9f0: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
ca00: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
ca10: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
ca20: 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  0.0 if no such c
ca30: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73  onversion is pos
ca40: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
ca50: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
ca60: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
ca70: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
ca80: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
ca90: 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b  ase OP_ToReal: {
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cab0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cac0: 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a  TO_REAL, in1 */.
cad0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
cae0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
caf0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
cb00: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
cb10: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
cb20: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
cb30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
cb40: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
cb50: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
cb60: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
cb70: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
cb80: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
cb90: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
cba0: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
cbb0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
cbc0: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
cbd0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
cbe0: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
cbf0: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
cc00: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
cc10: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
cc20: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
cc30: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
cc40: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
cc50: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
cc60: 66 61 6c 6c 20 74 68 72 75 20 69 66 20 65 69 74  fall thru if eit
cc70: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
cc80: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
cc90: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
cca0: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
ccb0: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
ccc0: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
ccd0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
cce0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
ccf0: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
cd00: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
cd10: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
cd20: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
cd30: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
cd40: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
cd50: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
cd60: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
cd70: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
cd80: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
cd90: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
cda0: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
cdb0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
cdc0: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
cdd0: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
cde0: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
cdf0: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
ce00: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
ce10: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
ce20: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
ce30: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
ce40: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
ce50: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
ce60: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
ce70: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
ce80: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
ce90: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
cea0: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
ceb0: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
cec0: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
ced0: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
cee0: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
cef0: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
cf00: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
cf10: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
cf20: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
cf30: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
cf40: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
cf50: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
cf60: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
cf70: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
cf80: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
cf90: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
cfa0: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
cfb0: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
cfc0: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
cfd0: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
cfe0: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
cff0: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
d000: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
d010: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
d020: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
d030: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
d040: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
d050: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
d060: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
d070: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
d080: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
d090: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
d0a0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
d0b0: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74  LITE_STOREP2 bit
d0c0: 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
d0d0: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e  hen do not jump.
d0e0: 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74    Instead,.** st
d0f0: 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65  ore a boolean re
d100: 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20  sult (either 0, 
d110: 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69  or 1, or NULL) i
d120: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
d130: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
d140: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
d150: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
d160: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
d170: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
d180: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
d190: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
d1a0: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
d1b0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
d1c0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
d1d0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d1e0: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
d1f0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
d200: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
d210: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
d220: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
d230: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
d240: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
d250: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
d260: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
d270: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
d280: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
d290: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d2a0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
d2b0: 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49  son is false.  I
d2c0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
d2d0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
d2e0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65  e result is true
d2f0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
d300: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d310: 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  the the result i
d320: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
d330: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
d340: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
d350: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
d360: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
d370: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
d380: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d390: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
d3a0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
d3b0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d3c0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d3d0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
d3e0: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
d3f0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
d400: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
d410: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d420: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d430: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
d440: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
d450: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
d460: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
d470: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
d480: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
d490: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
d4a0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
d4b0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
d4c0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
d4d0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
d4e0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
d4f0: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
d500: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d510: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d520: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
d530: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
d540: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65   is NULL the the
d550: 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73   result is the s
d560: 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ame as it would 
d570: 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c  be if.** the SQL
d580: 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20  ITE_NULLEQ flag 
d590: 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  were omitted fro
d5a0: 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  m P5..*/./* Opco
d5b0: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
d5c0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
d5d0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
d5e0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
d5f0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
d600: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
d610: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
d620: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
d630: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
d640: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
d650: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
d660: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
d670: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d680: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d690: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
d6a0: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
d6b0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d6c0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d6d0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d6e0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d6f0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d700: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d710: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d720: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
d730: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
d740: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
d750: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d760: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
d770: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
d780: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
d790: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d7a0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d7b0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d7c0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d7d0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d7e0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
d7f0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
d800: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
d810: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
d820: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
d830: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
d840: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d850: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
d860: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
d870: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
d880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d890: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
d8a0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
d8b0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
d8c0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d8d0: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
d8e0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
d8f0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
d900: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d910: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
d920: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
d930: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
d940: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d950: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
d960: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
d970: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
d980: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d990: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
d9a0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
d9b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d9c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
d9d0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d9e0: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
d9f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
da00: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
da10: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
da20: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
da30: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
da40: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
da50: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
da60: 72 69 73 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28 20  rison */..  if( 
da70: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
da80: 49 6e 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d 5f  In3->flags)&MEM_
da90: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
daa0: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
dab0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
dac0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
dad0: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
dae0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
daf0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
db00: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
db10: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
db20: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
db30: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
db40: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
db50: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
db60: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
db70: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
db80: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
db90: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
dba0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
dbb0: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
dbc0: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
dbd0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
dbe0: 3b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 28 70  ;.      res = (p
dbf0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e  In1->flags & pIn
dc00: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
dc10: 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c  ull)==0;.    }el
dc20: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
dc30: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
dc40: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
dc50: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
dc60: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
dc70: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
dc80: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
dc90: 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
dca0: 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
dcb0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
dcc0: 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
dcd0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
dce0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
dcf0: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
dd00: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d        pOut = &p-
dd10: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
dd20: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
dd30: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
dd40: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
dd50: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
dd60: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
dd70: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
dd80: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
dd90: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
dda0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
ddb0: 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2-1;.      }.  
ddc0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
ddd0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
dde0: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
ddf0: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
de00: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
de10: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
de20: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
de30: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
de40: 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20   affinity ){.   
de50: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
de60: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
de70: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
de80: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
de90: 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn3, affinity, 
dea0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
deb0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
dec0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
ded0: 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  mem;.    }..    
dee0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
def0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
df00: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
df10: 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e  ==0 );.    Expan
df20: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
df30: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
df40: 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
df50: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
df60: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
df70: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
df80: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
df90: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
dfa0: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
dfb0: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
dfc0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
dfd0: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
dfe0: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
dff0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
e000: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
e010: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e020: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
e030: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
e040: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e050: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
e060: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
e070: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
e080: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
e090: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
e0a0: 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
e0b0: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
e0c0: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
e0d0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
e0e0: 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  p2];.    MemSetT
e0f0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
e100: 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
e110: 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
e120: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
e130: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
e140: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20    }else if( res 
e150: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
e160: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
e170: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e180: 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
e190: 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
e1a0: 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
e1b0: 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
e1c0: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
e1d0: 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72  or to be the arr
e1e0: 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ay.** of integer
e1f0: 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54  s in P4..**.** T
e200: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
e210: 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74  s only valid unt
e220: 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 50  il the next OP_P
e230: 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43  ermutation, OP_C
e240: 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61  ompare,.** OP_Ha
e250: 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74  lt, or OP_Result
e260: 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79 20  Row.  Typically 
e270: 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  the OP_Permutati
e280: 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a  on should occur.
e290: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70  ** immediately p
e2a0: 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43  rior to the OP_C
e2b0: 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  ompare..*/.case 
e2c0: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
e2d0: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
e2e0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
e2f0: 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
e300: 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
e310: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
e320: 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b  ->p4.ai;.  break
e330: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e340: 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
e350: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70   P4 *.**.** Comp
e360: 61 72 65 20 74 6f 20 76 65 63 74 6f 72 73 20 6f  are to vectors o
e370: 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
e380: 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
e390: 33 2d 31 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a  3-1) (all this.*
e3a0: 2a 20 6f 6e 65 20 22 41 22 29 20 61 6e 64 20 69  * one "A") and i
e3b0: 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
e3c0: 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
e3d0: 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
e3e0: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
e3f0: 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
e400: 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
e410: 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
e420: 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
e430: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
e440: 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
e450: 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
e460: 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
e470: 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
e480: 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
e490: 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
e4a0: 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
e4b0: 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
e4c0: 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
e4d0: 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
e4e0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
e4f0: 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
e500: 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
e510: 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
e520: 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
e530: 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
e540: 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
e550: 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
e560: 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
e570: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
e580: 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
e590: 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
e5a0: 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
e5b0: 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
e5c0: 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
e5d0: 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
e5e0: 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
e5f0: 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
e600: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e610: 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
e620: 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
e630: 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
e640: 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
e650: 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
e660: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
e670: 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
e680: 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
e690: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
e6a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
e6b0: 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
e6c0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
e6d0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
e6e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
e6f0: 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
e700: 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
e710: 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
e720: 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
e730: 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
e740: 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
e750: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
e760: 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p1+mx<=p->nM
e770: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
e780: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
e790: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
e7a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
e7b0: 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
e7c0: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
e7d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
e7e0: 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p2+n<=p->nMe
e7f0: 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  m+1 );.  }.#endi
e800: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
e810: 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
e820: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
e830: 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
e840: 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
e850: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
e860: 41 43 45 28 70 31 2b 69 64 78 2c 20 26 70 2d 3e  ACE(p1+idx, &p->
e870: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
e880: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
e890: 45 28 70 32 2b 69 64 78 2c 20 26 70 2d 3e 61 4d  E(p2+idx, &p->aM
e8a0: 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
e8b0: 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
e8c0: 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  nfo->nField );. 
e8d0: 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49     pColl = pKeyI
e8e0: 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20  nfo->aColl[i];. 
e8f0: 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e     bRev = pKeyIn
e900: 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  fo->aSortOrder[i
e910: 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
e920: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
e930: 61 72 65 28 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b  are(&p->aMem[p1+
e940: 69 64 78 5d 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70  idx], &p->aMem[p
e950: 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a  2+idx], pColl);.
e960: 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65      if( iCompare
e970: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52   ){.      if( bR
e980: 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20  ev ) iCompare = 
e990: 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20  -iCompare;.     
e9a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
e9b0: 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30  }.  aPermute = 0
e9c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e9d0: 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31   Opcode: Jump P1
e9e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
e9f0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73   Jump to the ins
ea00: 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72  truction at addr
ea10: 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50  ess P1, P2, or P
ea20: 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  3 depending on w
ea30: 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65  hether.** in the
ea40: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
ea50: 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74  Compare instruct
ea60: 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f  ion the P1 vecto
ea70: 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a  r was less than.
ea80: 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20  ** equal to, or 
ea90: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
eaa0: 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70   P2 vector, resp
eab0: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73  ectively..*/.cas
eac0: 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20  e OP_Jump: {    
ead0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
eae0: 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61   */.  if( iCompa
eaf0: 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  re<0 ){.    pc =
eb00: 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20   pOp->p1 - 1;.  
eb10: 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
eb20: 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  re==0 ){.    pc 
eb30: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
eb40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d   }else{.    pc =
eb50: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
eb60: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
eb70: 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
eb80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
eb90: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
eba0: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
ebb0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
ebc0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
ebd0: 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
ebe0: 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
ebf0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
ec00: 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
ec10: 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
ec20: 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
ec30: 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
ec40: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ec50: 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
ec60: 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
ec70: 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
ec80: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
ec90: 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
eca0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
ecb0: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
ecc0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
ecd0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
ece0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
ecf0: 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
ed00: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
ed10: 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
ed20: 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
ed30: 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
ed40: 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
ed50: 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
ed60: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
ed70: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
ed80: 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
ed90: 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
eda0: 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
edb0: 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
edc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
edd0: 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
ede0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
edf0: 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
ee00: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ee10: 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
ee20: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
ee30: 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
ee40: 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
ee50: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
ee60: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
ee70: 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
ee80: 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
ee90: 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
eea0: 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
eeb0: 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
eec0: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
eed0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
eee0: 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
eef0: 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
ef00: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ef10: 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
ef20: 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
ef30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
ef40: 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
ef50: 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
ef60: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ef70: 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
ef80: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
ef90: 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
efa0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
efb0: 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
efc0: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
efd0: 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
efe0: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
eff0: 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
f000: 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
f010: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
f020: 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
f030: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
f040: 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
f050: 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
f060: 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
f070: 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 76 31  2];.  }.  if( v1
f080: 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
f090: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f0a0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
f0b0: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
f0c0: 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
f0d0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
f0e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
f0f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f100: 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
f110: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  * * *.**.** Inte
f120: 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
f130: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f140: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
f150: 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
f160: 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
f170: 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
f180: 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
f190: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
f1a0: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
f1b0: 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
f1c0: 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
f1d0: 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
f1e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f1f0: 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
f200: 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 69 66  n1, out2 */.  if
f210: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
f220: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f230: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
f240: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
f250: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
f260: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
f270: 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56  (pOut, !sqlite3V
f280: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
f290: 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
f2a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
f2b0: 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
f2c0: 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  *.**.** Interpre
f2d0: 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
f2e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
f2f0: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
f300: 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
f310: 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
f320: 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
f330: 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
f340: 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
f350: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
f360: 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
f370: 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f390: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
f3a0: 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
f3b0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f3c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f3d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f3e0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
f3f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
f400: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
f410: 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69  nt64(pOut, ~sqli
f420: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
f430: 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
f440: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f450: 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
f460: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
f470: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
f480: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f490: 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
f4a0: 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e  lue is.** is con
f4b0: 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
f4c0: 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
f4d0: 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
f4e0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
f4f0: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
f500: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
f510: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
f520: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
f530: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f540: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
f550: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
f560: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
f570: 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  lse.  The value 
f580: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
f590: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 68  red true if it h
f5a0: 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
f5b0: 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
f5c0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
f5d0: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
f5e0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
f5f0: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
f600: 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
f610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
f620: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
f630: 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
f640: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
f650: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
f660: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
f670: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
f680: 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
f690: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
f6a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
f6b0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
f6c0: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
f6d0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
f6e0: 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
f6f0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
f700: 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
f710: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
f720: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f730: 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
f740: 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a  .  }.  if( c ){.
f750: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
f760: 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
f770: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
f780: 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
f790: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
f7a0: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
f7b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
f7c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
f7d0: 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
f7e0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f7f0: 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
f800: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  mp, in1 */.  if(
f810: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f820: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
f830: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
f840: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
f850: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
f860: 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
f870: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
f880: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
f890: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
f8a0: 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
f8b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
f8c0: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
f8d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f8e0: 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
f8f0: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  n1 */.  if( (pIn
f900: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
f910: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
f920: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
f930: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
f940: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
f950: 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
f960: 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  5.**.** Interpre
f970: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
f980: 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
f990: 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
f9a0: 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
f9b0: 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
f9c0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
f9d0: 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
f9e0: 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
f9f0: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
fa00: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
fa10: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
fa20: 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
fa30: 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
fa40: 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
fa50: 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
fa60: 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
fa70: 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
fa80: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
fa90: 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
faa0: 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
fab0: 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
fac0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
fad0: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
fae0: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
faf0: 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
fb00: 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
fb10: 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
fb20: 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
fb30: 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
fb40: 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
fb50: 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
fb60: 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
fb70: 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
fb80: 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
fb90: 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
fba0: 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
fbb0: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
fbc0: 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
fbd0: 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
fbe0: 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
fbf0: 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
fc00: 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
fc10: 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
fc20: 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
fc30: 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
fc40: 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
fc50: 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
fc60: 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
fc70: 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
fc80: 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f  this bit set..*/
fc90: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
fca0: 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64   {.  u32 payload
fcb0: 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65  Size;   /* Numbe
fcc0: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
fcd0: 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
fce0: 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
fcf0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
fd00: 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
fd10: 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  d */.  int p1;  
fd20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20            /* P1 
fd30: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
fd40: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ode */.  int p2;
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
fd60: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
fd70: 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
fd80: 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
fd90: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
fda0: 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
fdb0: 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
fdc0: 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
fdd0: 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
fde0: 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
fdf0: 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
fe00: 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
fe10: 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
fe20: 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
fe30: 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
fe40: 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
fe50: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
fe60: 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
fe70: 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
fe80: 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
fe90: 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
fea0: 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
feb0: 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
fec0: 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
fed0: 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
fee0: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
fef0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
ff00: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
ff10: 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
ff20: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
ff30: 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
ff40: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
ff50: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
ff60: 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
ff70: 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
ff80: 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
ff90: 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
ffa0: 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
ffb0: 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
ffc0: 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
ffd0: 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
ffe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
fff0: 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
10000 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
10010 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b  d */.  u8 *zIdx;
10020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
10030 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a  ex into header *
10040 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  /.  u8 *zEndHdr;
10050 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10060 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
10070 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
10080 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
10090 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
100a0 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
100b0 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
100c0 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
100d0 69 74 20 6f 66 66 73 65 74 2e 20 20 36 34 20 62  it offset.  64 b
100e0 69 74 73 20 6e 65 65 64 65 64 20 74 6f 20 63 61  its needed to ca
100f0 74 63 68 20 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a  tch overflow */.
10100 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20    int szHdr;    
10110 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
10120 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65 20  the header size 
10130 66 69 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f  field at start o
10140 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  f record */.  in
10150 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  t avail;        
10160 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
10170 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
10180 20 64 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a   data */.  Mem *
10190 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
101a0 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
101b0 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
101c0 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
101d0 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
101e0 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d  .  pC = 0;.  mem
101f0 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
10200 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
10210 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
10220 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
10230 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
10240 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
10250 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
10260 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
10270 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10280 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
10290 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a  );.  zRec = 0;..
102a0 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20    /* This block 
102b0 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c  sets the variabl
102c0 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f  e payloadSize to
102d0 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   be the total nu
102e0 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74  mber of.  ** byt
102f0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
10300 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63  ..  **.  ** zRec
10310 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
10320 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
10330 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  of the record if
10340 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
10350 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c  ..  ** The compl
10360 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 20  ete record text 
10370 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61  is always availa
10380 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  ble for pseudo-t
10390 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68  ables.  ** If th
103a0 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
103b0 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed in a cursor, 
103c0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  the complete rec
103d0 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69  ord text.  ** mi
103e0 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ght be available
103f0 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f   in the  pC->aRo
10400 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20  w cache.  Or it 
10410 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20  might not be..  
10420 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20 69  ** If the data i
10430 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20  s unavailable,  
10440 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e  zRec is set to N
10450 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  ULL..  **.  ** W
10460 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  e also compute t
10470 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
10480 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f  umns in the reco
10490 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73  rd.  For cursors
104a0 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65  ,.  ** the numbe
104b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
104c0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64  stored in the Vd
104d0 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  beCursor.nField 
104e0 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
104f0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
10500 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
10510 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
10520 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
10530 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
10540 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
10550 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
10560 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
10570 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72  sor;.  if( pCrsr
10580 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
10590 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
105a0 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
105b0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
105c0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
105d0 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
105e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
105f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
10600 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
10610 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
10620 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
10630 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
10640 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
10650 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
10660 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
10670 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
10680 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
10690 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
106a0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
106b0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
106c0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
106d0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
106e0 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
106f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
10700 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
10710 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
10720 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
10730 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10740 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61  ;   /* True beca
10750 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
10760 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
10770 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c   */.      /* sql
10780 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
10790 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
107a0 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
107b0 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
107c0 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
107d0 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
107e0 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
107f0 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
10800 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
10810 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
10820 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
10830 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
10840 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
10850 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
10860 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   );.      payloa
10870 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
10880 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
10890 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
108a0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
108b0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
108c0 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72  Crsr) );.      r
108d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
108e0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
108f0 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  &payloadSize);. 
10900 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
10910 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
10920 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
10930 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
10940 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70   }.  }else if( p
10950 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
10960 67 3e 30 20 29 7b 0a 20 20 20 20 70 52 65 67 20  g>0 ){.    pReg 
10970 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 43 2d 3e 70  = &p->aMem[pC->p
10980 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
10990 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
109a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
109b0 6f 62 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61  ob );.    payloa
109c0 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b  dSize = pReg->n;
109d0 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67  .    zRec = pReg
109e0 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ->z;.    pC->cac
109f0 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d  heStatus = (pOp-
10a00 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52  >p5&OPFLAG_CLEAR
10a10 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53  CACHE) ? CACHE_S
10a20 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43  TALE : p->cacheC
10a30 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  tr;.    assert( 
10a40 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
10a50 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d  | zRec!=0 );.  }
10a60 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e  else{.    /* Con
10a70 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f  sider the row to
10a80 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   be NULL */.    
10a90 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b  payloadSize = 0;
10aa0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10ab0 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10ac0 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
10ad0 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
10ae0 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
10af0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
10b00 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10b10 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
10b20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10b30 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
10b40 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10b50 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
10b60 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
10b70 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
10b80 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10b90 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10ba0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10bb0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
10bc0 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61   pC->nField;.  a
10bd0 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64  ssert( p2<nField
10be0 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61   );..  /* Read a
10bf0 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62  nd parse the tab
10c00 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72  le header.  Stor
10c10 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
10c20 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20   the parse.  ** 
10c30 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
10c40 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65  header cache fie
10c50 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f  lds of the curso
10c60 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20  r..  */.  aType 
10c70 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69  = pC->aType;.  i
10c80 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10c90 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10ca0 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d  ){.    aOffset =
10cb0 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
10cc0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
10cd0 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76  t(aType);.    av
10ce0 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  ail = 0;.    pC-
10cf0 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73  >aOffset = aOffs
10d00 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65  et = &aType[nFie
10d10 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79  ld];.    pC->pay
10d20 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f  loadSize = paylo
10d30 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e  adSize;.    pC->
10d40 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
10d50 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20  >cacheCtr;..    
10d60 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f  /* Figure out ho
10d70 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65  w many bytes are
10d80 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a   in the header *
10d90 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  /.    if( zRec )
10da0 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  {.      zData = 
10db0 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  zRec;.    }else{
10dc0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
10dd0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
10de0 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
10df0 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79  )sqlite3BtreeKey
10e00 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
10e10 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ail);.      }els
10e20 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
10e30 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
10e40 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
10e50 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
10e60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a        }.      /*
10e70 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44   If KeyFetch()/D
10e80 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67  ataFetch() manag
10e90 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e  ed to get the en
10ea0 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20  tire payload,.  
10eb0 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20      ** save the 
10ec0 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70  payload in the p
10ed0 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
10ee0 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75  That will save u
10ef0 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20  s from.      ** 
10f00 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61  having to make a
10f10 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20  dditional calls 
10f20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e  to fetch the con
10f30 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a  tent portion of.
10f40 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
10f50 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
10f60 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
10f70 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  l>=0 );.      if
10f80 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ( payloadSize <=
10f90 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
10fa0 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44         zRec = zD
10fb0 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ata;.        pC-
10fc0 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61  >aRow = (u8*)zDa
10fd0 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ta;.      }else{
10fe0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
10ff0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  w = 0;.      }. 
11000 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20     }.    /* The 
11010 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
11020 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20   is true in all 
11030 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65  cases accept whe
11040 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  n.    ** the dat
11050 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62  abase file has b
11060 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78  een corrupted ex
11070 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a  ternally..    **
11080 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63      assert( zRec
11090 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61  !=0 || avail>=pa
110a0 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61  yloadSize || ava
110b0 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20  il>=9 ); */.    
110c0 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e  szHdr = getVarin
110d0 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  t32((u8*)zData, 
110e0 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a  offset);..    /*
110f0 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
11100 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
11110 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
11120 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
11130 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
11140 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
11150 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
11160 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
11170 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
11180 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
11190 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
111a0 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
111b0 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
111c0 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
111d0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
111e0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
111f0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
11200 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
11210 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
11220 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
11230 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
11240 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
11250 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
11260 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
11270 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
11280 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
11290 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
112a0 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
112b0 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
112c0 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
112d0 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
112e0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
112f0 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20  set > 98307 ){. 
11300 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
11310 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
11320 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
11330 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a  umn_out;.    }..
11340 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69      /* Compute i
11350 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  n len the number
11360 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
11370 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61  a we need to rea
11380 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  d in order.    *
11390 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20  * to get nField 
113a0 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66  type values.  of
113b0 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72  fset is an upper
113c0 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20   bound on this. 
113d0 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65   But.    ** nFie
113e0 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e  ld might be sign
113f0 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74  ificantly less t
11400 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d  han the true num
11410 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20  ber of columns. 
11420 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62     ** in the tab
11430 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20  le, and in that 
11440 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33  case, 5*nField+3
11450 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65   might be smalle
11460 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20  r than offset.. 
11470 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f     ** We want to
11480 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e   minimize len in
11490 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20   order to limit 
114a0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
114b0 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c  memory.    ** al
114c0 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69  location, especi
114d0 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70  ally if a corrup
114e0 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  t database file 
114f0 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65  has caused offse
11500 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f  t.    ** to be o
11510 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74  versized. Offset
11520 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39   is limited to 9
11530 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74  8307 above.  But
11540 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20   98307 might.   
11550 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64   ** still exceed
11560 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
11570 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
11580 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75   on some configu
11590 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20  rations..    ** 
115a0 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20  On systems that 
115b0 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20  cannot tolerate 
115c0 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
115d0 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64  ocations, nField
115e0 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c  *5+3.    ** will
115f0 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20   likely be much 
11600 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46  smaller since nF
11610 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  ield will likely
11620 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20   be less than.  
11630 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20    ** 20 or so.  
11640 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61  This insures tha
11650 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  t Robson memory 
11660 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11670 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74  s are.    ** not
11680 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66   exceeded even f
11690 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62  or corrupt datab
116a0 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a  ase files..    *
116b0 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65  /.    len = nFie
116c0 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66  ld*5 + 3;.    if
116d0 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66  ( len > (int)off
116e0 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74  set ) len = (int
116f0 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a  )offset;..    /*
11700 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20   The KeyFetch() 
11710 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61  or DataFetch() a
11720 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e  bove are fast an
11730 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65  d will get the e
11740 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63  ntire.    ** rec
11750 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f  ord header in mo
11760 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74  st cases.  But t
11770 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f  hey will fail to
11780 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74   get the complet
11790 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
117a0 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65  header if the re
117b0 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73  cord header does
117c0 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69   not fit on a si
117d0 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a  ngle page.    **
117e0 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20   in the B-Tree. 
117f0 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65   When that happe
11800 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56  ns, use sqlite3V
11810 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11820 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75  ) to.    ** acqu
11830 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ire the complete
11840 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20   header text..  
11850 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52    */.    if( !zR
11860 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20  ec && avail<len 
11870 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
11880 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
11890 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
118a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
118b0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
118c0 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43  Crsr, 0, len, pC
118d0 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d  ->isIndex, &sMem
118e0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
118f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
11900 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11910 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
11920 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  }.      zData = 
11930 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20  sMem.z;.    }.  
11940 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20    zEndHdr = (u8 
11950 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20  *)&zData[len];. 
11960 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29     zIdx = (u8 *)
11970 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a  &zData[szHdr];..
11980 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20      /* Scan the 
11990 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69  header and use i
119a0 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65  t to fill in the
119b0 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66   aType[] and aOf
119c0 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72  fset[].    ** ar
119d0 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20  rays.  aType[i] 
119e0 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
119f0 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f   type integer fo
11a00 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a  r the i-th.    *
11a10 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66  * column and aOf
11a20 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  fset[i] will con
11a30 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20  tain the offset 
11a40 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
11a50 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ng.    ** of the
11a60 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73   record to the s
11a70 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61  tart of the data
11a80 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f   for the i-th co
11a90 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lumn.    */.    
11aa0 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73 65  offset64 = offse
11ab0 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  t;.    for(i=0; 
11ac0 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
11ad0 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
11ae0 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
11af0 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
11b00 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20 20  u32)offset64;.  
11b10 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65        zIdx += ge
11b20 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
11b30 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
11b40 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
11b50 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11b60 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d  TypeLen(aType[i]
11b70 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
11b80 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20          /* If i 
11b90 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69  is less that nFi
11ba0 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  eld, then there 
11bb0 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20  are less fields 
11bc0 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  in this.        
11bd0 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53  ** record than S
11be0 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64  etNumColumns ind
11bf0 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65  icated there are
11c00 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
11c10 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
11c20 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74  . Set the offset
11c30 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63   for any extra c
11c40 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65  olumns not prese
11c50 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a  nt in.        **
11c60 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30   the record to 0
11c70 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64  . This tells cod
11c80 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65  e below to store
11c90 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20   a NULL.        
11ca0 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  ** instead of de
11cb0 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
11cc0 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
11cd0 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
11ce0 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
11cf0 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
11d00 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
11d10 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
11d20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
11d30 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
11d40 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
11d50 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
11d60 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
11d70 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
11d80 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
11d90 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
11da0 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
11db0 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
11dc0 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
11dd0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
11de0 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
11df0 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
11e00 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
11e10 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
11e20 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
11e30 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
11e40 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
11e50 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
11e60 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
11e70 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
11e80 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
11e90 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
11ea0 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f   > zEndHdr)|| (o
11eb0 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f 61  ffset64 > payloa
11ec0 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28  dSize).     || (
11ed0 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
11ee0 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34 29   offset64!=(u64)
11ef0 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a  payloadSize) ){.
11f00 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
11f10 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
11f20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11f30 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
11f40 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
11f50 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61  e column informa
11f60 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74  tion. If aOffset
11f70 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  [p2] is non-zero
11f80 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73  , then .  ** des
11f90 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c  erialize the val
11fa0 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
11fb0 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  rd. If aOffset[p
11fc0 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a  2] is zero,.  **
11fd0 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
11fe0 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64  not enough field
11ff0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
12000 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20  to satisfy the. 
12010 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e   ** request.  In
12020 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
12030 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f  the value NULL o
12040 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73  r to P4 if P4 is
12050 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  .  ** a pointer 
12060 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e  to a Mem object.
12070 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66  .  */.  if( aOff
12080 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61  set[p2] ){.    a
12090 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
120a0 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
120b0 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71  zRec ){.      sq
120c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
120d0 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73  aseExternal(pDes
120e0 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
120f0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
12100 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73  u8 *)&zRec[aOffs
12110 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70  et[p2]], aType[p
12120 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
12130 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e  }else{.      len
12140 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12150 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
12160 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71  e[p2]);.      sq
12170 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
12180 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a  (&sMem, pDest);.
12190 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
121a0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
121b0 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
121c0 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e  t[p2], len, pC->
121d0 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
121e0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
121f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
12200 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12210 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
12220 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
12230 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  em.z;.      sqli
12240 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
12250 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79  ((u8*)zData, aTy
12260 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
12270 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d      }.    pDest-
12280 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
12290 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
122a0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
122b0 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73  4_MEM ){.      s
122c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
122d0 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
122e0 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
122f0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d  M_Static);.    }
12300 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
12310 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
12320 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
12330 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20   }.  }..  /* If 
12340 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  we dynamically a
12350 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74  llocated space t
12360 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
12370 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  (in the.  ** sql
12380 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12390 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
123a0 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
123b0 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
123c0 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c  .  ** dynamicall
123d0 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
123e0 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44  e over to the pD
123f0 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20  est structure.. 
12400 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74   ** This prevent
12410 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e  s a memory copy.
12420 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d  .  */.  if( sMem
12430 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  .zMalloc ){.    
12440 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
12450 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
12460 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
12470 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
12480 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73  _Dyn) );.    ass
12490 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
124a0 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
124b0 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
124c0 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
124d0 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
124e0 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
124f0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
12500 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
12510 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
12520 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
12530 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d  z;.    pDest->zM
12540 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61  alloc = sMem.zMa
12550 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  lloc;.  }..  rc 
12560 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12570 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
12580 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  est);..op_column
12590 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
125a0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
125b0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
125c0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
125d0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
125e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
125f0 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
12600 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61   *.**.** Apply a
12610 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
12620 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
12630 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
12640 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
12650 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
12660 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
12670 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
12680 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12690 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
126a0 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
126b0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
126c0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
126d0 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
126e0 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
126f0 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
12700 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
12710 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
12720 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
12730 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
12740 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
12750 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
12760 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68 69   register to whi
12770 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ch to apply affi
12780 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nity */.  Mem *p
12790 4c 61 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Last;        /* 
127a0 4c 61 73 74 20 72 65 67 69 73 74 65 72 20 74 6f  Last register to
127b0 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20   which to apply 
127c0 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65  affinity */.  Me
127d0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
127e0 20 2f 2a 20 43 75 72 72 65 6e 74 20 72 65 67 69   /* Current regi
127f0 73 74 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  ster */..  zAffi
12800 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
12810 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d  ;.  pData0 = &p-
12820 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
12830 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
12840 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20  0[pOp->p2-1];.  
12850 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
12860 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
12870 65 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e  ec++){.    Expan
12880 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
12890 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
128a0 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70  Rec, zAffinity[p
128b0 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63  Rec-pData0], enc
128c0 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72  oding);.  }.  br
128d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
128e0 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31  e: MakeRecord P1
128f0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
12900 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
12910 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
12920 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20   with P1 into a 
12930 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20  single entry.** 
12940 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65  suitable for use
12950 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
12960 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
12970 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
12980 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
12990 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f  .  The details o
129a0 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65  f the format are
129b0 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c   irrelevant as l
129c0 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50  ong as.** the OP
129d0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
129e0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
129f0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52  cord later..** R
12a00 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63  efer to source c
12a10 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ode comments for
12a20 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   the details of 
12a30 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f  the record.** fo
12a40 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  rmat..**.** P4 m
12a50 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
12a60 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
12a70 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
12a80 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
12a90 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
12aa0 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
12ab0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
12ac0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
12ad0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
12ae0 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
12af0 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
12b00 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
12b10 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
12b20 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
12b30 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
12b40 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
12b50 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
12b60 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
12b70 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
12b80 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
12b90 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
12ba0 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
12bb0 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
12bc0 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
12bd0 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
12be0 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
12bf0 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
12c00 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
12c10 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
12c20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
12c30 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
12c40 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
12c50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12c60 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
12c70 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12c90 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12ca0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
12cb0 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cd0 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
12ce0 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
12cf0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
12d00 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
12d10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
12d20 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
12d30 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
12d40 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
12d50 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
12d60 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12d70 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
12d80 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
12d90 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
12da0 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
12db0 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
12dc0 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
12dd0 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
12de0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
12df0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
12e00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
12e10 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
12e20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12e30 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
12e40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12e50 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
12e60 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
12e70 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
12e80 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
12e90 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
12ea0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12eb0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
12ec0 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
12ed0 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
12ee0 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
12ef0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
12f00 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
12f10 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
12f20 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12f40 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
12f50 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
12f60 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
12f70 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
12f80 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
12f90 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
12fa0 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
12fb0 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
12fc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12fd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12fe0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12ff0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
13000 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
13010 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
13020 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
13030 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
13040 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
13050 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
13060 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13070 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13080 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13090 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
130a0 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
130b0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
130c0 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
130d0 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
130e0 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
130f0 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a  d so froth..  **
13100 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
13110 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
13120 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
13130 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
13140 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
13150 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
13160 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
13170 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13180 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
13190 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
131a0 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
131b0 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
131c0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
131d0 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
131e0 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
131f0 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
13200 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
13210 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
13220 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
13230 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
13240 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13250 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
13260 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42  er space */.  nB
13270 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  yte = 0;        
13280 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
13290 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
132a0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65   record */.  nZe
132b0 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
132c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
132d0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
132e0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
132f0 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
13300 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
13310 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
13320 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
13330 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
13340 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
13350 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  ld<=p->nMem+1 );
13360 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e  .  pData0 = &p->
13370 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
13380 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
13390 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
133a0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
133b0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
133c0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
133d0 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  rmat;..  /* Loop
133e0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
133f0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
13400 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
13410 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
13420 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
13430 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
13440 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
13450 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ord..  */.  for(
13460 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13470 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13480 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69  ){.    if( zAffi
13490 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
134a0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
134b0 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
134c0 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
134d0 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ng);.    }.    i
134e0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  f( pRec->flags&M
134f0 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d  EM_Zero && pRec-
13500 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  >n>0 ){.      sq
13510 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
13520 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
13530 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74    }.    serial_t
13540 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
13550 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
13560 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
13570 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
13580 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
13590 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
135a0 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
135b0 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  n;.    nHdr += s
135c0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
135d0 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
135e0 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
135f0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
13600 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75        /* Only pu
13610 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42  re zero-filled B
13620 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75  LOBs can be inpu
13630 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65  t to this Opcode
13640 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f  ..      ** We do
13650 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73   not allow blobs
13660 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61   with a prefix a
13670 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64  nd a zero-filled
13680 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   tail. */.      
13690 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
136a0 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73  .nZero;.    }els
136b0 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20  e if( len ){.   
136c0 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
136d0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64    }.  }..  /* Ad
136e0 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
136f0 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
13700 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
13710 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72  /.  nHdr += nVar
13720 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
13730 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
13740 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
13750 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
13760 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b  r) ){.    nHdr++
13770 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
13780 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f  nHdr+nData-nZero
13790 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
137a0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
137b0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
137c0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
137d0 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
137e0 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
137f0 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
13800 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
13810 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
13820 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
13830 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
13840 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
13850 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
13860 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
13870 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
13880 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
13890 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
138a0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
138b0 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20  e3VdbeMemGrow() 
138c0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
138d0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
138e0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
138f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13900 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
13910 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
13920 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
13930 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
13940 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  >p3];.  if( sqli
13950 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
13960 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
13970 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
13980 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
13990 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
139a0 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
139b0 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
139c0 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
139d0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
139e0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
139f0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
13a00 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
13a10 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
13a20 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
13a30 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
13a40 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
13a50 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
13a60 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
13a70 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
13a80 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
13a90 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
13aa0 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
13ab0 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
13ac0 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
13ad0 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
13ae0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13af0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
13b00 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
13b10 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
13b20 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
13b30 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
13b40 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
13b50 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
13b60 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
13b70 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
13b80 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
13b90 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
13ba0 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
13bb0 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
13bc0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
13bd0 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
13be0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
13bf0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
13c00 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
13c10 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
13c20 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
13c30 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
13c40 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
13c50 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
13c60 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
13c70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
13c80 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
13c90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
13ca0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
13cb0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
13cc0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
13cd0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
13ce0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
13cf0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
13d00 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
13d10 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
13d20 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
13d30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13d40 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
13d50 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
13d60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
13d70 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
13d80 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
13d90 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
13da0 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
13db0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
13dc0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
13dd0 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  sr ){.    rc = s
13de0 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
13df0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
13e00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
13e10 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20  Entry = 0;.  }. 
13e20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
13e30 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Int;.  pOut->
13e40 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
13e50 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
13e60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
13e70 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
13e80 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
13e90 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
13ea0 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
13eb0 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
13ec0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
13ed0 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
13ee0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
13ef0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
13f00 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
13f10 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
13f20 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
13f30 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
13f40 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
13f50 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
13f60 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
13f70 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
13f80 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
13fb0 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
13fc0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13fe0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
13ff0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
14000 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
14010 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
14020 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
14030 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
14040 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
14050 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
14060 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
14070 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
14080 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
14090 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
140a0 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
140b0 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
140c0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
140d0 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
140e0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
140f0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
14100 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
14110 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
14120 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
14130 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
14140 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
14150 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
14160 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
14170 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
14180 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
14190 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
141a0 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
141b0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
141c0 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
141d0 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
141e0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
141f0 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
14200 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
14210 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69  .    if( db->wri
14220 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20  teVdbeCnt>0 ){. 
14230 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
14240 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
14250 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
14260 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
14270 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
14280 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
14290 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
142a0 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
142b0 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
142c0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
142d0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
142e0 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
142f0 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
14300 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  t - ".        "S
14310 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
14320 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
14330 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
14340 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
14350 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
14360 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
14370 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ame);..      /* 
14380 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
14390 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
143a0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
143b0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
143c0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
143d0 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
143e0 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
143f0 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
14400 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
14410 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
14420 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
14430 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
14440 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
14450 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
14460 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
14470 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14480 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
14490 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
144a0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
144b0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
144c0 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
144d0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
144e0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
144f0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
14500 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
14510 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
14520 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
14530 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
14540 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
14550 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
14560 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
14570 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
14580 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
14590 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
145a0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
145b0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
145c0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
145d0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
145e0 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
145f0 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
14600 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
14610 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
14620 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
14630 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
14640 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
14650 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
14660 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
14670 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
14680 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
14690 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
146a0 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
146b0 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
146c0 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
146d0 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
146e0 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
146f0 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
14700 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
14710 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
14720 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
14730 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
14740 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
14750 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
14760 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
14770 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
14780 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
14790 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
147a0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
147b0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
147c0 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
147d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
147e0 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
147f0 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62   if( .        db
14800 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14810 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49   || (p1==SAVEPOI
14820 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64  NT_ROLLBACK && d
14830 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
14840 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
14850 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
14860 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
14870 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
14880 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
14890 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
148a0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
148b0 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f  ements. It is no
148c0 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f  t possible to ro
148d0 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69  llback a savepoi
148e0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74  nt.      ** if t
148f0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
14900 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ive statements a
14910 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  t all..      */.
14920 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
14930 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14940 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
14950 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65   "cannot %s save
14960 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
14970 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
14980 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31  ss",.        (p1
14990 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
149a0 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b  BACK ? "rollback
149b0 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20  ": "release").  
149c0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
149d0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
149e0 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
149f0 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
14a00 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
14a10 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
14a20 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
14a30 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
14a40 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
14a50 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
14a60 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
14a70 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
14a80 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
14a90 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
14aa0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
14ab0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
14ac0 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
14ad0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14ae0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14af0 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
14b00 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
14b10 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
14b20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
14b30 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
14b40 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
14b50 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
14b60 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
14b70 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
14b80 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14b90 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
14ba0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
14bb0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
14bc0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
14bd0 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
14be0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
14bf0 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
14c00 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
14c10 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
14c20 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
14c30 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
14c40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
14c50 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
14c60 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
14c70 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
14c80 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
14c90 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
14ca0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
14cb0 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
14cc0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f   - 1;.        fo
14cd0 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
14ce0 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
14cf0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
14d00 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
14d10 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
14d20 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
14d30 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
14d40 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
14d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
14d60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
14d70 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
14d80 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
14d90 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
14da0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
14db0 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  & (db->flags&SQL
14dc0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
14dd0 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  s)!=0 ){.       
14de0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
14df0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
14e00 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
14e10 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
14e20 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
14e30 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
14e40 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
14e50 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
14e60 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
14e70 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
14e80 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
14e90 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
14ea0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
14eb0 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
14ec0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
14ed0 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
14ee0 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
14ef0 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
14f00 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
14f10 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
14f20 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
14f30 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
14f40 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
14f50 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
14f60 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
14f70 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
14f80 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
14f90 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
14fa0 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
14fb0 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
14fc0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
14fd0 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
14fe0 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
14ff0 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
15000 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
15010 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
15020 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
15030 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
15040 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
15050 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
15060 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
15070 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
15080 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
15090 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
150a0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
150b0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
150c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
150d0 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
150e0 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
150f0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
15100 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
15110 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
15120 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
15130 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
15140 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
15150 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
15160 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
15170 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
15180 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
15190 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
151a0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
151b0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
151c0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  edCons;.      }.
151d0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
151e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
151f0 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
15200 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
15210 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
15220 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
15230 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
15240 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
15250 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
15260 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
15270 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
15280 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
15290 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
152a0 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
152b0 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
152c0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
152d0 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
152e0 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
152f0 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
15300 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
15310 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
15320 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
15330 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
15340 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
15350 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
15360 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
15370 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
15380 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
15390 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
153a0 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64  t turnOnAC;..  d
153b0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
153c0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
153d0 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
153e0 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20  2;.  turnOnAC = 
153f0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15400 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
15410 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20  mmit;.  assert( 
15420 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15430 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
15440 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
15450 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
15460 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
15470 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
15480 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15490 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20  activeVdbeCnt>0 
154a0 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
154b0 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
154c0 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20  ctive */..  if( 
154d0 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c  turnOnAC && iRol
154e0 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74  lback && db->act
154f0 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
15500 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
15510 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
15520 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
15530 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
15540 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
15550 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
15560 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
15570 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
15580 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
15590 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
155a0 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
155b0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
155c0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
155d0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
155e0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
155f0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
15600 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
15610 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
15620 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
15630 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
15640 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
15650 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  lse if( turnOnAC
15660 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
15670 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43  & db->writeVdbeC
15680 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  nt>0 ){.    /* I
15690 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
156a0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
156b0 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72  COMMIT and other
156c0 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67   VMs are writing
156d0 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61  .    ** return a
156e0 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
156f0 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ng that the othe
15700 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
15710 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
15720 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
15730 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15740 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
15750 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
15760 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
15770 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
15780 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
15790 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
157a0 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  USY;.  }else if(
157b0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
157c0 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
157d0 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
157e0 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
157f0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
15800 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
15810 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
15820 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20  llbackAll(db);. 
15830 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
15840 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
15850 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
15860 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
15870 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
15880 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
15890 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
158a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
158b0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
158c0 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
158d0 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20  mmit;.      if( 
158e0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
158f0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
15900 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
15910 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64   = pc;.        d
15920 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15930 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
15940 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
15950 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
15960 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
15970 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
15980 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
15990 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
159a0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
159b0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
159c0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
159d0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
159e0 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
159f0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
15a00 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
15a10 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
15a20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
15a30 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
15a40 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
15a50 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  e{.    sqlite3Se
15a60 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15a70 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20  Msg, db,.       
15a80 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
15a90 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
15aa0 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
15ab0 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
15ac0 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
15ad0 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
15ae0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
15af0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
15b00 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15b20 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
15b30 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
15b40 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
15b50 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
15b60 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
15b70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
15b80 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
15b90 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a  tion P1 P2 * * *
15ba0 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
15bb0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
15bc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64   transaction end
15bd0 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20  s when a Commit 
15be0 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  or Rollback.** o
15bf0 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74  pcode is encount
15c00 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67  ered.  Depending
15c10 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c   on the ON CONFL
15c20 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65  ICT setting, the
15c30 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  .** transaction 
15c40 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f  might also be ro
15c50 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20  lled back if an 
15c60 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
15c70 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ered..**.** P1 i
15c80 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
15c90 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
15ca0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
15cb0 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
15cc0 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
15cd0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
15ce0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
15cf0 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
15d00 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
15d10 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
15d20 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
15d30 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
15d40 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
15d50 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
15d60 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
15d70 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
15d80 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
15d90 20 73 74 61 72 74 65 64 2e 20 20 41 20 52 45 53   started.  A RES
15da0 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a  ERVED lock is.**
15db0 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65   obtained on the
15dc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
15dd0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
15de0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
15df0 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72  ed.  No.** other
15e00 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61   process can sta
15e10 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65  rt another write
15e20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69   transaction whi
15e30 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  le this transact
15e40 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77  ion is.** underw
15e50 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20  ay.  Starting a 
15e60 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
15e70 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61  n also creates a
15e80 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
15e90 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72  l. A.** write tr
15ea0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
15eb0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
15ec0 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e   any changes can
15ed0 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a   be made to the.
15ee0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 49 66  ** database.  If
15ef0 20 50 32 20 69 73 20 32 20 6f 72 20 67 72 65 61   P2 is 2 or grea
15f00 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c  ter then an EXCL
15f10 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c  USIVE lock is al
15f20 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f  so obtained.** o
15f30 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  n the file..**.*
15f40 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
15f50 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
15f60 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
15f70 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
15f80 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
15f90 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
15fa0 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
15fb0 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
15fc0 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
15fd0 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
15fe0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
15ff0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
16000 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
16010 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
16020 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
16030 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
16040 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
16050 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
16060 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
16070 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
16080 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
16090 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
160a0 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
160b0 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
160c0 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
160d0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
160e0 6c 6f 77 73 20 74 68 65 20 61 66 66 65 63 74 73  lows the affects
160f0 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   of this.** VDBE
16100 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
16110 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
16120 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
16130 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
16140 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
16150 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
16160 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
16170 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
16180 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
16190 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
161a0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
161b0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
161c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
161d0 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
161e0 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  d-lock is obtain
161f0 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
16200 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65  se file..*/.case
16210 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
16220 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
16230 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
16240 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
16250 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
16260 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
16270 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
16280 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
16290 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
162a0 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
162b0 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
162c0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
162d0 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
162e0 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  >p2);.    if( rc
162f0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
16300 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
16310 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
16320 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16330 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
16340 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
16350 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
16360 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16370 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16380 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  o_error;.    }..
16390 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
163a0 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  && p->usesStmtJo
163b0 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28  urnal .     && (
163c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
163d0 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56  0 || db->activeV
163e0 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29  dbeCnt>1) .    )
163f0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
16400 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
16410 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
16420 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
16430 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
16440 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
16450 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
16460 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
16470 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
16480 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
16490 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
164a0 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
164b0 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
164c0 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
164d0 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  }.      rc = sql
164e0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
164f0 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
16500 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f  ement);..      /
16510 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
16520 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
16530 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
16540 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
16550 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
16560 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
16570 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
16580 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
16590 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
165a0 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
165b0 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
165c0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
165d0 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
165e0 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
165f0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
16600 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  rredCons;.    }.
16610 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
16620 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
16630 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
16640 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
16650 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
16660 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
16670 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
16680 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
16690 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
166a0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
166b0 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
166c0 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
166d0 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
166e0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
166f0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
16700 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
16710 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
16720 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
16730 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
16740 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
16750 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
16760 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
16770 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
16780 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
16790 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
167a0 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
167b0 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
167c0 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
167d0 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
167e0 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
167f0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
16800 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
16810 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
16820 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
16830 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
16840 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
16850 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
16860 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
16870 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  ie;..  iDb = pOp
16880 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
16890 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
168a0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
168b0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
168c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
168d0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
168e0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
168f0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
16900 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
16910 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
16920 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
16930 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
16940 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
16950 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
16960 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
16970 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
16980 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65  = iMeta;.  MemSe
16990 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
169a0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
169b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
169c0 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
169d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
169e0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
169f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
16a00 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
16a10 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
16a20 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
16a30 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
16a40 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
16a50 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
16a60 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
16a70 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
16a80 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
16a90 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
16aa0 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
16ab0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
16ac0 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
16ad0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
16ae0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
16af0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
16b00 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
16b10 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
16b20 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
16b30 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
16b40 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
16b50 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
16b60 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
16b70 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
16b80 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
16b90 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
16ba0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
16bb0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
16bc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
16bd0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
16be0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
16bf0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
16c00 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
16c10 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
16c20 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
16c30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
16c40 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
16c50 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
16c60 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
16c70 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
16c80 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
16c90 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
16ca0 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
16cb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
16cc0 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
16cd0 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
16ce0 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
16cf0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
16d00 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
16d10 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
16d20 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
16d30 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
16d40 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
16d50 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
16d60 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
16d70 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
16d80 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
16d90 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
16da0 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16db0 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
16dc0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
16dd0 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
16de0 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
16df0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
16e00 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
16e10 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
16e20 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
16e30 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
16e40 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
16e50 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
16e60 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
16e70 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
16e80 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
16e90 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
16ea0 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
16eb0 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
16ec0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
16ed0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
16ee0 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
16ef0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
16f00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
16f10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
16f20 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
16f30 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
16f40 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
16f50 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
16f60 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
16f70 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
16f80 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
16f90 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
16fa0 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
16fb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
16fc0 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
16fd0 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
16fe0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
16ff0 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
17000 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
17010 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
17020 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
17030 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
17040 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
17050 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
17060 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
17070 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
17080 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
17090 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
170a0 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
170b0 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
170c0 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
170d0 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
170e0 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
170f0 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
17100 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
17110 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
17120 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
17130 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
17140 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
17150 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
17160 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
17170 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
17180 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
17190 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
171a0 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
171b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
171c0 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
171d0 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
171e0 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
171f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
17200 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
17210 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
17220 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
17230 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
17240 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
17250 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
17260 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
17270 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
17280 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
17290 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
172a0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
172b0 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74 61 20  else{.    iMeta 
172c0 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
172d0 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b  Meta!=pOp->p2 ){
172e0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
172f0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
17300 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
17310 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
17320 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
17330 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
17340 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
17350 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
17360 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
17370 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
17380 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
17390 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
173a0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
173b0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
173c0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
173d0 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
173e0 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
173f0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
17400 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
17410 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
17420 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
17430 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
17440 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
17450 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
17460 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
17470 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
17480 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
17490 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
174a0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
174b0 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
174c0 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
174d0 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
174e0 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
174f0 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
17500 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
17510 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
17520 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
17530 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
17540 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
17550 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
17560 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
17570 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
17580 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
17590 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
175a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
175b0 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
175c0 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
175d0 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
175e0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
175f0 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
17600 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
17610 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
17620 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
17630 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
17640 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
17650 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
17660 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
17670 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
17680 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
17690 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
176a0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
176b0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
176c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
176d0 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
176e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
176f0 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
17700 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17710 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
17720 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
17730 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
17740 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
17750 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
17760 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
17770 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
17780 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
17790 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
177a0 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
177b0 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
177c0 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
177d0 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
177e0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
177f0 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
17800 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
17810 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
17820 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
17830 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
17840 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
17850 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
17860 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
17870 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
17880 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
17890 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
178a0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
178b0 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
178c0 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
178d0 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
178e0 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
178f0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17900 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
17910 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
17920 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
17930 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
17940 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
17950 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
17960 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
17970 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
17980 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
17990 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
179a0 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
179b0 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
179c0 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
179d0 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
179e0 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
179f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17a00 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
17a10 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
17a20 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
17a30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
17a40 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
17a50 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
17a60 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
17a70 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
17a80 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
17a90 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
17aa0 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
17ab0 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
17ac0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
17ad0 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
17ae0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
17af0 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
17b00 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
17b10 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
17b20 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
17b30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
17b40 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
17b50 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
17b60 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
17b70 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
17b80 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
17b90 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
17ba0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
17bb0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
17bc0 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
17bd0 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
17be0 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
17bf0 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
17c00 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
17c10 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
17c20 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
17c30 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
17c40 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
17c50 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
17c60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
17c70 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
17c80 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
17c90 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
17ca0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
17cb0 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
17cc0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
17cd0 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
17ce0 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
17cf0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
17d00 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
17d10 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
17d20 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
17d30 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
17d40 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
17d50 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
17d60 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
17d70 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
17d80 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
17d90 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
17da0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
17db0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
17dc0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
17dd0 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
17de0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
17df0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
17e00 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
17e10 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
17e20 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
17e30 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
17e40 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
17e50 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
17e60 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
17e70 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
17e80 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
17e90 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
17ea0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
17eb0 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
17ec0 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
17ed0 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
17ee0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
17ef0 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
17f00 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
17f10 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
17f20 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
17f30 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
17f40 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
17f50 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
17f60 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
17f70 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
17f80 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
17f90 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
17fa0 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
17fb0 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
17fc0 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
17fd0 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
17fe0 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
17ff0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  d..*/.case OP_Op
18000 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
18010 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69  OpenWrite: {.  i
18020 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
18030 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
18040 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
18050 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
18060 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
18070 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
18080 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
18090 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
180a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
180b0 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62  ITE_ABORT;.    b
180c0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
180d0 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
180e0 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
180f0 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
18100 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
18110 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
18120 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
18130 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
18140 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
18150 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
18160 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
18170 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
18180 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
18190 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
181a0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
181b0 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
181c0 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62  = 1;.    if( pDb
181d0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
181e0 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
181f0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
18200 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
18210 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
18220 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
18230 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
18240 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
18250 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
18260 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
18270 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
18280 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
18290 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
182a0 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
182b0 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74  m[p2];.    sqlit
182c0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
182d0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
182e0 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
182f0 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
18300 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
18310 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
18320 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
18330 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
18340 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
18350 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
18360 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
18370 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
18380 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
18390 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
183a0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
183b0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
183c0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
183d0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
183e0 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
183f0 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
18400 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
18410 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
18420 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
18430 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
18440 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18450 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
18460 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
18470 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
18480 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
18490 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
184a0 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63     pKeyInfo->enc
184b0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
184c0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
184d0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a  Info->nField+1;.
184e0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
184f0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
18500 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
18510 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
18520 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18530 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20  p1>=0 );.  pCur 
18540 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
18550 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
18560 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
18570 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
18580 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
18590 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
185a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
185b0 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
185c0 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
185d0 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
185e0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
185f0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
18600 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
18610 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
18620 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
18630 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
18640 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73  lues that.  ** s
18650 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
18660 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61  r() may return a
18670 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  re SQLITE_EMPTY 
18680 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a  and SQLITE_OK. .
18690 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54    ** SQLITE_EMPT
186a0 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e  Y is only return
186b0 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ed when attempti
186c0 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74  ng to open the t
186d0 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64  able.  ** rooted
186e0 20 61 74 20 70 61 67 65 20 31 20 6f 66 20 61 20   at page 1 of a 
186f0 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61  zero-byte databa
18700 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  se.  */.  assert
18710 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18720 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  TY || rc==SQLITE
18730 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  _OK );.  if( rc=
18740 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
18750 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73  .    pCur->pCurs
18760 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  or = 0;.    rc =
18770 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
18780 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
18790 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
187a0 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
187b0 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
187c0 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
187d0 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
187e0 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
187f0 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
18800 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
18810 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
18820 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
18830 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
18840 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
18850 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
18860 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
18870 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
18880 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
18890 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
188a0 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
188b0 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
188c0 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
188d0 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
188e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
188f0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
18900 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
18910 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
18920 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
18930 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
18940 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
18950 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
18960 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
18970 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
18980 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
18990 2e 20 20 54 68 65 20 74 72 61 6e 73 69 65 6e 74  .  The transient
189a0 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74   or virtual.** t
189b0 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
189c0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
189d0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
189e0 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
189f0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
18a00 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
18a10 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
18a20 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
18a30 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
18a40 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
18a50 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
18a60 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
18a70 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
18a80 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
18a90 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
18aa0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
18ab0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
18ac0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
18ad0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
18ae0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
18af0 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20  was once called 
18b00 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74  OpenTemp.  But t
18b10 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63  hat created.** c
18b20 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65  onfusion because
18b30 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20   the term "temp 
18b40 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65  table", might re
18b50 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f  fer either.** to
18b60 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74   a TEMP table at
18b70 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
18b80 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70  or to a table op
18b90 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20  ened by.** this 
18ba0 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68  opcode.  Then th
18bb0 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61  is opcode was ca
18bc0 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20  ll OpenVirtual. 
18bd0 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65   But.** that cre
18be0 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  ated confusion w
18bf0 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69  ith the whole vi
18c00 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61  rtual-table idea
18c10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
18c20 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
18c30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
18c40 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
18c50 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20  int openFlags = 
18c60 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18c70 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
18c80 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
18c90 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
18ca0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
18cb0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
18cc0 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
18cd0 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
18ce0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
18cf0 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73  SIENT_DB;..  ass
18d00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
18d10 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
18d20 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
18d30 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
18d40 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
18d50 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
18d60 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
18d70 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
18d80 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72  lite3BtreeFactor
18d90 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49  y(db, 0, 1, SQLI
18da0 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f  TE_DEFAULT_TEMP_
18db0 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e  CACHE_SIZE, open
18dc0 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20 20  Flags,.         
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20    &pCx->pBt);.  
18df0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18e00 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
18e10 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
18e20 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
18e30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
18e40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18e50 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
18e60 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
18e70 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
18e80 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
18e90 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
18ea0 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
18eb0 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f  h the BTREE_ZERO
18ec0 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65  DATA flag before
18ed0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
18ee0 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
18ef0 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
18f00 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
18f10 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
18f20 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
18f30 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
18f40 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45  page 1 (an INTKE
18f50 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
18f60 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
18f70 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20  .pKeyInfo ){.   
18f80 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
18f90 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
18fa0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
18fb0 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
18fc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
18fd0 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
18fe0 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
18ff0 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20 20  ZERODATA); .    
19000 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
19010 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
19020 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
19030 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
19040 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19050 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
19060 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
19070 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
190a0 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
190b0 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
190c0 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
190d0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
190e0 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
190f0 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
19100 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
19110 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
19120 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
19130 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
19140 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
19150 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
19160 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
19170 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
19180 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
19190 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
191a0 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
191b0 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a   !pCx->isTable;.
191c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
191d0 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
191e0 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
191f0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
19200 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
19210 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
19220 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
19230 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
19240 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63   of data.  The c
19250 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f  ontent of that o
19260 6e 65 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f  ne row in the co
19270 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a  ntent of memory.
19280 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  ** register P2. 
19290 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
192a0 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
192b0 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
192c0 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
192d0 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
192e0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
192f0 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
19300 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
19310 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
19320 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  s used to hold t
19330 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  he a single.** r
19340 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
19350 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
19360 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
19370 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
19380 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
19390 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
193a0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
193b0 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
193c0 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
193d0 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
193e0 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
193f0 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
19400 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
19410 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
19420 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
19430 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
19440 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
19450 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
19460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
19470 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
19480 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
19490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
194a0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
194b0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
194c0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
194d0 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28  3, -1, 0);.  if(
194e0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
194f0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
19500 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
19510 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
19520 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
19530 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
19540 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
19550 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
19560 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
19570 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
19580 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
19590 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
195a0 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
195b0 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
195c0 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
195d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
195e0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
195f0 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
19600 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19610 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
19620 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
19630 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
19640 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
19650 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
19660 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
19670 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19680 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20   Opcode: SeekGe 
19690 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
196a0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
196b0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
196c0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
196d0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
196e0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
196f0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
19700 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
19710 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
19720 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
19730 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
19740 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
19750 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
19760 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
19770 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
19780 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
19790 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
197a0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
197b0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
197c0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
197d0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
197e0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
197f0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
19800 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
19810 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
19820 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
19830 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
19840 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
19850 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
19860 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
19870 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
19880 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
19890 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
198a0 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  t, SeekLt, SeekG
198b0 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
198c0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50  Opcode: SeekGt P
198d0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
198e0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
198f0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
19900 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
19910 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
19920 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
19930 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
19940 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
19950 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
19960 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
19970 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
19980 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
19990 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
199a0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
199b0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
199c0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
199d0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
199e0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
199f0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
19a00 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
19a10 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
19a20 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
19a30 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
19a40 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
19a50 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
19a60 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
19a70 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
19a80 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
19a90 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
19aa0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
19ab0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
19ac0 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
19ad0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
19ae0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19af0 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Lt P1 P2 P3 P4 *
19b00 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f   .**.** If curso
19b10 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19b20 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19b30 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19b40 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
19b50 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
19b60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
19b70 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
19b80 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
19b90 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
19ba0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
19bb0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
19bc0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
19bd0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
19be0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
19bf0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
19c00 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
19c10 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
19c20 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
19c30 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
19c40 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
19c50 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
19c60 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
19c70 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
19c80 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
19c90 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
19ca0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
19cb0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
19cc0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
19cd0 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
19ce0 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
19cf0 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
19d00 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65  * Opcode: SeekLe
19d10 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
19d20 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
19d30 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
19d40 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
19d50 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
19d60 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
19d70 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
19d80 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
19d90 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
19da0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
19db0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
19dc0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
19dd0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
19de0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
19df0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
19e00 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
19e10 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
19e20 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
19e30 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
19e40 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
19e50 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
19e60 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
19e70 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
19e80 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
19e90 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
19ea0 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
19eb0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
19ec0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
19ed0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
19ee0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
19ef0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19f00 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
19f10 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
19f20 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
19f30 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
19f40 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  t:         /* ju
19f50 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
19f60 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20  OP_SeekLe:      
19f70 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
19f80 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
19f90 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
19fa0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
19fb0 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20  OP_SeekGt: {    
19fc0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
19fd0 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  */.  int res;.  
19fe0 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75  int oc;.  VdbeCu
19ff0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61  rsor *pC;.  Unpa
1a000 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1a010 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36  int nField;.  i6
1a020 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20  4 iKey;      /* 
1a030 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65  The rowid we are
1a040 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a   to seek to */..
1a050 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a060 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1a070 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1a080 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
1a090 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
1a0a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1a0b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1a0c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1a0d0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1a0e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a0f0 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f  OP_SeekLe == OP_
1a100 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73  SeekLt+1 );.  as
1a110 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20  sert( OP_SeekGe 
1a120 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29  == OP_SeekLt+2 )
1a130 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1a140 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGt == OP_Seek
1a150 4c 74 2b 33 20 29 3b 0a 20 20 69 66 28 20 70 43  Lt+3 );.  if( pC
1a160 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a  ->pCursor!=0 ){.
1a170 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70      oc = pOp->op
1a180 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  code;.    pC->nu
1a190 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69  llRow = 0;.    i
1a1a0 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1a1b0 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69  {.      /* The i
1a1c0 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1a1d0 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1a1e0 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1a1f0 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1a200 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1a210 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1a220 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1a230 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1a240 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74  an do.      ** t
1a250 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65  he seek, so cove
1a260 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20  rt it. */.      
1a270 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
1a280 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20  nity(pIn3);.    
1a290 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1a2a0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1a2b0 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f  3);.      pC->ro
1a2c0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1a2d0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1a2e0 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1a2f0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1a300 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1a310 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a   without.      *
1a320 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
1a330 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
1a340 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
1a350 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
1a360 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1a370 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1a380 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
1a390 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1a3a0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1a3b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1a3c0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1a3d0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1a3e0 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1a3f0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1a400 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1a410 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
1a420 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
1a430 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
1a440 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1a450 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
1a460 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1a470 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49    }.        /* I
1a480 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
1a490 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  point, then the 
1a4a0 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1a4b0 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20   a floating.    
1a4c0 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d      ** point num
1a4d0 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ber. */.        
1a4e0 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
1a4f0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1a500 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20  !=0 );..        
1a510 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45  if( iKey==SMALLE
1a520 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e  ST_INT64 && (pIn
1a530 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  3->r<(double)iKe
1a540 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20  y || pIn3->r>0) 
1a550 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1a560 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
1a570 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67  too large in mag
1a580 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70  nitude to be exp
1a590 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20  ressed as an.   
1a5a0 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65         ** intege
1a5b0 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  r. */.          
1a5c0 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
1a5d0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30     if( pIn3->r<0
1a5e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1a5f0 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1a600 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1a610 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1a620 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
1a640 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
1a650 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  irst(pC->pCursor
1a660 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1a670 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1a680 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1a690 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a6a0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  or;.            
1a6b0 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  }.          }els
1a6c0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e{.            i
1a6d0 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65  f( oc<=OP_SeekLe
1a6e0 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1a6f0 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1a700 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20  ==OP_SeekLe );. 
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1a720 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
1a730 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1a740 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1a750 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a760 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1a770 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a780 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1a790 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1a7a0 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
1a7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20  .            pc 
1a7c0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1a7d0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a7e0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a7f0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63      }else if( oc
1a800 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1a810 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a  c==OP_SeekGe ){.
1a820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1a830 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66   the ceiling() f
1a840 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
1a850 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a  rt real->int */.
1a860 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1a870 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29  n3->r > (double)
1a880 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20  iKey ) iKey++;. 
1a890 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1a8a0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1a8b0 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74  he floor() funct
1a8c0 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72  ion to convert r
1a8d0 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20  eal->int */.    
1a8e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1a8f0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f  ==OP_SeekLe || o
1a900 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1a910 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1a920 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29  n3->r < (double)
1a930 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20  iKey ) iKey--;. 
1a940 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1a950 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c   .      rc = sql
1a960 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1a970 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1a980 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1a990 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1a9a0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1a9b0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a9c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a9d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1a9e0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
1a9f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  0 ){.        pC-
1aa00 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1aa10 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c  1;.        pC->l
1aa20 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
1aa30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1aa40 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64  se{.      nField
1aa50 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1aa60 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1aa70 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1aa80 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
1aa90 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
1aaa0 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20       r.pKeyInfo 
1aab0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1aac0 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d        r.nField =
1aad0 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
1aae0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
1aaf0 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1ab00 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1ab10 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1ab20 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f        **   if( o
1ab30 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c==OP_SeekGt || 
1ab40 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b  oc==OP_SeekLe ){
1ab50 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  .      **     r.
1ab60 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1ab70 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20  _INCRKEY;.      
1ab80 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  **   }else{.    
1ab90 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73    **     r.flags
1aba0 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20   = 0;.      **  
1abb0 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20   }.      */.    
1abc0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1abd0 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28  CKED_INCRKEY * (
1abe0 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
1abf0 6b 4c 74 29 29 3b 0a 20 20 20 20 20 20 61 73 73  kLt));.      ass
1ac00 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1ac10 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55  Gt || r.flags==U
1ac20 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
1ac30 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1ac40 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc!=OP_SeekLe |
1ac50 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1ac60 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1ac70 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1ac80 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e  =OP_SeekGe || r.
1ac90 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20  flags==0 );.    
1aca0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1acb0 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61  _SeekLt || r.fla
1acc0 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  gs==0 );..      
1acd0 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  r.aMem = &p->aMe
1ace0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1acf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ad00 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1ad10 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  d(pC->pCursor, &
1ad20 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
1ad30 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1ad40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1ad50 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ad60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1ad70 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f    }.      pC->ro
1ad80 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1ad90 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
1ada0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1adb0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1adc0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1add0 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
1ade0 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
1adf0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
1ae00 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  ++;.#endif.    i
1ae10 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1ae20 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1ae30 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1ae40 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1ae50 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c       if( res<0 |
1ae60 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1ae70 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20  =OP_SeekGt) ){. 
1ae80 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1ae90 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d  te3BtreeNext(pC-
1aea0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1aeb0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1aec0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1aed0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1aee0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43  rror;.        pC
1aef0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1af00 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
1af10 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
1af20 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
1af30 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
1af40 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  t( oc==OP_SeekLt
1af50 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1af60 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  e );.      if( r
1af70 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
1af80 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  && oc==OP_SeekLt
1af90 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
1afa0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1afb0 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73  evious(pC->pCurs
1afc0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1afd0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1afe0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1aff0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b000 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
1b010 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1b020 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b030 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
1b040 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
1b050 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
1b060 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
1b070 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65  o.        ** see
1b080 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20   if this is the 
1b090 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f  case..        */
1b0a0 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73  .        res = s
1b0b0 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
1b0c0 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
1b0d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
1b0e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
1b0f0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20   );.    if( res 
1b100 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1b110 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
1b120 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1b130 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68   This happens wh
1b140 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f  en attempting to
1b150 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65   open the sqlite
1b160 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20  3_master table. 
1b170 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61     ** for read a
1b180 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51  ccess returns SQ
1b190 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74  LITE_EMPTY. In t
1b1a0 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a  his case always.
1b1b0 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20      ** take the 
1b1c0 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72  jump (since ther
1b1d0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1b1e0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a   in the table)..
1b1f0 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20      */.    pc = 
1b200 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1b210 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b220 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
1b230 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
1b240 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62  1 is an open tab
1b250 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32  le cursor and P2
1b260 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65   is a rowid inte
1b270 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a  ger.  Arrange.**
1b280 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20   for P1 to move 
1b290 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1b2a0 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67  s to the rowid g
1b2b0 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a  iven by P2..**.*
1b2c0 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c  * This is actual
1b2d0 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65  ly a deferred se
1b2e0 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74  ek.  Nothing act
1b2f0 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e  ually happens un
1b300 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  til.** the curso
1b310 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61  r is used to rea
1b320 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61  d a record.  Tha
1b330 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61  t way, if no rea
1b340 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20  ds.** occur, no 
1b350 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20  unnecessary I/O 
1b360 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65  happens..*/.case
1b370 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f   OP_Seek: {    /
1b380 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
1b390 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
1b3a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1b3b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1b3c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1b3d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1b3e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1b3f0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  !=0 );.  if( ALW
1b400 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
1b410 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
1b420 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1b430 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
1b440 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 6d  w = 0;.    pC->m
1b450 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
1b460 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1b470 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d  e(pIn2);.    pC-
1b480 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b490 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
1b4a0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
1b4b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20   }.  break;.}.  
1b4c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
1b4d0 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1b4e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1b4f0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1b500 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1b510 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1b520 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1b530 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1b540 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1b550 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1b560 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1b570 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1b580 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1b590 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1b5a0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1b5b0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1b5c0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1b5d0 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1b5e0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1b5f0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1b600 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1b610 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1b620 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1b630 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1b640 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
1b650 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1b660 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  4 *.**.** If P4=
1b670 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1b680 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1b690 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1b6a0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1b6b0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1b6c0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1b6d0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1b6e0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1b6f0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1b700 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1b710 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1b720 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1b730 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1b740 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1b750 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1b760 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1b770 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1b780 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1b790 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1b7a0 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1b7b0 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1b7c0 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1b7d0 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1b7e0 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1b7f0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1b800 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1b810 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1b820 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1b830 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1b840 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  entry..**.** See
1b850 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1b860 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75  tExists, IsUniqu
1b870 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1b880 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1b890 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1b8a0 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1b8b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1b8c0 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1b8d0 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65  dyExists;.  Vdbe
1b8e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1b8f0 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
1b900 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1b910 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1b920 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65  rd r;.  char aTe
1b930 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a  mpRec[ROUND8(siz
1b940 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  eof(UnpackedReco
1b950 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  rd)) + sizeof(Me
1b960 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64  m)*3 + 7];..#ifd
1b970 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1b980 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
1b990 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
1b9a0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1b9b0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1b9c0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1b9d0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1b9e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1b9f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1ba00 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1ba10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1ba20 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1ba30 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
1ba40 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
1ba50 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20  ){..    assert( 
1ba60 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
1ba70 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
1ba80 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 20 72  4.i>0 ){.      r
1ba90 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1baa0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1bab0 72 2e 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e  r.nField = pOp->
1bac0 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d  p4.i;.      r.aM
1bad0 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 20  em = pIn3;.     
1bae0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1baf0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1bb00 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  ;.      pIdxKey 
1bb10 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  = &r;.    }else{
1bb20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1bb30 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1bb40 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 45  _Blob );.      E
1bb50 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
1bb60 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20 3d  .      pIdxKey =
1bb70 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1bb80 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1bb90 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1bba0 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20  pIn3->z,.       
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbd0 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1bbe0 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20  f(aTempRec));.  
1bbf0 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1bc00 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  =0 ){.        go
1bc10 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1bc20 20 7d 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79   }.      pIdxKey
1bc30 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
1bc40 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1bc50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
1bc60 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1bc70 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1bc80 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
1bc90 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1bca0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69     if( pOp->p4.i
1bcb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
1bcc0 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e  ite3VdbeDeleteUn
1bcd0 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64  packedRecord(pId
1bce0 78 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20 20  xKey);.    }.   
1bcf0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1bd00 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61  OK ){.      brea
1bd10 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72  k;.    }.    alr
1bd20 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
1bd30 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64  s==0);.    pC->d
1bd40 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1bd50 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1bd60 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1bd70 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
1bd80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1bd90 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28  Found ){.    if(
1bda0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
1bdb0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1bdc0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
1bdd0 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
1bde0 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1bdf0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1be00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1be10 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50 32  : IsUnique P1 P2
1be20 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
1be30 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65 6e  ursor P1 is open
1be40 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   on an index b-t
1be50 72 65 65 20 2d 20 74 68 61 74 20 69 73 20 74 6f  ree - that is to
1be60 20 73 61 79 2c 20 61 20 62 74 72 65 65 20 77 68   say, a btree wh
1be70 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20 61  ich.** no data a
1be80 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  nd where the key
1be90 20 61 72 65 20 72 65 63 6f 72 64 73 20 67 65 6e   are records gen
1bea0 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b  erated by OP_Mak
1beb0 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20  eRecord with.** 
1bec0 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20 62  the list field b
1bed0 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65 72  eing the integer
1bee0 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65 6e   ROWID of the en
1bef0 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64  try that the ind
1bf00 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66 65  ex.** entry refe
1bf10 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rs to..**.** The
1bf20 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e   P3 register con
1bf30 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  tains an integer
1bf40 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
1bf50 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64  Call this record
1bf60 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52   .** number R. R
1bf70 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74 68  egister P4 is th
1bf80 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65 74  e first in a set
1bf90 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73   of N contiguous
1bfa0 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68   registers.** th
1bfb0 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e  at make up an un
1bfc0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1bfd0 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
1bfe0 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50 31  d with cursor P1
1bff0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
1c000 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72  f N can be infer
1c010 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72  red from the cur
1c020 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20  sor. N includes 
1c030 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c  the rowid.** val
1c040 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74  ue appended to t
1c050 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
1c060 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73  dex record. This
1c070 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79   rowid value may
1c080 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  .** or may not b
1c090 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e  e the same as R.
1c0a0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66  .**.** If any of
1c0b0 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72 73   the N registers
1c0c0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1c0d0 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74  register P4 cont
1c0e0 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76  ains a NULL.** v
1c0f0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
1c100 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1c110 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74  .** Otherwise, t
1c120 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1c130 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72  checks if cursor
1c140 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20   P1 contains an 
1c150 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74  entry.** where t
1c160 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66  he first (N-1) f
1c170 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20  ields match but 
1c180 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  the rowid value 
1c190 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66  at the end.** of
1c1a0 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79   the index entry
1c1b0 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68   is not R. If th
1c1c0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65  ere is no such e
1c1d0 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75  ntry, control ju
1c1e0 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75  mps.** to instru
1c1f0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
1c200 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f  ise, the rowid o
1c210 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e  f the conflictin
1c220 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79  g index.** entry
1c230 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65   is copied to re
1c240 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f  gister P3 and co
1c250 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f  ntrol falls thro
1c260 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
1c270 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
1c280 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1c290 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  NotFound, NotExi
1c2a0 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61  sts, Found.*/.ca
1c2b0 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20  se OP_IsUnique: 
1c2c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1c2d0 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69  , in3 */.  u16 i
1c2e0 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
1c2f0 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72  *pCx;.  BtCursor
1c300 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e   *pCrsr;.  u16 n
1c310 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d  Field;.  Mem *aM
1c320 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  em;.  UnpackedRe
1c330 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1c340 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1c350 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1c360 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1c390 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1c3a0 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1c3b0 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   aMem = &p->aMem
1c3c0 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f  [pOp->p4.i];.  /
1c3d0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
1c3e0 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61  e values of para
1c3f0 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34  meters P1 and P4
1c400 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a   are in range. *
1c410 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1c420 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1c430 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1c440 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1c450 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1c460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c470 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c480 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c490 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ;..  /* Find the
1c4a0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a   index cursor. *
1c4b0 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  /.  pCx = p->apC
1c4c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1c4d0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1c4e0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1c4f0 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1c500 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63  lt = 0;.  pCx->c
1c510 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1c520 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73  HE_STALE;.  pCrs
1c530 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  r = pCx->pCursor
1c540 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f  ;..  /* If any o
1c550 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  f the values are
1c560 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20   NULL, take the 
1c570 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c  jump. */.  nFiel
1c580 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  d = pCx->pKeyInf
1c590 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72  o->nField;.  for
1c5a0 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64  (ii=0; ii<nField
1c5b0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ; ii++){.    if(
1c5c0 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20   aMem[ii].flags 
1c5d0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1c5e0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1c5f0 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73   - 1;.      pCrs
1c600 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65  r = 0;.      bre
1c610 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
1c620 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e 46  assert( (aMem[nF
1c630 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ield].flags & ME
1c640 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20  M_Null)==0 );.. 
1c650 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1c660 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65  .    /* Populate
1c670 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63   the index searc
1c680 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e  h key. */.    r.
1c690 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e  pKeyInfo = pCx->
1c6a0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1c6b0 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20  nField = nField 
1c6c0 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  + 1;.    r.flags
1c6d0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1c6e0 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72  IX_SEARCH;.    r
1c6f0 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a 20  .aMem = aMem;.. 
1c700 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68     /* Extract th
1c710 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f  e value of R fro
1c720 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a  m register P3. *
1c730 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
1c740 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1c750 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49  In3);.    R = pI
1c760 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a  n3->u.i;..    /*
1c770 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54 72   Search the B-Tr
1c780 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20  ee index. If no 
1c790 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f  conflicting reco
1c7a0 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d  rd is found, jum
1c7b0 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20  p.    ** to P2. 
1c7c0 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20  Otherwise, copy 
1c7d0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
1c7e0 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1c7f0 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65  ord to.    ** re
1c800 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66 61  gister P3 and fa
1c810 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1c820 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1c830 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d  on.  */.    rc =
1c840 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1c850 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1c860 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43  r, &r, 0, 0, &pC
1c870 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a  x->seekResult);.
1c880 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73      if( (r.flags
1c890 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   & UNPACKED_PREF
1c8a0 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e  IX_SEARCH) || r.
1c8b0 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20  rowid==R ){.    
1c8c0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1c8d0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   1;.    }else{. 
1c8e0 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d       pIn3->u.i =
1c8f0 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   r.rowid;.    }.
1c900 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1c910 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
1c920 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
1c930 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20  *.**.** Use the 
1c940 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1c950 74 65 72 20 50 33 20 61 73 20 61 20 69 6e 74 65  ter P3 as a inte
1c960 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72  ger key.  If a r
1c970 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74  ecord .** with t
1c980 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74  hat key does not
1c990 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20   exist in table 
1c9a0 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70  of P1, then jump
1c9b0 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74   to P2. .** If t
1c9c0 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65  he record does e
1c9d0 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20  xist, then fall 
1c9e0 74 68 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f  thru.  The curso
1c9f0 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
1ca00 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
1ca10 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
1ca20 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
1ca30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1ca40 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
1ca50 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
1ca60 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
1ca70 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1ca80 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
1ca90 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
1caa0 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
1cab0 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
1cac0 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
1cad0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1cae0 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
1caf0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
1cb00 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
1cb10 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1cb20 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1cb30 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1cb40 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1cb50 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cb60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cb70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1cb80 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1cb90 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1cba0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1cbb0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
1cbc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cbd0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1cbe0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1cbf0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1cc00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1cc10 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1cc20 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1cc30 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
1cc40 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1cc50 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  g==0 );.  pCrsr 
1cc60 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
1cc70 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1cc80 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
1cc90 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
1cca0 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  .i;.    rc = sql
1ccb0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1ccc0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
1ccd0 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
1cce0 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f  ;.    pC->lastRo
1ccf0 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1cd00 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1cd10 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1cd20 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  1:0;.    pC->nul
1cd30 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
1cd40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1cd50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
1cd60 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1cd70 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  eto = 0;.    if(
1cd80 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20   res!=0 ){.     
1cd90 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1cda0 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
1cdb0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1cdc0 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  d==0 );.    }.  
1cdd0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1cde0 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b   = res;.  }else{
1cdf0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1ce00 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74  pens when an att
1ce10 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72  empt to open a r
1ce20 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  ead cursor on th
1ce30 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  e .    ** sqlite
1ce40 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65  _master table re
1ce50 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1ce60 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  TY..    */.    p
1ce70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ce80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1ce90 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30  >rowidIsValid==0
1cea0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
1ceb0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a  Result = 0;.  }.
1cec0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ced0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
1cee0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1cef0 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
1cf00 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
1cf10 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
1cf20 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
1cf30 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
1cf40 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
1cf50 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
1cf60 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1cf70 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1cf80 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1cf90 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1cfa0 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1cfb0 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1cfc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1cfd0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1cfe0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cff0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d000 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d010 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1d020 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
1d030 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
1d040 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1d050 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d  >seqCount++;.  M
1d060 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1d070 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1d080 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1d090 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1d0a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1d0b0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1d0c0 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1d0d0 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1d0e0 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1d0f0 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1d100 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1d110 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1d120 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1d130 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1d140 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1d150 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1d160 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1d170 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1d180 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1d190 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1d1a0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1d1b0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1d1c0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
1d1d0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
1d1e0 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
1d1f0 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
1d200 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
1d210 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1d220 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
1d230 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
1d240 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
1d250 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
1d260 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
1d270 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1d280 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
1d290 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
1d2a0 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
1d2b0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1d2c0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1d2d0 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
1d2e0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1d2f0 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
1d300 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
1d310 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
1d320 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
1d330 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
1d340 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
1d350 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1d360 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1d370 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d390 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
1d3a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d3b0 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
1d3c0 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
1d3d0 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
1d3e0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d400 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
1d410 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
1d420 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d440 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
1d450 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1d460 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
1d470 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
1d480 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1d490 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
1d4a0 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
1d4b0 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
1d4c0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
1d4d0 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
1d4e0 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
1d4f0 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
1d500 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d510 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1d520 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1d530 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1d540 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1d550 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1d560 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
1d570 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
1d580 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
1d590 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
1d5a0 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
1d5b0 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
1d5c0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
1d5d0 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
1d5e0 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
1d5f0 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
1d600 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
1d610 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
1d620 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
1d630 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1d640 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
1d650 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
1d660 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
1d670 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
1d680 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
1d690 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
1d6a0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1d6b0 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
1d6c0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
1d6d0 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
1d6e0 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
1d6f0 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
1d700 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
1d710 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
1d720 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
1d730 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1d740 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
1d750 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
1d760 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
1d770 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
1d780 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
1d790 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
1d7a0 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
1d7b0 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
1d7c0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
1d7d0 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
1d7e0 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
1d7f0 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
1d800 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
1d810 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
1d820 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
1d830 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1d840 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1d850 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b   );.    cnt = 0;
1d860 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1d870 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
1d880 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1d890 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
1d8a0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
1d8b0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
1d8c0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
1d8d0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
1d8e0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
1d8f0 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
1d900 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
1d910 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1d920 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
1d930 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
1d940 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
1d950 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
1d960 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
1d970 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
1d980 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
1d990 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
1d9a0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
1d9b0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1d9c0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1d9d0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1d9e0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1d9f0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  owid ){.      v 
1da00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
1da10 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1da20 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1da30 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20   if( v==0 ){.   
1da40 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1da50 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1da60 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1da70 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1da80 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1da90 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1daa0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1dab0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1dac0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1dad0 20 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20        v = 1;.   
1dae0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1daf0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
1db00 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1db10 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72  IsValid(pC->pCur
1db20 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
1db30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1db40 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
1db50 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
1db60 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
1db70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
1db80 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c    /* Cannot fail
1db90 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65   following Btree
1dba0 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20  Last() */.      
1dbb0 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52      if( v==MAX_R
1dbc0 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1dbd0 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
1dbe0 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
1dbf0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1dc00 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20           v++;.  
1dc10 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1dc20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1dc30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1dc40 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1dc50 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1dc60 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41   ){.        /* A
1dc70 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1dc80 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1dc90 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1dca0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1dcb0 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  >0 );.        if
1dcc0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
1dcd0 20 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72           for(pFr
1dce0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
1dcf0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
1dd00 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
1dd10 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1dd20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1dd30 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1dd40 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1dd50 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1dd60 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
1dd70 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
1dd80 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
1dd90 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
1dda0 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  3];.        }els
1ddb0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
1ddc0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1ddd0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1dde0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1ddf0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1de00 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
1de10 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d            pMem =
1de20 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1de30 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  3];.        }.. 
1de40 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
1de50 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1de60 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
1de70 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1de80 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
1de90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1dea0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
1deb0 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
1dec0 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
1ded0 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
1dee0 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
1def0 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
1df00 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1df10 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
1df20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
1df30 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
1df40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1df50 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1df60 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1df70 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1df80 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1df90 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1dfa0 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1dfb0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1dfc0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1dfd0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1dfe0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1dff0 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1e000 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1e010 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1e020 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1e030 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1e040 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
1e050 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
1e060 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
1e070 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
1e080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
1e0a0 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
1e0b0 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
1e0c0 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f    v = db->lastRo
1e0d0 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20 3d  wid;.      cnt =
1e0e0 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
1e0f0 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 30        if( cnt==0
1e100 20 26 26 20 28 76 26 30 78 66 66 66 66 66 66 29   && (v&0xffffff)
1e110 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==v ){.         
1e120 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65   v++;.        }e
1e130 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
1e140 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
1e150 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
1e160 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1e170 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78 66  cnt<5 ) v &= 0xf
1e180 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
1e190 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1e1a0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1e1b0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1e1c0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
1e1d0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1e1e0 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
1e1f0 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20  }while( cnt<100 
1e200 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
1e210 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   && res==0 );.  
1e220 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1e230 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
1e240 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1e250 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20  SQLITE_FULL;.   
1e260 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1e270 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1e280 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1e290 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e2a0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1e2b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1e2c0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1e2d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1e2e0 41 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  ALE;.  }.  MemSe
1e2f0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1e300 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74  MEM_Int);.  pOut
1e310 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
1e320 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e330 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
1e340 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72  3 P4 P5.**.** Wr
1e350 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
1e360 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
1e370 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
1e380 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
1e390 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
1e3a0 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
1e3b0 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
1e3c0 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
1e3d0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
1e3e0 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
1e3f0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
1e400 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
1e410 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1e420 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1e430 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1e440 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1e450 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
1e460 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
1e470 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1e480 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
1e490 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1e4a0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1e4b0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1e4c0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1e4d0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
1e4e0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
1e4f0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
1e500 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
1e510 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
1e520 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
1e530 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
1e540 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1e550 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
1e560 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
1e570 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
1e580 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
1e590 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1e5a0 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
1e5b0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1e5c0 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
1e5d0 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
1e5e0 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
1e5f0 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
1e600 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
1e610 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
1e620 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1e630 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
1e640 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
1e650 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
1e660 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
1e670 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
1e680 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
1e690 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
1e6a0 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
1e6b0 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
1e6c0 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
1e6d0 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
1e6e0 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
1e6f0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
1e700 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
1e710 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
1e720 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
1e730 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
1e740 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
1e750 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
1e760 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
1e770 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
1e780 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
1e790 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
1e7a0 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
1e7b0 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
1e7c0 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
1e7d0 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
1e7e0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
1e7f0 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
1e800 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
1e810 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
1e820 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
1e830 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
1e840 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
1e850 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
1e860 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
1e870 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1e880 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
1e890 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
1e8a0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
1e8b0 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
1e8c0 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
1e8d0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
1e8e0 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
1e8f0 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
1e900 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
1e910 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
1e920 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
1e930 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
1e940 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
1e950 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
1e960 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
1e970 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
1e980 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
1e990 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
1e9a0 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
1e9b0 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
1e9c0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
1e9d0 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
1e9e0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
1e9f0 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
1ea00 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
1ea10 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
1ea20 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
1ea30 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
1ea40 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
1ea50 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
1ea60 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
1ea70 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
1ea80 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
1ea90 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
1eaa0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
1eab0 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
1eac0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
1ead0 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
1eae0 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78  ike OP_Insert ex
1eaf0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65  cept that the ke
1eb00 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  y is the.** inte
1eb10 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f  ger value P3, no
1eb20 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
1eb30 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65  he integer store
1eb40 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1eb50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1eb60 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e  ert: .case OP_In
1eb70 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d  sertInt: {.  Mem
1eb80 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *pData;       /
1eb90 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
1eba0 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ng data for the 
1ebb0 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
1ebc0 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erted */.  Mem *
1ebd0 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  pKey;        /* 
1ebe0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
1ebf0 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65   key  for the re
1ec00 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b  cord */.  i64 iK
1ec10 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ey;         /* T
1ec20 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1ec30 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20   or key for the 
1ec40 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
1ec50 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  erted */.  VdbeC
1ec60 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
1ec70 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
1ec80 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
1ec90 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
1eca0 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
1ecb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ecc0 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61   zero-bytes to a
1ecd0 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ppend */.  int s
1ece0 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
1ecf0 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
1ed00 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
1ed10 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
1ed20 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
1ed30 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
1ed40 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
1ed50 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
1ed60 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  hook */.  const 
1ed70 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54  char *zTbl; /* T
1ed80 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  able name - used
1ed90 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68   by the opdate h
1eda0 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b  ook */.  int op;
1edb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
1edc0 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20  code for update 
1edd0 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44  hook: SQLITE_UPD
1ede0 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e  ATE or SQLITE_IN
1edf0 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61  SERT */..  pData
1ee00 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1ee10 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
1ee20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ee30 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ee40 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ee50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ee60 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1ee70 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1ee80 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
1ee90 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1eea0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1eeb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1eec0 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
1eed0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1eee0 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
1eef0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1ef00 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
1ef10 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pKey = &p->aMem[
1ef20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
1ef30 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
1ef40 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1ef50 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
1ef60 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
1ef70 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65  ;.    iKey = pKe
1ef80 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
1ef90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1efa0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
1efb0 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b  ertInt );.    iK
1efc0 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
1efd0 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
1efe0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
1eff0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
1f000 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1f010 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
1f020 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
1f030 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
1f040 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1f050 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1f060 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
1f070 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
1f080 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
1f090 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
1f0a0 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
1f0b0 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
1f0c0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
1f0d0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1f0e0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
1f0f0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1f100 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
1f110 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
1f120 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
1f130 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
1f140 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
1f150 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
1f160 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
1f170 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1f180 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72  pCursor, 0);.  r
1f190 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1f1a0 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
1f1b0 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
1f1e0 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
1f1f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1f200 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d              pOp-
1f210 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50  >p5 & OPFLAG_APP
1f220 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  END, seekResult.
1f230 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64    );.  pC->rowid
1f240 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
1f250 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1f260 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1f270 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f280 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
1f290 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
1f2a0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
1f2b0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
1f2c0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
1f2d0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
1f2e0 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
1f2f0 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
1f300 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
1f310 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
1f320 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
1f330 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
1f340 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
1f350 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
1f360 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
1f370 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1f380 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
1f390 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1f3a0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
1f3b0 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
1f3c0 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
1f3d0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
1f3e0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
1f3f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
1f400 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
1f410 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
1f420 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
1f430 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
1f440 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
1f450 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
1f460 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
1f470 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1f480 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
1f490 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
1f4a0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
1f4b0 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
1f4c0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1f4d0 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
1f4e0 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
1f4f0 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
1f500 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
1f510 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
1f520 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
1f530 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
1f540 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78  om within an Nex
1f550 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66  t loop..**.** If
1f560 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1f570 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69  NGE flag of P2 i
1f580 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1f590 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1f5a0 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1f5b0 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1f5c0 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
1f5d0 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
1f5e0 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
1f5f0 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
1f600 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
1f610 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
1f620 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1f630 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
1f640 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1f650 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a  le that P1 is.**
1f660 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54   pointing to.  T
1f670 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77  he update hook w
1f680 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
1f690 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1f6a0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1f6b0 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63  LL then the P1 c
1f6c0 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
1f6d0 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a  been positioned.
1f6e0 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ** using OP_NotF
1f6f0 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
1f700 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
1f710 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  de..*/.case OP_D
1f720 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69  elete: {.  i64 i
1f730 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  Key;.  VdbeCurso
1f740 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d  r *pC;..  iKey =
1f750 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
1f760 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f770 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f780 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f790 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f7a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1f7b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1f7c0 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
1f7d0 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
1f7e0 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
1f7f0 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20  eudotables */.. 
1f800 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
1f810 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
1f820 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79  nvoked, set iKey
1f830 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
1f840 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65   the.  ** row be
1f850 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a  ing deleted..  *
1f860 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64  /.  if( db->xUpd
1f870 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
1f880 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
1f890 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1f8a0 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ble );.    asser
1f8b0 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1f8c0 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52  lid );  /* lastR
1f8d0 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76  owid set by prev
1f8e0 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  ious OP_NotFound
1f8f0 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   */.    iKey = p
1f900 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
1f910 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  }..  /* The OP_D
1f920 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
1f930 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
1f940 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
1f950 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
1f960 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
1f970 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
1f980 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
1f990 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
1f9a0 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
1f9b0 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
1f9c0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
1f9d0 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
1f9e0 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
1f9f0 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
1fa00 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
1fa10 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
1fa20 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
1fa30 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
1fa40 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
1fa50 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
1fa60 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
1fa70 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
1fa80 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
1fa90 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
1faa0 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
1fab0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1fac0 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
1fad0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
1fae0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
1faf0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1fb00 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
1fb10 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
1fb20 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
1fb30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1fb40 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74  _error;..  sqlit
1fb50 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
1fb60 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1fb70 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
1fb80 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
1fb90 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1fba0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1fbb0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1fbc0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
1fbd0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
1fbe0 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
1fbf0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1fc00 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
1fc10 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
1fc20 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73  p4.z ){.    cons
1fc30 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62  t char *zDb = db
1fc40 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
1fc50 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20  Name;.    const 
1fc60 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70  char *zTbl = pOp
1fc70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e  ->p4.z;.    db->
1fc80 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
1fc90 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
1fca0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
1fcb0 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
1fcc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1fcd0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
1fce0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
1fcf0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
1fd00 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
1fd10 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
1fd20 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
1fd30 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
1fd40 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1fd50 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
1fd60 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
1fd70 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
1fd80 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
1fd90 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
1fda0 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
1fdb0 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
1fdc0 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
1fdd0 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
1fde0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
1fdf0 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
1fe00 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
1fe10 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
1fe20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
1fe30 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
1fe40 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
1fe50 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
1fe60 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
1fe70 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1fe80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
1fe90 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
1fea0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
1feb0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
1fec0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61   complete row da
1fed0 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ta for cursor P1
1fee0 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
1fef0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
1ff00 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
1ff10 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
1ff20 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
1ff30 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
1ff40 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
1ff50 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
1ff60 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1ff70 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
1ff80 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
1ff90 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
1ffa0 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
1ffb0 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
1ffc0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1ffd0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20  do-table..*/./* 
1ffe0 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50  Opcode: RowKey P
1fff0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20000 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
20010 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
20020 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
20030 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
20040 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
20050 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
20060 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
20070 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
20080 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74  to the P3 regist
20090 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
200a0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
200b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
200c0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
200d0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
200e0 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
200f0 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
20100 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
20110 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
20120 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
20130 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
20140 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
20150 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
20160 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
20170 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
20180 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36   u32 n;.  i64 n6
20190 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d  4;..  pOut = &p-
201a0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
201b0 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  /* Note that 
201c0 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61  RowKey and RowDa
201d0 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78  ta are really ex
201e0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69  actly the same i
201f0 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
20200 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20210 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20220 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20230 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20240 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20250 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70  pC->isTable || p
20260 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
20270 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72  owKey );.  asser
20280 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c  t( pC->isIndex |
20290 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
202a0 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
202b0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
202c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
202d0 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
202e0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
202f0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
20300 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
20310 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
20320 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
20330 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
20340 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
20350 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
20360 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77  .  /* The OP_Row
20370 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61  Key and OP_RowDa
20380 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
20390 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
203a0 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
203b0 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
203c0 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
203d0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
203e0 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
203f0 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20  lidate.  ** the 
20400 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74  cursor.  Hence t
20410 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c  he following sql
20420 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
20430 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61  veto() call is a
20440 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d  lways.  ** a no-
20450 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72  op and can never
20460 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c   fail.  But we l
20470 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65  eave it in place
20480 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20   as a safety..  
20490 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
204a0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
204b0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
204c0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
204d0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
204e0 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
204f0 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
20500 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20510 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64  .  if( pC->isInd
20520 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ex ){.    assert
20530 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  ( !pC->isTable )
20540 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
20550 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
20560 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
20570 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
20580 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
20590 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
205a0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
205b0 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
205c0 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
205d0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
205e0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
205f0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
20600 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
20610 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
20620 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20630 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
20640 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
20650 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
20660 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
20670 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
20680 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
20690 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
206a0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
206b0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
206c0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
206d0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
206e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
206f0 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
20700 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
20710 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
20720 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
20730 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
20740 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
20750 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72  isIndex ){.    r
20760 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20770 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
20780 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
20790 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
207a0 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
207b0 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
207c0 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
207d0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
207e0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
207f0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
20800 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
20810 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
20820 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
20830 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20840 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
20850 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f   * * *.**.** Sto
20860 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
20870 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
20880 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
20890 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
208a0 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
208b0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
208c0 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
208d0 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
208e0 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
208f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
20900 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
20910 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
20920 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
20930 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
20940 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
20950 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
20960 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
20970 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
20980 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
20990 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
209a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
209b0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
209c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
209d0 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69  .  i64 v;.  sqli
209e0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
209f0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
20a00 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
20a10 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
20a20 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20a30 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20a40 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20a50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20a60 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
20a70 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
20a80 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
20a90 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
20aa0 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 44 6f 20  ow ){.    /* Do 
20ab0 6e 6f 74 68 69 6e 67 20 73 6f 20 74 68 61 74 20  nothing so that 
20ac0 72 65 67 5b 50 32 5d 20 72 65 6d 61 69 6e 73 20  reg[P2] remains 
20ad0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61  NULL */.    brea
20ae0 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
20af0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20b00 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
20b10 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
20b20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20b30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20b40 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
20b50 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20  pVtabCursor ){. 
20b60 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70     pVtab = pC->p
20b70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
20b80 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
20b90 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
20ba0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
20bb0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
20bc0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
20bd0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
20be0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20bf0 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20  _misuse;.    rc 
20c00 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
20c10 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
20c20 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
20c30 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
20c40 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
20c50 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
20c60 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  b->zErrMsg;.    
20c70 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
20c80 20 30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   0;.    if( sqli
20c90 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
20ca0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
20cb0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64  _to_misuse;.#end
20cc0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
20cd0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
20ce0 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
20cf0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
20d00 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
20d10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
20d20 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
20d30 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
20d40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20d50 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
20d60 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
20d70 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
20d80 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
20d90 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
20da0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
20db0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
20dc0 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65   &v);.      asse
20dd0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
20de0 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
20df0 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
20e00 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f  rsorMoveto() abo
20e10 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a  ve */.    }.  }.
20e20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
20e30 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
20e40 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
20e50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20e60 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
20e70 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
20e80 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
20e90 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
20ea0 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
20eb0 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
20ec0 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
20ed0 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
20ee0 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
20ef0 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
20f00 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
20f10 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
20f20 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
20f30 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
20f40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20f50 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20f60 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20f70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20f80 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20f90 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
20fa0 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   1;.  pC->rowidI
20fb0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66  sValid = 0;.  if
20fc0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
20fd0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
20fe0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
20ff0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
21000 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21010 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
21020 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
21030 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
21040 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
21050 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
21060 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
21070 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
21080 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
21090 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
210a0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
210b0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
210c0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
210d0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
210e0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
210f0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
21100 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
21110 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
21120 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
21130 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
21140 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
21150 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
21160 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
21170 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
21180 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21190 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
211a0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
211b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
211c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
211d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
211e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
211f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21200 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
21210 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
21220 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
21230 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a  ){.    res = 1;.
21240 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
21250 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
21260 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
21270 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
21280 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
21290 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
212a0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f  to = 0;.  pC->ro
212b0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
212c0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
212d0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
212e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30  .  if( pOp->p2>0
212f0 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70   && res ){.    p
21300 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
21310 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21320 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
21330 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
21340 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
21350 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
21360 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
21370 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
21380 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
21390 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
213a0 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
213b0 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
213c0 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
213d0 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
213e0 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
213f0 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
21400 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
21410 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
21420 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
21430 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
21440 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
21450 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
21460 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
21470 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
21480 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
21490 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
214a0 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
214b0 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
214c0 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
214d0 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
214e0 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
214f0 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
21500 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
21510 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
21520 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
21530 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
21540 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20  e OP_Sort: {    
21550 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23      /* jump */.#
21560 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
21570 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  T.  sqlite3_sort
21580 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69  _count++;.  sqli
21590 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
215a0 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e  --;.#endif.  p->
215b0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
215c0 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d  STMTSTATUS_SORT-
215d0 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  1]++;.  /* Fall 
215e0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
215f0 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
21600 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
21610 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
21620 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
21630 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
21640 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
21650 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
21660 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
21670 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
21680 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
21690 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
216a0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
216b0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
216c0 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
216d0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
216e0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
216f0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
21700 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
21710 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
21720 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
21730 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
21740 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
21750 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
21760 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21770 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
21780 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
21790 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
217a0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
217b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
217c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
217d0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
217e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
217f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21800 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70    if( (pCrsr = p
21810 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  C->pCursor)!=0 )
21820 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
21830 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
21840 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
21850 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
21860 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
21870 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21880 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
21890 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
218a0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
218b0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
218c0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
218d0 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70  res = 1;.  }.  p
218e0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
218f0 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
21900 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
21910 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
21920 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
21930 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
21940 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
21950 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
21960 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
21970 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
21980 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
21990 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
219a0 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
219b0 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
219c0 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
219d0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
219e0 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
219f0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
21a00 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
21a10 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
21a20 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
21a30 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
21a40 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
21a50 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
21a60 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
21a70 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
21a80 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
21a90 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
21aa0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
21ab0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
21ac0 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  v.*/./* Opcode: 
21ad0 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a  Prev P1 P2 * * *
21ae0 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
21af0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
21b00 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
21b10 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
21b20 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
21b30 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
21b40 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
21b50 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
21b60 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
21b70 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
21b80 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
21b90 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
21ba0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
21bb0 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
21bc0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
21bd0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
21be0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
21bf0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
21c00 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
21c10 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
21c20 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
21c30 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
21c40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
21c50 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20  OP_Next: {      
21c60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
21c70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21c80 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
21c90 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
21ca0 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
21cb0 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70  UPT;.  assert( p
21cc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21cd0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21ce0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21cf0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
21d00 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pC==0 ){.    
21d10 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74  break;  /* See t
21d20 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20  icket #2273 */. 
21d30 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d   }.  pCrsr = pC-
21d40 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
21d50 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20  pCrsr==0 ){.    
21d60 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
21d70 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
21d80 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73    res = 1;.  ass
21d90 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
21da0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
21db0 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  rc = pOp->opcode
21dc0 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69  ==OP_Next ? sqli
21dd0 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72  te3BtreeNext(pCr
21de0 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20  sr, &res) :.    
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
21e10 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
21e20 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
21e30 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
21e40 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68  )res;.  pC->cach
21e50 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21e60 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73  STALE;.  if( res
21e70 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
21e80 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
21e90 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70   if( pOp->p5 ) p
21ea0 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
21eb0 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  p5-1]++;.#ifdef 
21ec0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
21ed0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
21ee0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
21ef0 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73   }.  pC->rowidIs
21f00 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65  Valid = 0;.  bre
21f10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21f20 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
21f30 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
21f40 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
21f50 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65  s a SQL index ke
21f60 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
21f70 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
21f80 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
21f90 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
21fa0 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
21fb0 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
21fc0 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
21fd0 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
21fe0 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
21ff0 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
22000 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
22010 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
22020 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
22030 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
22040 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ppend..**.** Thi
22050 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
22060 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
22070 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
22080 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
22090 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
220a0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
220b0 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65  .case OP_IdxInse
220c0 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
220d0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
220e0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
220f0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22100 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
22110 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
22120 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22130 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22140 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22150 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22160 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22170 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22180 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
22190 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
221a0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
221b0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
221c0 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
221d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
221e0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
221f0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
22200 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
22210 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
22220 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
22230 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
22240 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
22250 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22260 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
22270 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
22280 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
22290 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
222a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
222b0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
222c0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
222d0 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
222e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
222f0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22300 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
22310 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22320 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
22330 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22340 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
22350 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
22360 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
22370 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
22380 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
22390 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
223a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
223b0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
223c0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
223d0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
223e0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
223f0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
22400 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
22410 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
22420 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22430 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22440 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
22450 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
22460 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
22470 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22480 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
22490 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
224a0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
224b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
224c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
224d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
224e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
224f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22500 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
22510 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
22520 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
22530 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
22540 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
22550 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
22560 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
22570 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
22580 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70  .    r.aMem = &p
22590 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
225a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
225b0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
225c0 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
225d0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
225e0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
225f0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
22600 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22610 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
22620 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rsr);.    }.    
22630 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
22640 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
22650 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
22660 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
22670 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  LE;.  }.  break;
22680 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
22690 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
226a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
226b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
226c0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
226d0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
226e0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
226f0 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
22700 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
22710 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
22720 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
22730 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
22740 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
22750 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
22760 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
22770 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
22780 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
22790 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
227a0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
227b0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
227c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
227d0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
227e0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
227f0 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  sr;.  VdbeCursor
22800 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69   *pC;.  i64 rowi
22810 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d;..  assert( pO
22820 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22830 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22840 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22850 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22860 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22870 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
22880 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41  rsor;.  if( ALWA
22890 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a  YS(pCrsr!=0) ){.
228a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
228b0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
228c0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45  (pC);.    if( NE
228d0 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61  VER(rc) ) goto a
228e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
228f0 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
22900 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
22910 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
22920 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
22930 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70  =0 );.    if( !p
22940 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
22950 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22960 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
22970 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b   pCrsr, &rowid);
22980 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
22990 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
229a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
229b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
229c0 20 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53 65     }.      MemSe
229d0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
229e0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20  MEM_Int);.      
229f0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
22a00 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  d;.    }.  }.  b
22a10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22a20 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
22a30 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
22a40 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
22a50 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
22a60 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
22a70 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
22a80 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
22a90 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f  s the ROWID.  Co
22aa0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
22ab0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
22ac0 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
22ad0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
22ae0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
22af0 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20  oring the ROWID 
22b00 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
22b10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
22b20 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
22b30 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
22b40 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
22b50 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
22b60 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
22b70 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
22b80 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
22b90 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
22ba0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
22bb0 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79  ero then the key
22bc0 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61   value is increa
22bd0 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f  sed by an epsilo
22be0 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74  n .** prior to t
22bf0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
22c00 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70  This make the op
22c10 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49  code work like I
22c20 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74  dxGT except.** t
22c30 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66  hat if the key f
22c40 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20  rom register P3 
22c50 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  is a prefix of t
22c60 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75  he key in the cu
22c70 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73  rsor,.** the res
22c80 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65  ult is false whe
22c90 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  reas it would be
22ca0 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54   true with IdxGT
22cb0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
22cc0 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 2a  IdxLT P1 P2 P3 *
22cd0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34   P5.**.** The P4
22ce0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
22cf0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
22d00 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
22d10 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
22d20 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
22d30 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
22d40 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
22d50 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
22d60 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
22d70 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
22d80 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
22d90 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68   the ROWID on th
22da0 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
22db0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
22dc0 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
22dd0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
22de0 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ue then jump to 
22df0 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  P2..** Otherwise
22e00 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
22e10 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
22e20 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
22e30 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74  P5 is non-zero t
22e40 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  hen the key valu
22e50 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62  e is increased b
22e60 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69  y an epsilon pri
22e70 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f  or .** to the co
22e80 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20  mparison.  This 
22e90 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65  makes the opcode
22ea0 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45   work like IdxLE
22eb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
22ec0 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LT:          /* 
22ed0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
22ee0 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20  IdxGE: {        
22ef0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
22f00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
22f10 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
22f20 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
22f30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22f40 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22f50 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22f60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22f70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22f80 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
22f90 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
22fa0 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
22fb0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
22fc0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
22fd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
22fe0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
22ff0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
23000 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
23010 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e  _INT32 );.    r.
23020 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
23030 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
23040 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
23050 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20  ->p4.i;.    if( 
23060 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
23070 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
23080 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e  KED_INCRKEY | UN
23090 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f  PACKED_IGNORE_RO
230a0 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  WID;.    }else{.
230b0 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
230c0 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f  UNPACKED_IGNORE_
230d0 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20  ROWID;.    }.   
230e0 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d   r.aMem = &p->aM
230f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
23100 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
23110 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70  eIdxKeyCompare(p
23120 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
23130 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
23140 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  e==OP_IdxLT ){. 
23150 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b       res = -res;
23160 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
23170 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
23180 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
23190 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a  );.      res++;.
231a0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65      }.    if( re
231b0 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20  s>0 ){.      pc 
231c0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a  = pOp->p2 - 1 ;.
231d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
231e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
231f0 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
23200 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
23210 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
23220 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
23230 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
23240 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
23250 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
23260 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
23270 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
23280 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
23290 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
232a0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
232b0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
232c0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
232d0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
232e0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
232f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
23300 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
23310 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
23320 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
23330 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
23340 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
23350 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
23360 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
23370 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
23380 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
23390 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
233a0 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
233b0 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
233c0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
233d0 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
233e0 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
233f0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
23400 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
23410 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
23420 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
23430 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
23440 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
23450 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
23460 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
23470 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
23480 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65   P2.  If no page
23490 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61   .** movement wa
234a0 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61  s required (beca
234b0 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65  use the table be
234c0 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20  ing dropped was 
234d0 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20  already .** the 
234e0 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
234f0 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
23500 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
23510 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
23520 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
23530 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65   is disabled the
23540 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
23550 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
23560 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
23570 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
23580 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
23590 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
235a0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
235b0 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e  Moved;.  int iCn
235c0 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  t;.  Vdbe *pVdbe
235d0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69 66  ;.  int iDb;.#if
235e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
235f0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
23600 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28  iCnt = 0;.  for(
23610 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b  pVdbe=db->pVdbe;
23620 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20   pVdbe; pVdbe = 
23630 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20  pVdbe->pNext){. 
23640 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61     if( pVdbe->ma
23650 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
23660 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69 6e  RUN && pVdbe->in
23670 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20  VtabMethod<2 && 
23680 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a  pVdbe->pc>=0 ){.
23690 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20        iCnt++;.  
236a0 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20    }.  }.#else.  
236b0 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69 76  iCnt = db->activ
236c0 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66  eVdbeCnt;.#endif
236d0 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b  .  if( iCnt>1 ){
236e0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
236f0 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
23700 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
23710 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
23720 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
23730 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
23740 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61  iCnt==1 );.    a
23750 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
23760 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
23770 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
23780 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
23790 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
237a0 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
237b0 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 4d   &iMoved);.    M
237c0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
237d0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
237e0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
237f0 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51  oved;.#ifndef SQ
23800 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
23810 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d  CUUM.    if( rc=
23820 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d  =SQLITE_OK && iM
23830 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
23840 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
23850 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69  Moved(&db->aDb[i
23860 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  Db], iMoved, pOp
23870 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  ->p1);.    }.#en
23880 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
23890 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
238a0 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
238b0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
238c0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
238d0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
238e0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
238f0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
23900 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
23910 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
23920 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
23930 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
23940 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
23950 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
23960 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
23970 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
23980 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
23990 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
239a0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
239b0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
239c0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
239d0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
239e0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
239f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
23a00 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
23a10 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
23a20 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
23a30 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
23a40 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
23a50 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
23a60 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
23a70 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
23a80 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
23a90 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
23aa0 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
23ab0 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
23ac0 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
23ad0 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
23ae0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
23af0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
23b00 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
23b10 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
23b20 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
23b30 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
23b40 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
23b50 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
23b60 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
23b70 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
23b80 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
23b90 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
23ba0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
23bb0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
23bc0 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
23bd0 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
23be0 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
23bf0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
23c00 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
23c10 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 32  sk & (1<<pOp->p2
23c20 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))!=0 );.  rc = 
23c30 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
23c40 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
23c50 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
23c60 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
23c70 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
23c80 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
23c90 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
23ca0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
23cb0 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
23cc0 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
23cd0 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70    p->aMem[pOp->p
23ce0 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
23cf0 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  e;.    }.  }.  b
23d00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23d10 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
23d20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
23d30 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
23d40 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61   table in the ma
23d50 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
23d60 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
23d70 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
23d80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
23d90 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
23da0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
23db0 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
23dc0 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
23dd0 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
23de0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
23df0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a  .** register P2.
23e00 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
23e10 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74  ence between a t
23e20 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65  able and an inde
23e30 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61  x is this:  A ta
23e40 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  ble must.** have
23e50 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65   a 4-byte intege
23e60 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61  r key and can ha
23e70 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74  ve arbitrary dat
23e80 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20  a.  An index.** 
23e90 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79  has an arbitrary
23ea0 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61   key but no data
23eb0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
23ec0 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f  : CreateIndex.*/
23ed0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
23ee0 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20  teIndex P1 P2 * 
23ef0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
23f00 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69  te a new index i
23f10 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
23f20 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
23f30 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
23f40 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
23f50 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
23f60 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
23f70 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
23f80 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
23f90 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
23fa0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
23fb0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
23fc0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
23fd0 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
23fe0 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62   on OP_CreateTab
23ff0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
24000 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
24010 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
24020 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20  Index:          
24030 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
24040 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ease */.case OP_
24050 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20  CreateTable: {  
24060 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
24070 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
24080 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20  int pgno;.  int 
24090 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62  flags;.  Db *pDb
240a0 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  ;..  pgno = 0;. 
240b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
240c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
240d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
240e0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
240f0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
24100 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
24110 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
24120 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
24130 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66  ->pBt!=0 );.  if
24140 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
24150 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b  P_CreateTable ){
24160 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20  .    /* flags = 
24170 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f  BTREE_INTKEY; */
24180 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
24190 45 45 5f 4c 45 41 46 44 41 54 41 7c 42 54 52 45  EE_LEAFDATA|BTRE
241a0 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73  E_INTKEY;.  }els
241b0 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  e{.    flags = B
241c0 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b 0a 20  TREE_ZERODATA;. 
241d0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
241e0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
241f0 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pDb->pBt, &pgn
24200 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75  o, flags);.  pOu
24210 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20  t->u.i = pgno;. 
24220 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
24230 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
24240 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24250 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
24260 6d 61 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ma P1 P2 * P4 *.
24270 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
24280 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
24290 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
242a0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
242b0 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
242c0 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
242d0 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
242e0 20 50 32 20 69 73 20 74 68 65 20 22 66 6f 72 63   P2 is the "forc
242f0 65 22 20 66 6c 61 67 2e 20 20 20 41 6c 77 61 79  e" flag.   Alway
24300 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61 72 73  s do.** the pars
24310 69 6e 67 20 69 66 20 50 32 20 69 73 20 74 72 75  ing if P2 is tru
24320 65 2e 20 20 49 66 20 50 32 20 69 73 20 66 61 6c  e.  If P2 is fal
24330 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  se, then this ro
24340 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20 6e 6f  utine is a.** no
24350 2d 6f 70 20 69 66 20 74 68 65 20 73 63 68 65 6d  -op if the schem
24360 61 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  a is not current
24370 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e 20 6f  ly loaded.  In o
24380 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 50  ther words, if P
24390 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c 20 74  2.** is false, t
243a0 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
243b0 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79 20 70   table is only p
243c0 61 72 73 65 64 20 69 66 20 74 68 65 20 72 65 73  arsed if the res
243d0 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  t of the.** sche
243e0 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20 6c 6f  ma is already lo
243f0 61 64 65 64 20 69 6e 74 6f 20 74 68 65 20 73 79  aded into the sy
24400 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  mbol table..**.*
24410 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
24420 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
24430 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
24440 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
24450 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
24460 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
24470 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
24480 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
24490 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
244a0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
244b0 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
244c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
244d0 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
244e0 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
244f0 69 74 44 61 74 61 3b 0a 0a 20 20 69 44 62 20 3d  itData;..  iDb =
24500 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
24510 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
24520 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20  b<db->nDb );..  
24530 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32 20 69 73  /* If pOp->p2 is
24540 20 30 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70   0, then this op
24550 63 6f 64 65 20 69 73 20 62 65 69 6e 67 20 65 78  code is being ex
24560 65 63 75 74 65 64 20 74 6f 20 72 65 61 64 20 61  ecuted to read a
24570 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 72 6f 77  .  ** single row
24580 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  , for example th
24590 65 20 72 6f 77 20 63 6f 72 72 65 73 70 6f 6e 64  e row correspond
245a0 69 6e 67 20 74 6f 20 61 20 6e 65 77 20 69 6e 64  ing to a new ind
245b0 65 78 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  ex.  ** created 
245c0 62 79 20 74 68 69 73 20 56 44 42 45 2c 20 66 72  by this VDBE, fr
245d0 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  om the sqlite_ma
245e0 73 74 65 72 20 74 61 62 6c 65 2e 20 49 74 20 6f  ster table. It o
245f0 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73 20 74 68  nly.  ** does th
24600 69 73 20 69 66 20 74 68 65 20 63 6f 72 72 65 73  is if the corres
24610 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65 6d 6f 72  ponding in-memor
24620 79 20 73 63 68 65 6d 61 20 69 73 20 63 75 72 72  y schema is curr
24630 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f 61 64 65  ently.  ** loade
24640 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  d. Otherwise, th
24650 65 20 6e 65 77 20 69 6e 64 65 78 20 64 65 66 69  e new index defi
24660 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65 20 6c 6f  nition can be lo
24670 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20 2a 2a 20  aded along.  ** 
24680 77 69 74 68 20 74 68 65 20 72 65 73 74 20 6f 66  with the rest of
24690 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
246a0 20 69 74 20 69 73 20 72 65 71 75 69 72 65 64 2e   it is required.
246b0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c 74 68 6f  .  **.  ** Altho
246c0 75 67 68 20 74 68 65 20 6d 75 74 65 78 20 6f 6e  ugh the mutex on
246d0 20 74 68 65 20 42 74 53 68 61 72 65 64 20 6f 62   the BtShared ob
246e0 6a 65 63 74 20 74 68 61 74 20 63 6f 72 72 65 73  ject that corres
246f0 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a 20 64 61  ponds to.  ** da
24700 74 61 62 61 73 65 20 69 44 62 20 28 74 68 65 20  tabase iDb (the 
24710 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e  database contain
24720 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  ing the sqlite_m
24730 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 2a 2a  aster table.  **
24740 20 72 65 61 64 20 62 79 20 74 68 69 73 20 69 6e   read by this in
24750 73 74 72 75 63 74 69 6f 6e 29 20 69 73 20 63 75  struction) is cu
24760 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c 20 69 74  rrently held, it
24770 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
24780 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20 74 68 65  .  ** obtain the
24790 20 6d 75 74 65 78 65 73 20 6f 6e 20 61 6c 6c 20   mutexes on all 
247a0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
247b0 65 73 20 62 65 66 6f 72 65 20 63 68 65 63 6b 69  es before checki
247c0 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 73  ng if.  ** the s
247d0 63 68 65 6d 61 20 6f 66 20 69 44 62 20 69 73 20  chema of iDb is 
247e0 6c 6f 61 64 65 64 2e 20 54 68 69 73 20 69 73 20  loaded. This is 
247f0 62 65 63 61 75 73 65 2c 20 61 74 20 74 68 65 20  because, at the 
24800 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a 20 74 68  start of.  ** th
24810 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  e sqlite3_exec()
24820 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20 53 51 4c   call below, SQL
24830 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20  ite will invoke 
24840 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  .  ** sqlite3Btr
24850 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e 20 49 66  eeEnterAll(). If
24860 20 61 6c 6c 20 6d 75 74 65 78 65 73 20 61 72 65   all mutexes are
24870 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 68 65 6c   not already hel
24880 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69 44 62 20  d, the.  ** iDb 
24890 6d 75 74 65 78 20 6d 61 79 20 62 65 20 74 65 6d  mutex may be tem
248a0 70 6f 72 61 72 69 6c 79 20 72 65 6c 65 61 73 65  porarily release
248b0 64 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  d to avoid deadl
248c0 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a 20 74 68  ock. If .  ** th
248d0 69 73 20 68 61 70 70 65 6e 73 2c 20 74 68 65 6e  is happens, then
248e0 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 68 72 65   some other thre
248f0 61 64 20 6d 61 79 20 64 65 6c 65 74 65 20 74 68  ad may delete th
24900 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a 20 20 2a  e in-memory .  *
24910 2a 20 73 63 68 65 6d 61 20 6f 66 20 64 61 74 61  * schema of data
24920 62 61 73 65 20 69 44 62 20 62 65 66 6f 72 65 20  base iDb before 
24930 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
24940 74 20 72 75 6e 73 2e 20 54 68 65 20 73 63 68 65  t runs. The sche
24950 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74  ma.  ** will not
24960 20 62 65 20 72 65 6c 6f 61 64 65 64 20 62 65 63   be reloaded bec
24970 75 61 73 65 20 74 68 65 20 64 62 2d 3e 69 6e 69  uase the db->ini
24980 74 2e 62 75 73 79 20 66 6c 61 67 20 69 73 20 73  t.busy flag is s
24990 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a 20 63 61  et. This.  ** ca
249a0 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 22 6e  n result in a "n
249b0 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 73 71  o such table: sq
249c0 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 6f 72 20  lite_master" or 
249d0 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20 2a 2a 20  "malformed.  ** 
249e0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 22  database schema"
249f0 20 65 72 72 6f 72 20 62 65 69 6e 67 20 72 65 74   error being ret
24a00 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
24a10 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  r..  */.  assert
24a20 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  ( sqlite3BtreeHo
24a30 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
24a40 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
24a50 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
24a60 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28 20  rAll(db);.  if( 
24a70 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62 48 61 73  pOp->p2 || DbHas
24a80 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62  Property(db, iDb
24a90 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
24aa0 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61 73 74 65  d) ){.    zMaste
24ab0 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
24ac0 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44  (iDb);.    initD
24ad0 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
24ae0 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
24af0 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
24b00 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
24b10 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
24b20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
24b30 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
24b40 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
24b50 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
24b60 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
24b70 45 20 25 73 22 2c 0a 20 20 20 20 20 20 20 64 62  E %s",.       db
24b80 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
24b90 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
24ba0 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
24bb0 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
24bc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
24bd0 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  M;.    }else{.  
24be0 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65      (void)sqlite
24bf0 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a  3SafetyOff(db);.
24c00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
24c10 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
24c20 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
24c30 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
24c40 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
24c50 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
24c60 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
24c70 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
24c80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
24c90 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
24ca0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
24cb0 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
24cc0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
24cd0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
24ce0 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
24cf0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
24d00 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
24d10 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
24d20 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 28 76 6f  y = 0;.      (vo
24d30 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
24d40 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  On(db);.    }.  
24d50 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  }.  sqlite3Btree
24d60 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20 20  LeaveAll(db);.  
24d70 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
24d80 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
24d90 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
24da0 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
24db0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24dc0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
24dd0 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
24de0 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
24df0 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
24e00 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
24e10 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
24e20 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
24e30 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
24e40 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
24e50 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
24e60 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
24e70 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
24e80 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
24e90 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
24ea0 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
24eb0 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
24ec0 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
24ed0 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
24ee0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24ef0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
24f00 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
24f10 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
24f20 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
24f30 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
24f40 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
24f50 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
24f60 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
24f70 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
24f80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
24f90 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
24fa0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
24fb0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
24fc0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
24fd0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
24fe0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
24ff0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
25000 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
25010 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
25020 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
25030 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
25040 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
25050 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
25060 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
25070 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
25080 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
25090 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
250a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
250b0 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
250c0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
250d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
250e0 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
250f0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
25100 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
25110 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
25120 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
25130 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
25140 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
25150 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
25160 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
25170 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
25180 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
25190 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
251a0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
251b0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
251c0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
251d0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
251e0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
251f0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
25200 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
25210 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
25220 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
25230 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
25240 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25250 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
25260 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
25270 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
25280 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
25290 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
252a0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
252b0 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
252c0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
252d0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
252e0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
252f0 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
25300 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
25310 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
25320 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
25330 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
25340 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
25350 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
25360 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
25370 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
25380 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
25390 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
253a0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
253b0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
253c0 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
253d0 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
253e0 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
253f0 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
25400 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
25410 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
25420 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
25430 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
25440 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
25450 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
25460 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
25470 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
25480 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
25490 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
254a0 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
254b0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
254c0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
254d0 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
254e0 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
254f0 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
25500 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
25510 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
25520 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
25530 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
25540 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
25550 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
25560 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
25570 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
25580 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
25590 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
255a0 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
255b0 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
255c0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
255d0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
255e0 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
255f0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
25600 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74  re integer.** st
25610 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c  ored in reg(P1),
25620 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28   reg(P1+1), reg(
25630 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65  P1+2), ....  The
25640 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73  re are P2 tables
25650 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a  .** total..**.**
25660 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
25670 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
25680 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
25690 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
256a0 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
256b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
256c0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
256d0 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
256e0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
256f0 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
25700 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
25710 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
25720 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
25730 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
25740 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
25750 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
25760 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
25770 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
25780 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
25790 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
257a0 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
257b0 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a  ecked */.  int j
257c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
257d0 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
257e0 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
257f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
25800 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
25810 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
25820 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
25830 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
25840 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
25850 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
25860 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
25870 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
25880 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d   */.  .  nRoot =
25890 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
258a0 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
258b0 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
258c0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
258d0 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f  sizeof(int)*(nRo
258e0 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61  ot+1) );.  if( a
258f0 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Root==0 ) goto n
25900 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  o_mem;.  assert(
25910 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
25920 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
25930 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 70 2d 3e  ;.  pnErr = &p->
25940 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
25950 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
25960 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
25970 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
25980 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
25990 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
259a0 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
259b0 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
259c0 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
259d0 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
259e0 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
259f0 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
25a00 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
25a10 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
25a20 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
25a30 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
25a40 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
25a50 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
25a60 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  (1<<pOp->p5))!=0
25a70 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
25a80 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
25a90 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
25aa0 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
25ab0 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
25ae0 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
25af0 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
25b00 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
25b10 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
25b20 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
25b30 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
25b40 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
25b50 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
25b60 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
25b70 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
25b80 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
25b90 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
25ba0 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
25bb0 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
25bc0 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
25bd0 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
25be0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
25bf0 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
25c00 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
25c10 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
25c20 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
25c30 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
25c40 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
25c50 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
25c60 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
25c70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
25c80 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
25c90 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
25ca0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
25cb0 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
25cc0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
25cd0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
25ce0 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
25cf0 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
25d00 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
25d10 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
25d20 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
25d30 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 61 73  in1, in2 */.  as
25d40 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
25d50 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
25d60 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
25d70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
25d80 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
25d90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
25da0 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
25db0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
25dc0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
25dd0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
25de0 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
25df0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
25e00 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
25e10 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
25e20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25e30 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
25e40 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 P3 * *.**.** E
25e50 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
25e60 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
25e70 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
25e80 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
25e90 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
25ea0 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
25eb0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
25ec0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
25ed0 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
25ee0 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
25ef0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
25f00 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
25f10 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
25f20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
25f30 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
25f40 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46  4 val;.  CHECK_F
25f50 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
25f60 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
25f70 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
25f80 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
25f90 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
25fa0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
25fb0 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
25fc0 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
25fd0 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
25fe0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
25ff0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
26000 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
26010 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
26020 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
26030 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
26040 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73  e index */.    s
26050 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
26060 49 6e 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29  Int64(pOut, val)
26070 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26080 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26090 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
260a0 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P4.**.** Regist
260b0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
260c0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
260d0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
260e0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
260f0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
26100 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
26110 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
26120 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
26130 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
26140 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
26150 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
26160 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
26170 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
26180 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
26190 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
261a0 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
261b0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
261c0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
261d0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
261e0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
261f0 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
26200 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
26210 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
26220 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
26230 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
26240 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
26250 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
26260 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
26270 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
26280 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
26290 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
262a0 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
262b0 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
262c0 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
262d0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
262e0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
262f0 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
26300 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
26310 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
26320 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
26330 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
26340 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
26350 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
26360 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
26370 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
26380 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
26390 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
263a0 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
263b0 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
263c0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
263d0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
263e0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
263f0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
26400 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
26410 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
26420 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
26430 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
26440 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
26450 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
26460 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
26470 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
26480 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
26490 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
264a0 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
264b0 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
264c0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
264d0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
264e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
264f0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26510 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
26520 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
26530 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
26540 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
26550 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
26560 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
26570 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
26580 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
26590 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
265a0 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
265b0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
265c0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
265d0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
265e0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
265f0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
26600 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
26610 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
26620 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
26630 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
26640 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
26650 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
26660 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
26670 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
26680 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26690 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
266a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
266b0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
266c0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
266d0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
266e0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
266f0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
26700 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f    (u8)(iSet>=0 ?
26730 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78   iSet & 0xf : 0x
26740 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ff),.           
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a      pIn3->u.i);.
26770 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
26780 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
26790 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
267a0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
267b0 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
267c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
267d0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
267e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
267f0 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
26800 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
26810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
26820 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
26830 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
26840 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
26850 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
26860 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
26870 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
26880 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
26890 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
268a0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
268b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
268c0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
268d0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
268e0 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
268f0 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
26900 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
26910 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
26920 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
26930 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
26940 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
26950 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
26960 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
26970 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
26980 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
26990 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
269a0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
269b0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
269c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
269d0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
269e0 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
269f0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
26a00 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
26a10 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
26a20 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
26a30 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
26a40 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
26a50 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
26a60 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
26a70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
26a80 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
26a90 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
26aa0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
26ab0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26ac0 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
26ad0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
26ae0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
26af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26b00 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
26b10 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
26b20 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
26b30 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26b50 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
26b60 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
26b70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
26b80 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
26b90 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
26ba0 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
26bb0 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
26bc0 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
26bd0 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
26be0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
26bf0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
26c00 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
26c10 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
26c20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
26c30 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
26c40 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
26c50 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
26c60 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
26c70 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
26c80 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
26c90 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
26ca0 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
26cb0 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
26cc0 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
26cd0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
26ce0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
26cf0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
26d00 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
26d10 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
26d20 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
26d30 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
26d40 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
26d50 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
26d60 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
26d70 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
26d80 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
26d90 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
26da0 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
26db0 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
26dc0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
26dd0 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
26de0 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
26df0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
26e00 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
26e10 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
26e20 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
26e30 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
26e40 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
26e50 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
26e60 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
26e70 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
26e80 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
26e90 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
26ea0 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
26eb0 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
26ec0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
26ed0 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
26ee0 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
26ef0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
26f00 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
26f10 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
26f20 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
26f30 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
26f40 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
26f50 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
26f60 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
26f70 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
26f80 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
26f90 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
26fa0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
26fb0 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
26fc0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
26fd0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
26fe0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
26ff0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
27000 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
27010 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
27020 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
27030 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
27040 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
27050 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
27060 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
27070 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
27080 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
27090 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
270a0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
270b0 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
270c0 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
270d0 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62  cursion");.    b
270e0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
270f0 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
27100 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
27110 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
27120 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
27130 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
27140 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
27150 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
27160 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
27170 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
27180 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
27190 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
271a0 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
271b0 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
271c0 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
271d0 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
271e0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
271f0 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
27200 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
27210 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
27220 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
27230 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
27240 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
27250 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
27260 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
27270 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
27280 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
27290 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
272a0 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
272b0 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
272c0 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
272d0 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
272e0 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
272f0 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
27300 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
27310 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
27320 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
27330 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
27340 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
27350 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
27360 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
27370 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
27380 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
27390 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
273a0 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
273b0 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
273c0 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
273d0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
273e0 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
273f0 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20  beCursor *);.   
27400 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
27410 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
27420 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
27430 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
27440 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
27450 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
27460 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
27470 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
27480 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65  lags = MEM_Frame
27490 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72  ;.    pRt->u.pFr
274a0 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20  ame = pFrame;.. 
274b0 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70     pFrame->v = p
274c0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
274d0 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a  hildMem = nMem;.
274e0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
274f0 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d  ldCsr = pProgram
27500 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61  ->nCsr;.    pFra
27510 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20  me->pc = pc;.   
27520 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
27530 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
27540 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
27550 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
27560 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
27570 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
27580 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
27590 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
275a0 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
275b0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
275c0 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
275d0 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
275e0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20  ogram->token;.. 
275f0 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
27600 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
27610 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
27620 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
27630 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
27640 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
27650 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
27660 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
27670 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
27680 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
27690 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
276a0 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
276b0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
276c0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
276d0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
276e0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
276f0 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
27700 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
27710 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
27720 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
27730 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d  ssert( pc==pFram
27740 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
27750 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
27760 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
27770 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
27780 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
27790 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
277a0 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
277b0 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
277c0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
277d0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
277e0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
277f0 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  em = &VdbeFrameM
27800 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a  em(pFrame)[-1];.
27810 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
27820 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
27830 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
27840 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
27850 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
27860 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
27870 2a 29 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  *)&p->aMem[p->nM
27880 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20  em+1];.  p->aOp 
27890 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
278a0 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
278b0 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20  gram->nOp;.  pc 
278c0 3d 20 2d 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  = -1;..  break;.
278d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
278e0 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
278f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
27900 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
27910 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
27920 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
27930 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
27940 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
27950 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
27960 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
27970 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
27980 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
27990 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
279a0 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
279b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
279c0 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
279d0 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
279e0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
279f0 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
27a00 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
27a10 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
27a20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
27a30 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
27a40 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
27a50 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
27a60 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
27a70 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
27a80 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
27a90 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
27aa0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
27ab0 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
27ac0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
27ad0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
27ae0 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
27af0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
27b00 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
27b10 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
27b20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72   Mem *pIn;.  pFr
27b30 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
27b40 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
27b50 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
27b60 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
27b70 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
27b80 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
27b90 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
27ba0 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
27bb0 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
27bc0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
27bd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
27be0 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
27bf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
27c00 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
27c10 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
27c20 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
27c30 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
27c40 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
27c50 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
27c60 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
27c70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
27c80 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
27c90 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
27ca0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
27cb0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
27cc0 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
27cd0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
27ce0 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
27cf0 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
27d00 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
27d10 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
27d20 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
27d30 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
27d40 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
27d50 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
27d60 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70  ter: {.  if( pOp
27d70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
27d80 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
27d90 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
27da0 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
27db0 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
27dc0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
27dd0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
27de0 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
27df0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
27e00 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
27e10 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
27e20 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
27e30 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
27e40 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
27e50 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
27e60 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
27e70 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27e80 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
27e90 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
27ea0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
27eb0 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
27ec0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
27ed0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
27ee0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
27ef0 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
27f00 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
27f10 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
27f20 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
27f30 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
27f40 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
27f50 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
27f60 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
27f70 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
27f80 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
27f90 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
27fa0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
27fb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
27fc0 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
27fd0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
27fe0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69  pOp->p1 ){.    i
27ff0 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
28000 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
28010 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
28020 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  e{.    if( p->nF
28030 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29  kConstraint==0 )
28040 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
28050 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28060 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
28070 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
28080 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
28090 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
280a0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
280b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
280c0 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
280d0 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
280e0 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
280f0 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
28100 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
28110 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
28120 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
28130 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
28140 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
28150 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
28160 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
28170 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
28180 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
28190 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
281a0 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
281b0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
281c0 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
281d0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
281e0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
281f0 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
28200 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
28210 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
28220 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
28230 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
28240 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
28250 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65    /* in2 */.  Me
28260 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46  m *pIn1;.  VdbeF
28270 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
28280 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
28290 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
282a0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
282b0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
282c0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
282d0 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
282e0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
282f0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
28300 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e  .    pIn1 = &p->
28310 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
28320 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
28330 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
28340 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
28350 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
28360 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
28370 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
28380 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
28390 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
283a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
283b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
283c0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
283d0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
283e0 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
283f0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
28400 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
28410 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
28420 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
28430 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
28440 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
28450 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
28460 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
28470 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
28480 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
28490 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
284a0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
284b0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
284c0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
284d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
284e0 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
284f0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
28500 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
28510 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
28520 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
28530 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
28540 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
28550 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
28560 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
28570 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
28580 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
28590 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
285a0 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
285b0 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
285c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
285d0 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
285e0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
285f0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
28600 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
28610 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
28620 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
28630 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
28640 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
28650 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
28660 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
28670 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
28680 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
28690 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
286a0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
286b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
286c0 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33   IfZero P1 P2 P3
286d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
286e0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
286f0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
28700 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
28710 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
28720 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
28730 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
28740 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
28750 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
28760 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
28770 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
28780 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
28790 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
287a0 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
287b0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
287c0 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
287d0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
287e0 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
287f0 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
28800 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
28810 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
28820 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
28830 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
28840 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i += pOp->p3;.  
28850 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
28860 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
28870 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
28880 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28890 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
288a0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
288b0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
288c0 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
288d0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
288e0 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
288f0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
28900 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
28910 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
28920 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
28930 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
28940 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65  e function.  Use
28950 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20   register.** P3 
28960 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
28970 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
28980 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
28990 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
289a0 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
289b0 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
289c0 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
289d0 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
289e0 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  t i;.  Mem *pMem
289f0 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20  ;.  Mem *pRec;. 
28a00 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
28a10 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
28a20 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a  value **apVal;..
28a30 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
28a40 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
28a50 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d  .  pRec = &p->aM
28a60 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
28a70 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
28a80 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
28a90 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f   || n==0 );.  fo
28aa0 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
28ab0 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70   pRec++){.    ap
28ac0 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20  Val[i] = pRec;. 
28ad0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28ae0 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65 63 29  mStoreType(pRec)
28af0 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
28b00 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
28b10 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
28b20 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
28b30 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
28b40 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20  ctx.pMem = pMem 
28b50 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
28b60 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
28b70 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
28b80 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
28b90 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
28ba0 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
28bb0 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
28bc0 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
28bd0 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
28be0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
28bf0 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
28c00 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
28c10 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
28c20 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
28c30 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
28c40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
28c50 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
28c60 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
28c70 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
28c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
28c90 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
28ca0 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
28cb0 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
28cc0 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
28cd0 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
28ce0 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  ;.  if( ctx.isEr
28cf0 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
28d00 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
28d10 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
28d20 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
28d30 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
28d40 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
28d50 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
28d60 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
28d70 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65  e(&ctx.s);.  bre
28d80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28d90 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
28da0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
28db0 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
28dc0 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
28dd0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
28de0 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
28df0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
28e00 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
28e10 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
28e20 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
28e30 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
28e40 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
28e50 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
28e60 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
28e70 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
28e80 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
28e90 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
28ea0 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
28eb0 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
28ec0 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
28ed0 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
28ee0 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
28ef0 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
28f00 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
28f10 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
28f20 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
28f30 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
28f40 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
28f50 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
28f60 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
28f70 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
28f80 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
28f90 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
28fa0 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
28fb0 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
28fc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28fd0 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
28fe0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
28ff0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
29000 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29010 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
29020 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
29030 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
29040 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
29050 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
29060 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
29070 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
29080 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29090 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
290a0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
290b0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
290c0 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
290d0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
290e0 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
290f0 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
29100 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
29110 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
29120 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
29130 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
29140 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
29150 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65  eak;.}...#if !de
29160 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
29170 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
29180 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
29190 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
291a0 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
291b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
291c0 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
291d0 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
291e0 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
291f0 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
29200 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
29210 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
29220 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
29230 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
29240 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
29250 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
29260 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20  Vacuum: {.  if( 
29270 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
29280 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
29290 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
292a0 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33   .  rc = sqlite3
292b0 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
292c0 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66  rrMsg, db);.  if
292d0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
292e0 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
292f0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
29300 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
29310 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
29320 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
29330 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
29340 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
29350 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
29360 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
29370 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
29380 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
29390 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
293a0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
293b0 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
293c0 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
293d0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
293e0 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
293f0 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
29400 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
29410 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
29420 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
29430 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
29440 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
29450 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
29460 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29470 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
29480 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
29490 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
294a0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
294b0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
294c0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
294d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
294e0 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
294f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
29500 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
29510 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
29520 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
29530 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
29540 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
29550 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
29560 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
29570 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
29580 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
29590 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
295a0 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
295b0 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
295c0 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
295d0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
295e0 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
295f0 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
29600 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
29610 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
29620 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
29630 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
29640 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
29650 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
29660 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
29670 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
29680 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
29690 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
296a0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
296b0 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
296c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
296d0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
296e0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
296f0 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
29700 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
29710 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
29720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
29730 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
29740 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
29750 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
29760 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
29770 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
29780 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
29790 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
297a0 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
297b0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
297c0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
297d0 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
297e0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
297f0 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
29800 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
29810 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
29820 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
29830 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
29840 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
29850 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
29860 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
29870 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
29880 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
29890 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
298a0 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
298b0 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
298c0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
298d0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
298e0 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
298f0 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
29900 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
29910 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
29920 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
29930 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
29940 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
29950 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
29960 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
29970 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
29980 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
29990 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
299a0 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
299b0 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
299c0 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
299d0 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
299e0 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
299f0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
29a00 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
29a10 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a   (1<<p1))!=0 );.
29a20 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72      assert( isWr
29a30 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73  iteLock==0 || is
29a40 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a  WriteLock==1 );.
29a50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
29a60 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
29a70 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
29a80 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
29a90 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28  Lock);.    if( (
29aa0 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
29ab0 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
29ac0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
29ad0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
29ae0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
29af0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
29b00 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  db, "database ta
29b10 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
29b20 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
29b30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
29b40 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
29b50 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
29b60 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
29b70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29b80 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
29b90 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
29ba0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
29bb0 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
29bc0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
29bd0 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
29be0 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
29bf0 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
29c00 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
29c10 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
29c20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
29c30 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
29c40 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
29c50 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
29c60 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
29c70 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
29c80 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
29c90 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
29ca0 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
29cb0 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
29cc0 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
29cd0 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
29ce0 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
29cf0 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
29d00 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
29d10 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
29d20 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
29d30 20 20 69 66 28 20 70 56 54 61 62 20 29 7b 0a 20    if( pVTab ){. 
29d40 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
29d50 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
29d60 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
29d70 20 3d 20 70 56 54 61 62 2d 3e 70 56 74 61 62 2d   = pVTab->pVtab-
29d80 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
29d90 54 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45 72 72  Tab->pVtab->zErr
29da0 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  Msg = 0;.  }.  b
29db0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
29dc0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
29dd0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
29de0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29df0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
29e00 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
29e10 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  te P1 * * P4 *.*
29e20 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
29e30 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
29e40 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
29e50 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  se P1. Call the 
29e60 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a  xCreate method.*
29e70 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  * for that table
29e80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
29e90 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73  eate: {.  rc = s
29ea0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
29eb0 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
29ec0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d  , pOp->p4.z, &p-
29ed0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65  >zErrMsg);.  bre
29ee0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
29ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
29f00 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
29f10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29f20 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
29f30 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
29f40 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
29f50 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
29f60 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
29f70 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
29f80 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
29f90 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
29fa0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
29fb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
29fc0 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e  stroy: {.  p->in
29fd0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
29fe0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
29ff0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
2a000 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2a010 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  p4.z);.  p->inVt
2a020 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
2a030 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2a040 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2a050 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2a060 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a070 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a080 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
2a090 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
2a0a0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2a0b0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2a0c0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2a0d0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2a0e0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
2a0f0 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
2a100 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
2a110 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
2a120 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
2a130 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
2a140 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
2a150 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
2a160 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
2a170 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
2a180 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2a190 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
2a1a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2a1b0 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
2a1c0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2a1d0 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b  le;..  pCur = 0;
2a1e0 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2a1f0 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
2a200 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2a210 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2a220 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
2a230 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
2a240 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62  ;.  assert(pVtab
2a250 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20   && pModule);.  
2a260 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2a270 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
2a280 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2a290 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  use;.  rc = pMod
2a2a0 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62  ule->xOpen(pVtab
2a2b0 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b  , &pVtabCursor);
2a2c0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
2a2d0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
2a2e0 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
2a2f0 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
2a300 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
2a310 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  g = 0;.  if( sql
2a320 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
2a330 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2a340 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69  e_to_misuse;.  i
2a350 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63  f( SQLITE_OK==rc
2a360 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
2a370 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
2a380 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
2a390 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61  lass */.    pVta
2a3a0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d  bCursor->pVtab =
2a3b0 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20   pVtab;..    /* 
2a3c0 49 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20  Initialise vdbe 
2a3d0 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
2a3e0 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  .    pCur = allo
2a3f0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
2a400 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29  p->p1, 0, -1, 0)
2a410 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
2a420 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
2a430 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
2a440 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70  bCursor;.      p
2a450 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70  Cur->pModule = p
2a460 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2a470 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
2a480 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
2a490 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
2a4a0 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  1;.      pModule
2a4b0 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75  ->xClose(pVtabCu
2a4c0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2a4d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a4e0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2a4f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2a500 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2a510 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2a520 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2a530 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
2a540 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P4 *.**.** P1 is
2a550 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
2a560 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
2a570 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
2a580 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
2a590 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
2a5a0 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
2a5b0 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
2a5c0 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
2a5d0 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
2a5e0 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
2a5f0 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
2a600 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
2a610 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
2a620 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
2a630 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
2a640 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
2a650 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
2a660 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
2a670 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2a680 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
2a690 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
2a6a0 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
2a6b0 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
2a6c0 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
2a6d0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
2a6e0 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
2a6f0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
2a700 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
2a710 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
2a720 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
2a730 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
2a740 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
2a750 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
2a760 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
2a770 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
2a780 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
2a790 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
2a7a0 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
2a7b0 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
2a7c0 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
2a7d0 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
2a7e0 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
2a7f0 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
2a800 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
2a810 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
2a820 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
2a830 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
2a840 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
2a850 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2a860 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
2a870 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
2a880 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2a890 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2a8a0 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20   *pQuery;.  Mem 
2a8b0 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65  *pArgc;.  sqlite
2a8c0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2a8d0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2a8e0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2a8f0 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
2a900 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
2a910 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
2a920 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
2a930 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ery = &p->aMem[p
2a940 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
2a950 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
2a960 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
2a970 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45 47  [pOp->p1];.  REG
2a980 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2a990 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
2a9a0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2a9b0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
2a9c0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
2a9d0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
2a9e0 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
2a9f0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2aa00 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2aa10 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
2aa20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
2aa30 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
2aa40 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
2aa50 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
2aa60 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
2aa70 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
2aa80 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
2aa90 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
2aaa0 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
2aab0 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
2aac0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
2aad0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
2aae0 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
2aaf0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41  res = 0;.    apA
2ab00 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2ab10 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
2ab20 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2ab30 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
2ab40 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20  rgc[i+1];.      
2ab50 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2ab60 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d  oreType(apArg[i]
2ab70 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  );.    }..    if
2ab80 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2ab90 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
2aba0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2abb0 65 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  e;.    p->inVtab
2abc0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2abd0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2abe0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2abf0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2ac00 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2ac10 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2ac20 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2ac30 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2ac40 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
2ac50 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
2ac60 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
2ac70 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
2ac80 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  Msg = 0;.    if(
2ac90 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2aca0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d  {.      res = pM
2acb0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61  odule->xEof(pVta
2acc0 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  bCursor);.    }.
2acd0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
2ace0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
2acf0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2ad00 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28  misuse;..    if(
2ad10 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
2ad20 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2ad30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72      }.  }.  pCur
2ad40 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a  ->nullRow = 0;..
2ad50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ad60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ad70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2ad80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ad90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ada0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
2adb0 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
2adc0 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
2add0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2ade0 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
2adf0 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
2ae00 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
2ae10 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
2ae20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
2ae30 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
2ae40 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
2ae50 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
2ae60 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2ae70 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
2ae80 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2ae90 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
2aea0 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
2aeb0 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
2aec0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2aed0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2aee0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2aef0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2af00 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
2af10 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2af20 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
2af30 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
2af40 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
2af50 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2af60 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
2af70 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2af80 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
2af90 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2afa0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2afb0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2afc0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2afd0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2afe0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
2aff0 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
2b000 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
2b010 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
2b020 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
2b030 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
2b040 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
2b050 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
2b060 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
2b070 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
2b080 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
2b090 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
2b0a0 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
2b0b0 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
2b0c0 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
2b0d0 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
2b0e0 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
2b0f0 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
2b100 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2b110 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
2b120 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
2b130 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
2b140 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
2b150 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2b160 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
2b170 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2b180 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d  isuse;.  rc = pM
2b190 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
2b1a0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2b1b0 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
2b1c0 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
2b1d0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
2b1e0 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
2b1f0 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
2b200 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e  rrMsg;.  pVtab->
2b210 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69  zErrMsg = 0;.  i
2b220 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
2b230 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
2b240 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
2b250 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
2b260 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
2b270 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  he function to t
2b280 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20  he P3 register. 
2b290 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20  We.  ** do this 
2b2a0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
2b2b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
2b2c0 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74  error occurred t
2b2d0 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a  o ensure any.  *
2b2e0 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61  * dynamic alloca
2b2f0 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74  tion in sContext
2b300 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74  .s (a Mem struct
2b310 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a  ) is  released..
2b320 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2b330 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2b340 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e  (&sContext.s, en
2b350 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
2b360 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2b370 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c  3, pDest);.  sql
2b380 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
2b390 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74  pDest, &sContext
2b3a0 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  .s);.  UPDATE_MA
2b3b0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
2b3c0 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
2b3d0 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b  3SafetyOn(db) ){
2b3e0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
2b3f0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
2b400 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
2b410 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44  VdbeMemTooBig(pD
2b420 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  est) ){.    goto
2b430 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
2b440 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2b450 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2b460 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2b470 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b480 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2b490 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78  ./* Opcode: VNex
2b4a0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2b4b0 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74  .** Advance virt
2b4c0 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20  ual table P1 to 
2b4d0 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20  the next row in 
2b4e0 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61  its result set a
2b4f0 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e  nd.** jump to in
2b500 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f  struction P2.  O
2b510 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61  r, if the virtua
2b520 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63  l table has reac
2b530 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  hed.** the end o
2b540 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
2b550 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
2b560 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2b570 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2b580 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b  case OP_VNext: {
2b590 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2b5a0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2b5b0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
2b5c0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2b5d0 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b  dule;.  int res;
2b5e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2b5f0 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b  Cur;..  res = 0;
2b600 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2b610 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2b620 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2b630 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
2b640 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
2b650 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
2b660 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
2b670 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
2b680 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2b690 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2b6a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
2b6b0 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
2b6c0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2b6d0 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
2b6e0 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
2b6f0 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
2b700 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
2b710 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
2b720 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
2b730 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
2b740 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
2b750 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
2b760 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
2b770 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
2b780 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
2b790 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
2b7a0 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
2b7b0 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
2b7c0 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
2b7d0 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
2b7e0 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
2b7f0 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
2b800 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
2b810 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
2b820 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66  ursor..  */.  if
2b830 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2b840 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
2b850 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2b860 65 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  e;.  p->inVtabMe
2b870 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
2b880 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
2b890 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2b8a0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
2b8b0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
2b8c0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
2b8d0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
2b8e0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2b8f0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
2b900 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
2b910 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2b920 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
2b930 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2b940 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2b950 72 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  r);.  }.  if( sq
2b960 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
2b970 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2b980 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
2b990 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20   if( !res ){.   
2b9a0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2b9b0 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32  data, jump to P2
2b9c0 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
2b9d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2b9e0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2b9f0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2ba00 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2ba10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ba20 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ba30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
2ba40 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
2ba50 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2ba60 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2ba70 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2ba80 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2ba90 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2baa0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2bab0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2bac0 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
2bad0 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
2bae0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
2baf0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
2bb00 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
2bb10 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
2bb20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
2bb30 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
2bb40 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2bb50 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
2bb60 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
2bb70 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2bb80 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 70  ab;.  pName = &p
2bb90 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
2bba0 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62  .  assert( pVtab
2bbb0 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
2bbc0 6d 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  me );.  REGISTER
2bbd0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
2bbe0 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
2bbf0 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
2bc00 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66   MEM_Str );.  if
2bc10 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2bc20 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
2bc30 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2bc40 65 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d  e;.  rc = pVtab-
2bc50 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2bc60 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e  e(pVtab, pName->
2bc70 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  z);.  sqlite3DbF
2bc80 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
2bc90 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
2bca0 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
2bcb0 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
2bcc0 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  rMsg = 0;.  if( 
2bcd0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
2bce0 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
2bcf0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
2bd00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2bd10 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2bd20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2bd30 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2bd40 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33  VUpdate P1 P2 P3
2bd50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2bd60 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2bd70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2bd80 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2bd90 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2bda0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
2bdb0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
2bdc0 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
2bdd0 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
2bde0 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
2bdf0 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
2be00 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
2be10 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
2be20 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
2be30 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
2be40 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2be50 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
2be60 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
2be70 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
2be80 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
2be90 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
2bea0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
2beb0 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
2bec0 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
2bed0 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
2bee0 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
2bef0 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
2bf00 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2bf10 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
2bf20 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
2bf30 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
2bf40 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
2bf50 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
2bf60 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
2bf70 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
2bf80 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
2bf90 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
2bfa0 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
2bfb0 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
2bfc0 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
2bfd0 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
2bfe0 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
2bff0 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
2c000 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
2c010 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
2c020 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
2c030 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
2c040 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
2c050 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
2c060 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
2c070 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
2c080 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
2c090 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
2c0a0 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
2c0b0 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
2c0c0 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
2c0d0 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
2c0e0 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
2c0f0 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
2c100 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2c110 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
2c120 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
2c130 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
2c140 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
2c150 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
2c160 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
2c170 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  serted..*/.case 
2c180 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
2c190 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2c1a0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2c1b0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2c1c0 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
2c1d0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
2c1e0 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
2c1f0 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
2c200 2a 70 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  *pX;..  pVtab = 
2c210 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2c220 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2c230 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2c240 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2c250 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
2c260 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2c270 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2c280 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
2c290 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
2c2a0 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 61 70  pdate) ){.    ap
2c2b0 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
2c2c0 20 20 20 20 70 58 20 3d 20 26 70 2d 3e 61 4d 65      pX = &p->aMe
2c2d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
2c2e0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
2c2f0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
2c300 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
2c310 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20  Type(pX);.      
2c320 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
2c330 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
2c340 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2c350 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2c360 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2c370 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63  o_misuse;.    rc
2c380 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
2c390 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
2c3a0 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
2c3b0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
2c3c0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2c3d0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
2c3e0 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
2c3f0 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
2c400 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2c410 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2c420 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
2c430 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2c440 75 73 65 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  use;.    if( rc=
2c450 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f  =SQLITE_OK && pO
2c460 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61  p->p1 ){.      a
2c470 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26  ssert( nArg>1 &&
2c480 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70   apArg[0] && (ap
2c490 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45  Arg[0]->flags&ME
2c4a0 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20  M_Null) );.     
2c4b0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
2c4c0 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2c4d0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
2c4e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2c4f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2c500 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c510 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
2c520 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2c530 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
2c540 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
2c550 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2c560 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
2c570 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
2c580 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
2c590 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
2c5a0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
2c5b0 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
2c5c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
2c5d0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
2c5e0 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 6e 50 61  nt p1;.  int nPa
2c5f0 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50 61  ge;.  Pager *pPa
2c600 67 65 72 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70  ger;..  p1 = pOp
2c610 2d 3e 70 31 3b 20 0a 20 20 70 50 61 67 65 72 20  ->p1; .  pPager 
2c620 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
2c630 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ger(db->aDb[p1].
2c640 70 42 74 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  pBt);.  rc = sql
2c650 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f 75  ite3PagerPagecou
2c660 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61 67  nt(pPager, &nPag
2c670 65 29 3b 0a 20 20 2f 2a 20 4f 50 5f 50 61 67 65  e);.  /* OP_Page
2c680 63 6f 75 6e 74 20 69 73 20 61 6c 77 61 79 73 20  count is always 
2c690 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2c6a0 69 6e 20 61 20 72 65 61 64 20 74 72 61 6e 73 61  in a read transa
2c6b0 63 74 69 6f 6e 2e 20 20 54 68 65 0a 20 20 2a 2a  ction.  The.  **
2c6c0 20 70 61 67 65 20 63 6f 75 6e 74 20 68 61 73 20   page count has 
2c6d0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 75 63  already been suc
2c6e0 63 65 73 73 66 75 6c 6c 79 20 72 65 61 64 20 61  cessfully read a
2c6f0 6e 64 20 63 61 63 68 65 64 2e 20 20 53 6f 20 74  nd cached.  So t
2c700 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 50  he.  ** sqlite3P
2c710 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 29 20  agerPagecount() 
2c720 63 61 6c 6c 20 61 62 6f 76 65 20 63 61 6e 6e 6f  call above canno
2c730 74 20 66 61 69 6c 2e 20 2a 2f 0a 20 20 69 66 28  t fail. */.  if(
2c740 20 41 4c 57 41 59 53 28 72 63 3d 3d 53 51 4c 49   ALWAYS(rc==SQLI
2c750 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 70 4f  TE_OK) ){.    pO
2c760 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2c770 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2c780 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a  .i = nPage;.  }.
2c790 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2c7a0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2c7b0 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20  E_OMIT_TRACE./* 
2c7c0 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20  Opcode: Trace * 
2c7d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49  * * P4 *.**.** I
2c7e0 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
2c7f0 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
2c800 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
2c810 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
2c820 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
2c830 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
2c840 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
2c850 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
2c860 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ck..*/.case OP_T
2c870 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  race: {.  char *
2c880 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63  zTrace;..  zTrac
2c890 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
2c8a0 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
2c8b0 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72  zSql);.  if( zTr
2c8c0 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64  ace ){.    if( d
2c8d0 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20  b->xTrace ){.   
2c8e0 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
2c8f0 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 54 72  ->pTraceArg, zTr
2c900 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64  ace);.    }.#ifd
2c910 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2c920 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61      if( (db->fla
2c930 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
2c940 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20  race)!=0 ){.    
2c950 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
2c960 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
2c970 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
2c980 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  .    }.#endif /*
2c990 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
2c9a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c9b0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
2c9c0 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a  de: Noop * * * *
2c9d0 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68   *.**.** Do noth
2c9e0 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72  ing.  This instr
2c9f0 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20  uction is often 
2ca00 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70  useful as a jump
2ca10 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .** destination.
2ca20 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  .*/./*.** The ma
2ca30 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f  gic Explain opco
2ca40 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65  de are only inse
2ca50 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69  rted when explai
2ca60 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69  n==2 (which.** i
2ca70 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68  s to say when th
2ca80 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
2ca90 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75  PLAN syntax is u
2caa0 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70  sed.).** This op
2cab0 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66  code records inf
2cac0 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
2cad0 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74  e optimizer.  It
2cae0 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73   is the.** the s
2caf0 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20  ame as a no-op. 
2cb00 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76   This opcodesnev
2cb10 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20  er appears in a 
2cb20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e  real VM program.
2cb30 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20  .*/.default: {  
2cb40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
2cb50 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f  is really OP_Noo
2cb60 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e  p and OP_Explain
2cb70 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   */.  break;.}..
2cb80 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
2cb90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cbb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cbc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
2cbd0 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74  * The cases of t
2cbe0 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
2cbf0 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c  ent above this l
2cc00 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62  ine should all b
2cc10 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79  e indented.** by
2cc20 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20   6 spaces.  But 
2cc30 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20  the left-most 6 
2cc40 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e  spaces have been
2cc50 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72   removed to impr
2cc60 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61  ove the.** reada
2cc70 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68  bility.  From th
2cc80 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e  is point on down
2cc90 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64  , the normal ind
2cca0 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61  entation rules a
2ccb0 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a  re.** restored..
2ccc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ccd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ccf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cd00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20  *************/. 
2cd10 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42     }..#ifdef VDB
2cd20 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a  E_PROFILE.    {.
2cd30 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65        u64 elapse
2cd40 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  d = sqlite3Hwtim
2cd50 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20  e() - start;.   
2cd60 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b     pOp->cycles +
2cd70 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20  = elapsed;.     
2cd80 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66   pOp->cnt++;.#if
2cd90 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e   0.        fprin
2cda0 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c  tf(stdout, "%10l
2cdb0 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a  lu ", elapsed);.
2cdc0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2cdd0 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
2cde0 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61  t, origPc, &p->a
2cdf0 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e  Op[origPc]);.#en
2ce00 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  dif.    }.#endif
2ce10 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
2ce20 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73  lowing code adds
2ce30 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20   nothing to the 
2ce40 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61  actual functiona
2ce50 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74  lity.    ** of t
2ce60 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20  he program.  It 
2ce70 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72  is only here for
2ce80 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62   testing and deb
2ce90 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f  ugging..    ** O
2cea0 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
2ceb0 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43  , it does burn C
2cec0 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20  PU cycles every 
2ced0 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20  time through.   
2cee0 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f   ** the evaluato
2cef0 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63  r loop.  So we c
2cf00 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20  an leave it out 
2cf10 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64  when NDEBUG is d
2cf20 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
2cf30 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
2cf40 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31    assert( pc>=-1
2cf50 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
2cf60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2cf70 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d  DEBUG.    if( p-
2cf80 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  >trace ){.      
2cf90 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69  if( rc!=0 ) fpri
2cfa0 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63  ntf(p->trace,"rc
2cfb0 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
2cfc0 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79    if( opProperty
2cfd0 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
2cfe0 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  ERELEASE ){.    
2cff0 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2d000 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2d010 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
2d020 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70    }.      if( op
2d030 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
2d040 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20  _OUT3 ){.       
2d050 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2d060 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33  ->trace, pOp->p3
2d070 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
2d080 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f  .    }.#endif  /
2d090 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
2d0a0 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45  /.#endif  /* NDE
2d0b0 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54  BUG */.  }  /* T
2d0c0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f  he end of the fo
2d0d0 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c  r(;;) loop the l
2d0e0 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63  oops through opc
2d0f0 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  odes */..  /* If
2d100 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
2d110 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74  oint, it means t
2d120 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73  hat execution is
2d130 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20   finished with. 
2d140 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20   ** an error of 
2d150 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a  some kind..  */.
2d160 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a  vdbe_error_halt:
2d170 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b  .  assert( rc );
2d180 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
2d190 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
2d1a0 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
2d1b0 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
2d1c0 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
2d1d0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
2d1e0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a   SQLITE_ERROR;..
2d1f0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
2d200 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
2d210 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
2d220 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
2d230 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
2d240 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
2d250 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
2d260 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
2d270 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
2d280 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  rn:.  sqlite3Btr
2d290 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76  eeMutexArrayLeav
2d2a0 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20  e(&p->aMutex);. 
2d2b0 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
2d2c0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
2d2d0 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
2d2e0 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
2d2f0 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
2d300 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
2d310 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
2d320 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74  ig:.  sqlite3Set
2d330 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2d340 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20  sg, db, "string 
2d350 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22  or blob too big"
2d360 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2d370 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20  _TOOBIG;.  goto 
2d380 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2d390 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d3a0 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ere if a malloc(
2d3b0 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f  ) fails..  */.no
2d3c0 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c  _mem:.  db->mall
2d3d0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2d3e0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2d3f0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d400 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
2d410 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
2d420 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20  E_NOMEM;.  goto 
2d430 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2d440 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d450 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c 49 54  ere for an SQLIT
2d460 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a  E_MISUSE error..
2d470 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
2d480 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63 20 3d  o_misuse:.  rc =
2d490 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
2d4a0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69    /* Fall thru i
2d4b0 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  nto abort_due_to
2d4c0 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20  _error */..  /* 
2d4d0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
2d4e0 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
2d4f0 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
2d500 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
2d510 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
2d520 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
2d530 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
2d540 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
2d550 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
2d560 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
2d570 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2d580 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
2d590 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
2d5a0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
2d5b0 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
2d5c0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d5d0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d5e0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
2d5f0 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
2d600 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
2d610 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
2d620 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
2d630 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
2d640 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
2d650 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
2d660 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2d670 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
2d680 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
2d690 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
2d6a0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
2d6b0 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
2d6c0 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
2d6d0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d6e0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d6f0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
2d700 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
2d710 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.