/ Hex Artifact Content
Login

Artifact b0c18b5c5ab4745a09b8f164e5db36413d98872e:


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 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1810: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1820: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1830: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1840: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1850: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1860: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1870: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
1880: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
1890: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18a0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18b0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18c0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18d0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
18e0: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
18f0: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1900: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1910: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1920: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1930: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1940: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1950: 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61      /* When data
1960: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1970: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1980: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1990: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
19a0: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
19b0: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
19c0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
19d0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
19e0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
19f0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1a00: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1a10: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1a20: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1a30: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1a40: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1a50: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1a60: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1a70: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1a80: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1a90: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1aa0: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1ab0: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ac0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1ad0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1ae0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1af0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1b00: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1b10: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1b20: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1b30: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1b40: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1b50: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1b60: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1b70: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1b80: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1b90: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1ba0: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1bb0: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1bc0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1bd0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1be0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1bf0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1c00: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1c10: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1c20: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1c30: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1c40: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1c50: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1c60: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1c70: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1c80: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1c90: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1ca0: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1cb0: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1cc0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1cd0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1ce0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1cf0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1d00: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1d10: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1d20: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1d30: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1d40: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1d50: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1d60: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1d70: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1d80: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1d90: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1da0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1db0: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1dc0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1dd0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1de0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1df0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1e00: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e10: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1e20: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1e30: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1e40: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1e50: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1e60: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1e70: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1e80: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1e90: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1ea0: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1eb0: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1ec0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1ed0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1ee0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1ef0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1f00: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1f10: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
1f20: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
1f30: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f40: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
1f50: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
1f60: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
1f70: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
1f80: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
1f90: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
1fa0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
1fb0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1fc0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
1fd0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
1fe0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
1ff0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
2000: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
2010: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2020: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2030: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2040: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2050: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2060: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2070: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2080: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2090: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
20a0: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
20b0: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
20c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
20d0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
20e0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
20f0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
2100: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2110: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2120: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2130: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2140: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2150: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2160: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2170: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2180: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2190: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
21a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
21b0: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
21c0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
21d0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
21e0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c 6e  ){.    int realn
21f0: 75 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  um;.    sqlite3V
2200: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
2210: 74 65 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66  te(pRec);.    if
2220: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2230: 45 4d 5f 53 74 72 29 0a 20 20 20 20 20 20 20 20  EM_Str).        
2240: 20 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d   && sqlite3IsNum
2250: 62 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65  ber(pRec->z, &re
2260: 61 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63  alnum, pRec->enc
2270: 29 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 76  ) ){.      i64 v
2280: 61 6c 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  alue;.      sqli
2290: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
22a0: 6f 64 69 6e 67 28 70 52 65 63 2c 20 53 51 4c 49  oding(pRec, SQLI
22b0: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
22c0: 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26 20  if( !realnum && 
22d0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
22e0: 65 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29  ec->z, &value) )
22f0: 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  {.        pRec->
2300: 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  u.i = value;.   
2310: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
2320: 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e  lag(pRec, MEM_In
2330: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
2340: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2350: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
2360: 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Rec);.      }.  
2370: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2380: 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64   Processing is d
2390: 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20  etermine by the 
23a0: 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74  affinity paramet
23b0: 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  er:.**.** SQLITE
23c0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a  _AFF_INTEGER:.**
23d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
23e0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
23f0: 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54  NUMERIC:.**    T
2400: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52  ry to convert pR
2410: 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ec to an integer
2420: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2430: 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61  or a .**    floa
2440: 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65  ting-point repre
2450: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20  sentation if an 
2460: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2470: 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20  tation.**    is 
2480: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e  not possible.  N
2490: 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ote that the int
24a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
24b0: 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77  ion is.**    alw
24c0: 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65  ays preferred, e
24d0: 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e  ven if the affin
24e0: 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63  ity is REAL, bec
24f0: 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e  ause.**    an in
2500: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2510: 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61  tion is more spa
2520: 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20  ce efficient on 
2530: 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  disk..**.** SQLI
2540: 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20  TE_AFF_TEXT:.** 
2550: 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20     Convert pRec 
2560: 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73  to a text repres
2570: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2580: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a  SQLITE_AFF_NONE:
2590: 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70  .**    No-op.  p
25a0: 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64  Rec is unchanged
25b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
25c0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a   applyAffinity(.
25d0: 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20    Mem *pRec,    
25e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
25f0: 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ue to apply affi
2600: 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61  nity to */.  cha
2610: 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  r affinity,     
2620: 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
2630: 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
2640: 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20  /.  u8 enc      
2650: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
2660: 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  his text encodin
2670: 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66  g */.){.  if( af
2680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2690: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
26a0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
26b0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
26c0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
26d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
26e0: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
26f0: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2700: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2710: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2720: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2730: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2740: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
2750: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
2760: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2770: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2780: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2790: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
27a0: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
27b0: 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20  y(pRec, enc);.  
27c0: 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c    }.    pRec->fl
27d0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61  ags &= ~(MEM_Rea
27e0: 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  l|MEM_Int);.  }e
27f0: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
2800: 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  !=SQLITE_AFF_NON
2810: 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
2820: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2830: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c  E_AFF_INTEGER ||
2840: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2850: 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20  E_AFF_REAL.     
2860: 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e          || affin
2870: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2880: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61  NUMERIC );.    a
2890: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
28a0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69  ity(pRec);.    i
28b0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
28c0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
28d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
28e0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
28f0: 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  ec);.    }.  }.}
2900: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2910: 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20  onvert the type 
2920: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72  of a function ar
2930: 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75  gument or a resu
2940: 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74  lt column.** int
2950: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2960: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65  esentation.  Use
2970: 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20   either INTEGER 
2980: 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65  or REAL whicheve
2990: 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69  r.** is appropri
29a0: 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64  ate.  But only d
29b0: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
29c0: 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62   if it is possib
29d0: 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f  le without.** lo
29e0: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
29f0: 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  n and return the
2a00: 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66   revised type of
2a10: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a   the argument..*
2a20: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
2a30: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 61 70 69  EXPERIMENTAL api
2a40: 20 61 6e 64 20 69 73 20 73 75 62 6a 65 63 74 20   and is subject 
2a50: 74 6f 20 63 68 61 6e 67 65 20 6f 72 20 72 65 6d  to change or rem
2a60: 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oval..*/.int sql
2a70: 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72  ite3_value_numer
2a80: 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f  ic_type(sqlite3_
2a90: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
2aa0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d  Mem *pMem = (Mem
2ab0: 2a 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e  *)pVal;.  applyN
2ac0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ad0: 4d 65 6d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Mem);.  sqlite3V
2ae0: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2af0: 70 4d 65 6d 29 3b 0a 20 20 72 65 74 75 72 6e 20  pMem);.  return 
2b00: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2b10: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2b20: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2b30: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2b40: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2b50: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2b60: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2b70: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2b80: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2b90: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2ba0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2bb0: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2bc0: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2bd0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2be0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2bf0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2c00: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2c10: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2c20: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2c30: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2c40: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2c50: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2c60: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2c70: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2c80: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2c90: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2ca0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2cb0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2cc0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2cd0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2ce0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2cf0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2d00: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2d10: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2d20: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2d30: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2d40: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2d50: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2d60: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2d70: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2d80: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2d90: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2da0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2db0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2dc0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2dd0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2de0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2df0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2e00: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2e10: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2e20: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2e30: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2e40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2e50: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2e60: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2e70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2e80: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2e90: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2ea0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2eb0: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2ec0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2ed0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2ee0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2ef0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2f00: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2f10: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f20: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f30: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
2f40: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
2f50: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
2f60: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
2f70: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
2f80: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
2f90: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
2fa0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2fb0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2fc0: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
2fd0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
2fe0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
2ff0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
3000: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
3010: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
3020: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3030: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3040: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3050: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3060: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3070: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3080: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3090: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
30a0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
30b0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
30c0: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
30d0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
30e0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
30f0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
3100: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3110: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3120: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3130: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3140: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3150: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3160: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3170: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3180: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3190: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
31a0: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
31b0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
31c0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
31d0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
31e0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
31f0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
3200: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
3210: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3220: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3230: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3240: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3250: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3260: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3270: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3280: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3290: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
32a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
32b0: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
32c0: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
32d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
32e0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
32f0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
3300: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3310: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3320: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3330: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3340: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3350: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3360: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3370: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3380: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3390: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
33a0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
33b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
33c0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
33d0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
33e0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
33f0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
3400: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3410: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
3420: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3430: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3440: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3450: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3460: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3470: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3480: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3490: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
34a0: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
34b0: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
34c0: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
34d0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
34e0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
34f0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
3500: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3510: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
3520: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3530: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3540: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3550: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3560: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3570: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3580: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3590: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
35a0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
35b0: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
35c0: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
35d0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
35e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
35f0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
3600: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3610: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
3620: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3630: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3640: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3650: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3660: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3670: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3680: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3690: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
36a0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
36b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
36c0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
36d0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
36e0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
36f0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
3700: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
3710: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3720: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3730: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3740: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3750: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3760: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3770: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3780: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3790: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
37a0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
37b0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
37c0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
37d0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
37e0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
37f0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
3800: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
3810: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
3820: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3830: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3840: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3850: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3860: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3870: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3880: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3890: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
38a0: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
38b0: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
38c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
38d0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
38e0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
38f0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
3900: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
3910: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
3920: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3930: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3940: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3950: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3960: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3970: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3980: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3990: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
39a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
39b0: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
39c0: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
39d0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
39e0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
39f0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3a00: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3a10: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3a20: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3a30: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3a40: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3a50: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3a60: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3a70: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3a80: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3a90: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3aa0: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3ab0: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3ac0: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ad0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3ae0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3af0: 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66 20 53  rrupt;..#ifdef S
3b00: 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74 61 74  QLITE_DEBUG.stat
3b10: 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69 73 74  ic int fileExist
3b20: 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  s(sqlite3 *db, c
3b30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
3b40: 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30  ){.  int res = 0
3b50: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  ;.  int rc = SQL
3b60: 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66 20 53  ITE_OK;.#ifdef S
3b70: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f 2a 20  QLITE_TEST.  /* 
3b80: 49 66 20 77 65 20 61 72 65 20 63 75 72 72 65 6e  If we are curren
3b90: 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f 20 65  tly testing IO e
3ba0: 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f 20 6e  rrors, then do n
3bb0: 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65 73 73  ot call OsAccess
3bc0: 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73 74 20  () to.  ** test 
3bd0: 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e 63 65  for the presence
3be0: 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69 73 20   of zFile. This 
3bf0: 69 73 20 62 65 63 61 75 73 65 20 61 6e 79 20 49  is because any I
3c00: 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20 20 2a  O error that.  *
3c10: 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20 77 69  * occurs here wi
3c20: 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f 72 74  ll not be report
3c30: 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ed, causing the 
3c40: 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a 20 20  test to fail..  
3c50: 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  */.  extern int 
3c60: 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72  sqlite3_io_error
3c70: 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66 28 20  _pending;.  if( 
3c80: 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72  sqlite3_io_error
3c90: 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a 23 65  _pending<=0 ).#e
3ca0: 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71  ndif.    rc = sq
3cb0: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
3cc0: 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c 20 53  ->pVfs, zFile, S
3cd0: 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45 58 49  QLITE_ACCESS_EXI
3ce0: 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20 72 65  STS, &res);.  re
3cf0: 74 75 72 6e 20 28 72 65 73 20 26 26 20 72 63 3d  turn (res && rc=
3d00: 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 23  =SQLITE_OK);.}.#
3d10: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e  endif..#ifndef N
3d20: 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73  DEBUG./*.** This
3d30: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c   function is onl
3d40: 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  y called from wi
3d50: 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29  thin an assert()
3d60: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a   expression. It.
3d70: 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74  ** checks that t
3d80: 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e  he sqlite3.nTran
3d90: 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65  saction variable
3da0: 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65   is correctly se
3db0: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
3dc0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
3dd0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
3de0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68   currently in th
3df0: 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73  e .** linked lis
3e00: 74 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71  t starting at sq
3e10: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
3e20: 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a  ..** .** Usage:.
3e30: 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
3e40: 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
3e50: 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a  Count(db) );.*/.
3e60: 73 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b  static int check
3e70: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73  SavepointCount(s
3e80: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
3e90: 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65  nt n = 0;.  Save
3ea0: 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28  point *p;.  for(
3eb0: 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  p=db->pSavepoint
3ec0: 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29  ; p; p=p->pNext)
3ed0: 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20   n++;.  assert( 
3ee0: 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69  n==(db->nSavepoi
3ef0: 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73  nt + db->isTrans
3f00: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29  actionSavepoint)
3f10: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a   );.  return 1;.
3f20: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
3f30: 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20  Execute as much 
3f40: 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  of a VDBE progra
3f50: 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e  m as we can then
3f60: 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73   return..**.** s
3f70: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
3f80: 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61  ady() must be ca
3f90: 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73  lled before this
3fa0: 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
3fb0: 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68  r to.** close th
3fc0: 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61  e program with a
3fd0: 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61   final OP_Halt a
3fe0: 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65  nd to set up the
3ff0: 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e   callbacks.** an
4000: 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
4010: 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a  age pointer..**.
4020: 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f  ** Whenever a ro
4030: 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61  w or result data
4040: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74   is available, t
4050: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
4060: 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b   either.** invok
4070: 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c  e the result cal
4080: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
4090: 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72  is one) or retur
40a0: 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  n with.** SQLITE
40b0: 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  _ROW..**.** If a
40c0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
40d0: 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b  e to open a lock
40e0: 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  ed database, the
40f0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
4100: 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e  * will either in
4110: 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61  voke the busy ca
4120: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
4130: 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77   is one) or it w
4140: 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51  ill.** return SQ
4150: 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a  LITE_BUSY..**.**
4160: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
4170: 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65  urs, an error me
4180: 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e  ssage is written
4190: 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   to memory obtai
41a0: 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ned.** from sqli
41b0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64  te3_malloc() and
41c0: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d   p->zErrMsg is m
41d0: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
41e0: 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20  that memory..** 
41f0: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69  The error code i
4200: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72  s stored in p->r
4210: 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69  c and this routi
4220: 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ne returns SQLIT
4230: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49  E_ERROR..**.** I
4240: 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65  f the callback e
4250: 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ver returns non-
4260: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70  zero, then the p
4270: 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20  rogram exits.** 
4280: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
4290: 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65  ere will be no e
42a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74  rror message but
42b0: 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64   the p->rc field
42c0: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51   is.** set to SQ
42d0: 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74  LITE_ABORT and t
42e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
42f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4300: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65  RROR..**.** A me
4310: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
4320: 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e  error causes p->
4330: 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20  rc to be set to 
4340: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64  SQLITE_NOMEM and
4350: 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65   this.** routine
4360: 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54   to return SQLIT
4370: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f  E_ERROR..**.** O
4380: 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72  ther fatal error
4390: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
43a0: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74  ERROR..**.** Aft
43b0: 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  er this routine 
43c0: 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71  has finished, sq
43d0: 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a  lite3VdbeFinaliz
43e0: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  e() should be.**
43f0: 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75   used to clean u
4400: 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20  p the mess that 
4410: 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e  was left behind.
4420: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4430: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4440: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4450: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4460: 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63  E */.){.  int pc
4470: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4480: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
4490: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
44a0: 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f   Op *aOp = p->aO
44b0: 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  p;          /* C
44c0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f  opy of p->aOp */
44d0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
44f0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4500: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4510: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4520: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4530: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4540: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4550: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4560: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4570: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4580: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4590: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
45a0: 72 72 6f 72 20 69 66 20 74 72 75 65 20 2a 2f 0a  rror if true */.
45b0: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
45c0: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
45d0: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
45e0: 6f 64 69 6e 67 20 2a 2f 0a 23 69 66 6e 64 65 66  oding */.#ifndef
45f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4600: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4610: 20 69 6e 74 20 63 68 65 63 6b 50 72 6f 67 72 65   int checkProgre
4620: 73 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ss;         /* T
4630: 72 75 65 20 69 66 20 70 72 6f 67 72 65 73 73 20  rue if progress 
4640: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 65 6e  callbacks are en
4650: 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  abled */.  int n
4660: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
4670: 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73        /* Opcodes
4680: 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20   executed since 
4690: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
46a0: 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d  k. */.#endif.  M
46b0: 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  em *aMem = p->aM
46c0: 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  em;       /* Cop
46d0: 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a  y of p->aMem */.
46e0: 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b    Mem *pIn1 = 0;
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4700: 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  1st input operan
4710: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32  d */.  Mem *pIn2
4720: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4730: 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f    /* 2nd input o
4740: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4750: 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20  *pIn3 = 0;      
4760: 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e         /* 3rd 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 4f 75 74 20 3d 20 30 3b 20   Mem *pOut = 0; 
4790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
47a0: 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  utput operand */
47b0: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
47c0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
47d0: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
47e0: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
47f0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4800: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
4810: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
4820: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
4830: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
4840: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4850: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4860: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4870: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4880: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4890: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
48a0: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
48b0: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
48c0: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
48d0: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
48e0: 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49  .#endif.  /*** I
48f0: 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f  NSERT STACK UNIO
4900: 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61  N HERE ***/..  a
4910: 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d  ssert( p->magic=
4920: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
4930: 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73  );  /* sqlite3_s
4940: 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74  tep() verifies t
4950: 68 69 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  his */.  assert(
4960: 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49   db->magic==SQLI
4970: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29 3b  TE_MAGIC_BUSY );
4980: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75  .  sqlite3VdbeMu
4990: 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70 29  texArrayEnter(p)
49a0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
49b0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
49c0: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
49d0: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
49e0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
49f0: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4a00: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4a10: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4a20: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4a30: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4a40: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4a50: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4a60: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4a70: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4a80: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4a90: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4aa0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4ab0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4ac0: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4ad0: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4ae0: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4af0: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4b00: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4b10: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4b20: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4b30: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63  _CALLBACK.  chec
4b40: 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e  kProgress = db->
4b50: 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65  xProgress!=0;.#e
4b60: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4b70: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4b80: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4b90: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4ba0: 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70  pc==0 .   && ((p
4bb0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4bc0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4bd0: 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28  ) || fileExists(
4be0: 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69  db, "vdbe_explai
4bf0: 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e  n")).  ){.    in
4c00: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
4c10: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4c20: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4c30: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4c40: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4c50: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4c60: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4c70: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4c80: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4c90: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  );.    }.  }.  i
4ca0: 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  f( fileExists(db
4cb0: 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20  , "vdbe_trace") 
4cc0: 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20  ){.    p->trace 
4cd0: 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20  = stdout;.  }.  
4ce0: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4cf0: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4d00: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4d10: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4d20: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4d30: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4d40: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4d50: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4d60: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4d70: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4d80: 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20  FILE.    origPc 
4d90: 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20  = pc;.    start 
4da0: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4db0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f  );.#endif.    pO
4dc0: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4dd0: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4de0: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4df0: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4e00: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4e10: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4e20: 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
4e30: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63   ){.      if( pc
4e40: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
4e50: 72 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63  rintf("VDBE Exec
4e60: 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29  ution Trace:\n")
4e70: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4e80: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4ea0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4eb0: 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c  Op(p->trace, pc,
4ec0: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 20   pOp);.    }.   
4ed0: 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d 3d 30   if( p->trace==0
4ee0: 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20   && pc==0 ){.   
4ef0: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42     sqlite3BeginB
4f00: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4f10: 20 20 20 20 20 69 66 28 20 66 69 6c 65 45 78 69       if( fileExi
4f20: 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 73 71  sts(db, "vdbe_sq
4f30: 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20  ltrace") ){.    
4f40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4f50: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4f60: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4f70: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
4f80: 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ();.    }.#endif
4f90: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4fa0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4fb0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4fc0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4fd0: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4fe0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4ff0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
5000: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
5010: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5020: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
5030: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5040: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
5050: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5060: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
5070: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5080: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
5090: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
50a0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
50b0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
50c0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
50d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
50e0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
50f0: 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20      /* Call the 
5100: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5110: 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69  k if it is confi
5120: 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65  gured and the re
5130: 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20  quired number.  
5140: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
5150: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
5160: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
5170: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
5180: 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69  n of.    ** sqli
5190: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
51a0: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
51b0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
51c0: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
51d0: 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  d)..    ** If th
51e0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
51f0: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5200: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5210: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5220: 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74  ith.    ** a ret
5230: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5240: 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20  ABORT..    */.  
5250: 20 20 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72    if( checkProgr
5260: 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ess ){.      if(
5270: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5280: 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  s==nProgressOps 
5290: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70  ){.        int p
52a0: 72 63 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rc;.        if( 
52b0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
52c0: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
52d0: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
52e0: 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 64 62  .        prc =db
52f0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
5300: 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20  pProgressArg);. 
5310: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
5320: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
5330: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
5340: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20  to_misuse;.     
5350: 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29 7b     if( prc!=0 ){
5360: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
5370: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
5380: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
5390: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
53a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
53b0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
53c0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
53d0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
53e0: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
53f0: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20  ..    /* On any 
5400: 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
5410: 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73 65 22  "out2-prerelase"
5420: 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20   tag, free any. 
5430: 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61     ** external a
5440: 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f  llocations out o
5450: 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65  f mem[p2] and se
5460: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a  t mem[p2] to be.
5470: 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69      ** an undefi
5480: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70  ned integer.  Op
5490: 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65  codes will eithe
54a0: 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e  r fill in the in
54b0: 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c  teger.    ** val
54c0: 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65  ue or convert me
54d0: 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65  m[p2] to a diffe
54e0: 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a  rent type..    *
54f0: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
5500: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
5510: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
5520: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
5530: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
5540: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5550: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
5560: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5570: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5580: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5590: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
55a0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
55b0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
55c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
55d0: 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
55e0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75  pOut);.      pOu
55f0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
5600: 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  nt;.    }..    /
5610: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5620: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
5630: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
5640: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
5650: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5660: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5670: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5680: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5690: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
56a0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
56b0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
56c0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
56d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
56e0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
56f0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5700: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5710: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5720: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5730: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5740: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5750: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5760: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5770: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5780: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5790: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
57a0: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
57b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
57c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
57d0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
57e0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 52 45 47  Mem );.      REG
57f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5800: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5810: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
5820: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5830: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5840: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5850: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5860: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5870: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5880: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5890: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
58a0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
58b0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
58c0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
58d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
58e0: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
58f0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5900: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5910: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5970: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5980: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5990: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
59a0: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
59b0: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
59c0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
59d0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
59e0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
59f0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5a00: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5a10: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5a20: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5a30: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5a40: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5a50: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5a60: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5a70: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5a80: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5a90: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5aa0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5ab0: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5ac0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5ad0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5ae0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5af0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5b00: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5b10: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5b20: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5b30: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5b40: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5b50: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5b60: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5b70: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5b80: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5b90: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5ba0: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5bb0: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5bc0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5bd0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5be0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5bf0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5c00: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5c10: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5c20: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5c30: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5c40: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5c50: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5c60: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5c70: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5c80: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5c90: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5ca0: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5cb0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5cc0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5cd0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5ce0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5cf0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5d00: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5d10: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5d20: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5d30: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5d40: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5d50: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5d60: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5d70: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5d80: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5d90: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5da0: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5db0: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5dc0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5dd0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5de0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5df0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5e00: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5e10: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5e20: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5e30: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5e40: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5e50: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5e60: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5e70: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5e80: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5e90: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5ea0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5eb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5ec0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5ed0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5ee0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5ef0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5f00: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5f10: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5f20: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5f30: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5f40: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5f50: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5f60: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5f70: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5f80: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5f90: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5fa0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5fb0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5fc0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5fd0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5fe0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5ff0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
6000: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
6010: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
6020: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6080: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6090: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
60a0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
60b0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
60c0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
60d0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
60e0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
60f0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6100: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6110: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6120: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
6130: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6150: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
6160: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6170: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6180: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6190: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
61a0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
61b0: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
61c0: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
61d0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
61e0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
61f0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
6200: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
6210: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6220: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
6230: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6240: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
6250: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6260: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70  M_Dyn)==0 );.  p
6270: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6280: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6290: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
62a0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
62b0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
62c0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
62d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
62e0: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
62f0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
6300: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6310: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6320: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6330: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
6340: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6360: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6370: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6380: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6390: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
63a0: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
63b0: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
63c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
63d0: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
63e0: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
63f0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
6400: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
6410: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6420: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6430: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6440: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
6450: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
6460: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6470: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
6480: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
6490: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
64a0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
64b0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
64c0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
64d0: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
64e0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
64f0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6500: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
6510: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6520: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
6530: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
6540: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6550: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6560: 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e   P3.  If is is N
6570: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6580: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
6590: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
65a0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
65b0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
65c0: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
65d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
65e0: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
65f0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
6600: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
6610: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
6620: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
6630: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
6640: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
6650: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
6660: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
6670: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6680: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
6690: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
66a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
66b0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
66c0: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
66d0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
66e0: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
66f0: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
6700: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
6710: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
6720: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
6730: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
6740: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
6750: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6760: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6770: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6780: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6790: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
67a0: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
67b0: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
67c0: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
67d0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
67e0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
67f0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
6800: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
6810: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
6820: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
6830: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
6840: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
6850: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6860: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6870: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6880: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
6890: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
68a0: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
68b0: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
68c0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
68d0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
68e0: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
68f0: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
6900: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
6910: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
6920: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
6930: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6940: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6950: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6960: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6970: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6980: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6990: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
69a0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
69b0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
69c0: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
69d0: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
69e0: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
69f0: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6a00: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
6a10: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
6a20: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6a30: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6a40: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6a50: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6a60: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6a70: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6a80: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
6a90: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
6aa0: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
6ab0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
6ac0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6ad0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
6ae0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6af0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6b00: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6b10: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  me);.    if( pOp
6b20: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
6b30: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
6b40: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
6b50: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
6b60: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
6b70: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
6b80: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
6b90: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
6ba0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
6bb0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
6bc0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
6bd0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
6be0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
6bf0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
6c00: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
6c10: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
6c20: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
6c30: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
6c40: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
6c50: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
6c60: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
6c70: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
6c80: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
6c90: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
6ca0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
6cb0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
6cc0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
6cd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6ce0: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
6cf0: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
6d00: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
6d10: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b  2;.  p->pc = pc;
6d20: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
6d30: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
6d40: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
6d50: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
6d60: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a  pOp->p4.z);.  }.
6d70: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
6d80: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
6d90: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
6da0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
6db0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
6dc0: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
6dd0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6de0: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6df0: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6e00: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6e10: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6e20: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
6e30: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
6e40: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
6e50: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6e60: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
6e70: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
6e80: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
6e90: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
6ea0: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
6eb0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
6ec0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
6ed0: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
6ee0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
6ef0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
6f00: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
6f10: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
6f20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
6f30: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
6f40: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
6f50: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
6f60: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
6f70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6f80: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
6f90: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
6fa0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
6fb0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
6fc0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
6fd0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
6fe0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
6ff0: 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20  se OP_Int64: {  
7000: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7010: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7020: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
7030: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
7040: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
7050: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
7060: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
7070: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
7080: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
7090: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * 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 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
70d0: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
70e0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
70f0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7100: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7110: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7120: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
7130: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
7140: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7150: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
7160: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
7170: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
7180: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
7190: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
71a0: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
71b0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
71c0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
71d0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
71e0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
71f0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
7200: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
7210: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7220: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
7230: 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65   an OP_String be
7240: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
7250: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
7260: 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20  t time..*/.case 
7270: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
7280: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7290: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
72a0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
72b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
72c0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e  .z!=0 );.  pOp->
72d0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
72e0: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
72f0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
7300: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
7310: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7320: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
7330: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
7340: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
7350: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7360: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
7370: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
7380: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
7390: 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  TIC);.    if( rc
73a0: 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  ==SQLITE_TOOBIG 
73b0: 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a  ) goto too_big;.
73c0: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
73d0: 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68  K!=sqlite3VdbeCh
73e0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
73f0: 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67  t, encoding) ) g
7400: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
7410: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d  assert( pOut->zM
7420: 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29  alloc==pOut->z )
7430: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
7440: 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
7450: 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  Dyn );.    pOut-
7460: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7470: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7480: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7490: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
74a0: 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66  ~MEM_Dyn;.    if
74b0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
74c0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
74d0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
74e0: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
74f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
7500: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
7510: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
7520: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
7530: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
7540: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
7550: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
7560: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
7570: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
7580: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
7590: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
75a0: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
75b0: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
75c0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
75d0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
75e0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
75f0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
7600: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
7610: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
7620: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
7630: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7640: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
7650: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7660: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7670: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
7680: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
7690: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
76a0: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
76b0: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
76c0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
76d0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
76e0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
76f0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
7700: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7710: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7720: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50  Opcode: Null * P
7730: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
7740: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
7750: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7760: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
7770: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7780: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7790: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
77a0: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61  MEM_Null;.  brea
77b0: 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
77c0: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
77d0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  4.**.** P4 point
77e0: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
77f0: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
7800: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
7810: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
7820: 65 72 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74  er P2. This inst
7830: 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  ruction is not c
7840: 6f 64 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a  oded directly.**
7850: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
7860: 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63  . Instead, the c
7870: 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70  ompiler layer sp
7880: 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50  ecifies.** an OP
7890: 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c  _HexBlob opcode,
78a0: 20 77 69 74 68 20 74 68 65 20 68 65 78 20 73 74   with the hex st
78b0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
78c0: 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c  ion of.** the bl
78d0: 6f 62 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f  ob as P4. This o
78e0: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
78f0: 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c  rmed to an OP_Bl
7900: 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  ob.** the first 
7910: 74 69 6d 65 20 69 74 20 69 73 20 65 78 65 63 75  time it is execu
7920: 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
7930: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
7940: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7950: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7960: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
7970: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
7980: 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  GTH );.  sqlite3
7990: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
79a0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
79b0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
79c0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
79d0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
79e0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
79f0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7a00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7a10: 62 6c 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ble P1 P2 P3 P4 
7a20: 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  *.**.** Transfer
7a30: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
7a40: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20  ound parameters 
7a50: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f  P1..P1+P3-1 into
7a60: 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32   registers.** P2
7a70: 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a  ..P2+P3-1..**.**
7a80: 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   If the paramete
7a90: 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e  r is named, then
7aa0: 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72   its name appear
7ab0: 73 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d  s in P4 and P3==
7ac0: 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  1..** The P4 val
7ad0: 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71  ue is used by sq
7ae0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
7af0: 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a  eter_name()..*/.
7b00: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
7b10: 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
7b20: 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62         /* Variab
7b30: 6c 65 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  le to copy from 
7b40: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7b50: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
7b60: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
7b70: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
7b80: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7b90: 76 61 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63  values left to c
7ba0: 6f 70 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56  opy */.  Mem *pV
7bb0: 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  ar;       /* Val
7bc0: 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65  ue being transfe
7bd0: 72 72 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20  rred */..  p1 = 
7be0: 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70  pOp->p1 - 1;.  p
7bf0: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e  2 = pOp->p2;.  n
7c00: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
7c10: 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
7c20: 31 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  1+n<=p->nVar );.
7c30: 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20    assert( p2>=1 
7c40: 26 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d  && p2+n-1<=p->nM
7c50: 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em );.  assert( 
7c60: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
7c70: 70 4f 70 2d 3e 70 33 3d 3d 31 20 7c 7c 20 70 4f  pOp->p3==1 || pO
7c80: 70 2d 3e 70 33 3d 3d 30 20 29 3b 0a 0a 20 20 77  p->p3==0 );..  w
7c90: 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b  hile( n-- > 0 ){
7ca0: 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  .    pVar = &p->
7cb0: 61 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20  aVar[p1++];.    
7cc0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
7cd0: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
7ce0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
7cf0: 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
7d00: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 2b  pOut = &aMem[p2+
7d10: 2b 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +];.    sqlite3V
7d20: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
7d30: 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20  ernal(pOut);.   
7d40: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7d50: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73 71 6c  EM_Null;.    sql
7d60: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7d70: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
7d80: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
7d90: 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42      UPDATE_MAX_B
7da0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7db0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
7dc0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50  * Opcode: Move P
7dd0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
7de0: 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65  * Move the value
7df0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
7e00: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
7e10: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
7e20: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
7e30: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
7e40: 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P1-1 are.** left
7e50: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
7e60: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
7e70: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
7e80: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
7e90: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
7ea0: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a  3-1 to overlap..
7eb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
7ec0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c   {.  char *zMall
7ed0: 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  oc;   /* Holding
7ee0: 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c   variable for al
7ef0: 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a  located memory *
7f00: 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
7f10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7f20: 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74  f registers left
7f30: 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e   to copy */.  in
7f40: 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f  t p1;          /
7f50: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
7f60: 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74  py from */.  int
7f70: 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p2;          /*
7f80: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7f90: 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  y to */..  n = p
7fa0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70  Op->p3;.  p1 = p
7fb0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
7fc0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
7fd0: 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26  ( n>0 && p1>0 &&
7fe0: 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p2>0 );.  asser
7ff0: 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70  t( p1+n<=p2 || p
8000: 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49  2+n<=p1 );..  pI
8010: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a  n1 = &aMem[p1];.
8020: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
8030: 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d  2];.  while( n--
8040: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
8050: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e  pOut<=&aMem[p->n
8060: 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
8070: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
8080: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
8090: 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e  zMalloc = pOut->
80a0: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75  zMalloc;.    pOu
80b0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
80c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
80d0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
80e0: 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  1);.    pIn1->zM
80f0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
8100: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8110: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
8120: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8130: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8140: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8150: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a  de: Copy P1 P2 *
8160: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20   * *.**.** Make 
8170: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
8180: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8190: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
81a0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
81b0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
81c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
81d0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
81e0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
81f0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
8200: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
8210: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
8220: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20  se OP_Copy: {   
8230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8240: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
8250: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8260: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8270: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8280: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8290: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
82a0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
82b0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
82c0: 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65  Ephem);.  Deephe
82d0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
82e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
82f0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
8300: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8310: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
8320: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8330: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
8340: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
8350: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8360: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
8370: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8380: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
8390: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
83a0: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
83b0: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
83c0: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
83d0: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
83e0: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
83f0: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
8400: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
8410: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
8420: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
8430: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
8440: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
8450: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
8460: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
8470: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
8480: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
8490: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
84a0: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
84b0: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
84c0: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
84d0: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
84e0: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
84f0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
8500: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
8510: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
8520: 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
8530: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
8540: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
8550: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8560: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8570: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8580: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8590: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
85a0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
85b0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
85c0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
85d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
85e0: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
85f0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8600: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
8610: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
8620: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
8630: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
8640: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
8650: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
8660: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
8670: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
8680: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
8690: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
86a0: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
86b0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
86c0: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
86d0: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
86e0: 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76   to the top P1 v
86f0: 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73  alues as the res
8700: 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63  ult.** row..*/.c
8710: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
8720: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
8730: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
8740: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
8750: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
8760: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8770: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
8780: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
8790: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20  p->nMem+1 );..  
87a0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
87b0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
87c0: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
87d0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
87e0: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
87f0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8800: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
8810: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
8820: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
8830: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
8840: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
8850: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
8860: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
8870: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
8880: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
8890: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
88a0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
88b0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
88c0: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
88d0: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
88e0: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61  rnal );.    brea
88f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  k;.  }..  /* If 
8900: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
8910: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
8920: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
8930: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
8940: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
8950: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
8960: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
8970: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8980: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
8990: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
89a0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
89b0: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
89c0: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
89d0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
89e0: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
89f0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
8a00: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
8a10: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
8a20: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
8a30: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
8a40: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
8a50: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
8a60: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
8a70: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
8a80: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
8a90: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
8aa0: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
8ab0: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
8ac0: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
8ad0: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
8ae0: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
8af0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
8b00: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
8b10: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
8b20: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
8b30: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
8b40: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
8b50: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
8b60: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
8b70: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
8b80: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
8b90: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8ba0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
8bb0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8bc0: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
8bd0: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
8be0: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
8bf0: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
8c00: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
8c10: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
8c20: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
8c30: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
8c40: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8c50: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
8c60: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
8c70: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
8c80: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
8c90: 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  SE);.  if( NEVER
8ca0: 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
8cb0: 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
8cc0: 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  }..  /* Invalida
8cd0: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
8ce0: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
8cf0: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
8d00: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
8d10: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
8d20: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
8d30: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
8d40: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
8d50: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
8d60: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
8d70: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
8d80: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
8d90: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
8da0: 61 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20  as.  ** as side 
8db0: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
8dc0: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
8dd0: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
8de0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8df0: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8e00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8e10: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
8e20: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
8e30: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
8e40: 6f 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d  oreType(&pMem[i]
8e50: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
8e60: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
8e70: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8e80: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8e90: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8ea0: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8eb0: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8ec0: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20  */.  p->pc = pc 
8ed0: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
8ee0: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
8ef0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
8f00: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
8f10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8f20: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
8f30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8f40: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
8f50: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
8f60: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
8f70: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8f80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
8f90: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
8fa0: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
8fb0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
8fc0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
8fd0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
8fe0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
8ff0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
9000: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
9010: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
9020: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
9030: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
9040: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
9050: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
9060: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
9070: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
9080: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
9090: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
90a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
90b0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
90c0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
90d0: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
90e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
90f0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
9100: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
9110: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9120: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
9130: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
9140: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
9150: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
9160: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
9170: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9180: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9190: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
91a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
91b0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
91c0: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
91d0: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
91e0: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
91f0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9200: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
9210: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
9220: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
9230: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
9240: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
9250: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
9260: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
9270: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
9280: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
9290: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
92a0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
92b0: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
92c0: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
92d0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
92e0: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
92f0: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
9300: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
9310: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
9320: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
9330: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
9340: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
9350: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
9360: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
9370: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
9380: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
9390: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
93a0: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
93b0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
93c0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
93d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
93e0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
93f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
9400: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
9410: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
9420: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9430: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
9440: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9450: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9460: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9470: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9480: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9490: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
94a0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
94b0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
94c0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a  P2 P3 * *.**.**.
94d0: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
94e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
94f0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9500: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9510: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9520: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9530: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9540: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9550: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9560: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
9570: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
9580: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9590: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
95a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
95b0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
95c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
95d0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
95e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
95f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9600: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9610: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9620: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9630: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
9640: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9650: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
9660: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9670: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9680: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9690: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
96a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
96b0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
96c0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
96d0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
96e0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
96f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9700: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
9710: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
9720: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9730: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9740: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
9750: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9760: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
9770: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
9780: 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20  ger division of 
9790: 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
97a0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
97b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
97c0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
97d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
97e0: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
97f0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9800: 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P2 is zero the 
9810: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9820: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
9830: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
9840: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9850: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
9860: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9870: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9880: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
9890: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
98a0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
98b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
98c0: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
98d0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
98e0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
98f0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
9900: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
9910: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
9920: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
9930: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
9940: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9950: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
9960: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9970: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
9980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9990: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
99a0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
99b0: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
99c0: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
99d0: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
99e0: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
99f0: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
9a00: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9a10: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9a20: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
9a30: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9a40: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9a50: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9a60: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
9a70: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
9a80: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
9a90: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
9aa0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
9ab0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9ac0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9ad0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
9ae0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9af0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
9b00: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9b10: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
9b20: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
9b30: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9b40: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
9b50: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
9b60: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
9b70: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
9b80: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
9b90: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
9ba0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
9bb0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
9bc0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
9bd0: 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74  EM_Int)==MEM_Int
9be0: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
9bf0: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
9c00: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
9c10: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
9c20: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
9c30: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
9c40: 20 20 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20    iB += iA;     
9c50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9c60: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
9c70: 20 20 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20      iB -= iA;   
9c80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9c90: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9ca0: 79 3a 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20  y:    iB *= iA; 
9cb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9cc0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
9cd0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
9ce0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
9cf0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9d00: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9d10: 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65   /* Dividing the
9d20: 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
9d30: 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69  e negative 64-bi
9d40: 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33  t integer (1<<63
9d50: 29 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a  ) by .        **
9d60: 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69   -1 returns an i
9d70: 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65  nteger too large
9d80: 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36   to store in a 6
9d90: 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e  4-bit data-type.
9da0: 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   On.        ** s
9db0: 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ome architecture
9dc0: 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65  s, the value ove
9dd0: 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33  rflows to (1<<63
9de0: 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20  ). On others,.  
9df0: 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50        ** a SIGFP
9e00: 45 20 69 73 20 69 73 73 75 65 64 2e 20 54 68 65  E is issued. The
9e10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
9e20: 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20  ment normalizes 
9e30: 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  this.        ** 
9e40: 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74  behavior so that
9e50: 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72   all architectur
9e60: 65 73 20 62 65 68 61 76 65 20 61 73 20 69 66 20  es behave as if 
9e70: 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20 20  integer .       
9e80: 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63   ** overflow occ
9e90: 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a  urred..        *
9ea0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
9eb0: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
9ec0: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20  LEST_INT64 ) iA 
9ed0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
9ee0: 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  /= iA;.        b
9ef0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
9f00: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
9f10: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9f20: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9f30: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9f40: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9f50: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
9f60: 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41          iB %= iA
9f70: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9f80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9f90: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
9fa0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
9fb0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9fc0: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Int);.  }else{. 
9fd0: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56     rA = sqlite3V
9fe0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
9ff0: 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c  1);.    rB = sql
a000: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
a010: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
a020: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
a030: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
a040: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72  P_Add:         r
a050: 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B += rA;       b
a060: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a070: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
a080: 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20   rB -= rA;      
a090: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a0a0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
a0b0: 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20     rB *= rA;    
a0c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a0d0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
a0e0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
a0f0: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
a100: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
a110: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
a120: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  */.        if( r
a130: 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67  A==(double)0 ) g
a140: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a150: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a160: 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b         rB /= rA;
a170: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a180: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
a190: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
a1a0: 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20   iA = (i64)rA;. 
a1b0: 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34         iB = (i64
a1c0: 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )rB;.        if(
a1d0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
a1e0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a1f0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
a200: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
a210: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42   = 1;.        rB
a220: 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25   = (double)(iB %
a230: 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72   iA);.        br
a240: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a250: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
a260: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
a270: 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75  OINT.    pOut->u
a280: 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .i = rB;.    Mem
a290: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
a2a0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73  , MEM_Int);.#els
a2b0: 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  e.    if( sqlite
a2c0: 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20  3IsNaN(rB) ){.  
a2d0: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
a2e0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a2f0: 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  ll;.    }.    pO
a300: 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ut->r = rB;.    
a310: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
a320: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
a330: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26      if( (flags &
a340: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
a350: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a360: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
a370: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
a380: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
a390: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
a3a0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
a3b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a3c0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a3d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a3e0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a  ode: CollSeq * *
a3f0: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
a400: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
a410: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
a420: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
a430: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
a440: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
a450: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
a460: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
a470: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
a480: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
a490: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
a4a0: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
a4b0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
a4c0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
a4d0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
a4e0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  ns..**.** The in
a4f0: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
a500: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
a510: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
a520: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
a530: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
a540: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
a550: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
a560: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
a570: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
a580: 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74  publicly, only t
a590: 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73  o user functions
a5a0: 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63   defined in func
a5b0: 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  .c..*/.case OP_C
a5c0: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
a5d0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
a5e0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
a5f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a600: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
a610: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
a620: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
a630: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
a640: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
a650: 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74   Function struct
a660: 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ure that.** defi
a670: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
a680: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
a690: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
a6a0: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
a6b0: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
a6c0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
a6d0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
a6e0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
a6f0: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
a700: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
a710: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
a720: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
a730: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
a740: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
a750: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
a760: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
a770: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
a780: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
a790: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
a7a0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
a7b0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
a7c0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
a7d0: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
a7e0: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
a7f0: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
a800: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
a810: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
a820: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a830: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a840: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
a850: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
a860: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
a870: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
a880: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
a890: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
a8a0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
a8b0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
a8c0: 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64  lso: AggStep and
a8d0: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73   AggFinal.*/.cas
a8e0: 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b  e OP_Function: {
a8f0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
a900: 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  *pArg;.  sqlite3
a910: 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
a920: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
a930: 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a  apVal;.  int n;.
a940: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
a950: 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
a960: 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
a970: 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a  Val || n==0 );..
a980: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
a990: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
a9a0: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
a9b0: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
a9c0: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
a9d0: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
a9e0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
a9f0: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
aa00: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
aa10: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
aa20: 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  ){.    apVal[i] 
aa30: 3d 20 70 41 72 67 3b 0a 20 20 20 20 73 71 6c 69  = pArg;.    sqli
aa40: 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
aa50: 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52  ype(pArg);.    R
aa60: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
aa70: 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a 20 20  p->p2, pArg);.  
aa80: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
aa90: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
aaa0: 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  CDEF || pOp->p4t
aab0: 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43  ype==P4_VDBEFUNC
aac0: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
aad0: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
aae0: 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75  F ){.    ctx.pFu
aaf0: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
ab00: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  nc;.    ctx.pVdb
ab10: 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c  eFunc = 0;.  }el
ab20: 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  se{.    ctx.pVdb
ab30: 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e  eFunc = (VdbeFun
ab40: 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65  c*)pOp->p4.pVdbe
ab50: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46  Func;.    ctx.pF
ab60: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
ab70: 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a  unc->pFunc;.  }.
ab80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ab90: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
aba0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
abb0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
abc0: 70 33 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  p3];.  ctx.s.fla
abd0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
abe0: 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a   ctx.s.db = db;.
abf0: 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
ac00: 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
ac10: 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65  c = 0;..  /* The
ac20: 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
ac30: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
ac40: 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
ac50: 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
ac60: 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73  pointer to ctx.s
ac70: 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
ac80: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61  user-function ca
ac90: 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61  n use.  ** the a
aca0: 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
acb0: 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
acc0: 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
acd0: 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
ace0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
acf0: 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29  ve(&ctx.s, pOut)
ad00: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
ad10: 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e  ag(&ctx.s, MEM_N
ad20: 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45  ull);..  ctx.isE
ad30: 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20  rror = 0;.  if( 
ad40: 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73  ctx.pFunc->flags
ad50: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
ad60: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
ad70: 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
ad80: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
ad90: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
ada0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
adb0: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
adc0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
add0: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
ade0: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
adf0: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66  .pColl;.  }.  if
ae00: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
ae10: 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
ae20: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
ae30: 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63  e;.  (*ctx.pFunc
ae40: 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e  ->xFunc)(&ctx, n
ae50: 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28 20  , apVal);.  if( 
ae60: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
ae70: 64 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  db) ){.    sqlit
ae80: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
ae90: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
aea0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
aeb0: 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66  misuse;.  }.  if
aec0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
aed0: 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65  ed ){.    /* Eve
aee0: 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f  n though a mallo
aef0: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
af00: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
af10: 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  on of the.    **
af20: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d   user function m
af30: 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61  ay have called a
af40: 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  n sqlite3_result
af50: 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a  _XXX() function.
af60: 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e      ** to return
af70: 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f   a value. The fo
af80: 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c  llowing call rel
af90: 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72  eases any resour
afa0: 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  ces.    ** assoc
afb0: 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20  iated with such 
afc0: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a  a value..    **.
afd0: 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79      ** Note: May
afe0: 62 65 20 4d 65 6d 52 65 6c 65 61 73 65 28 29 20  be MemRelease() 
aff0: 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64  should be called
b000: 20 69 66 20 73 71 6c 69 74 65 33 53 61 66 65 74   if sqlite3Safet
b010: 79 4f 6e 28 29 0a 20 20 20 20 2a 2a 20 66 61 69  yOn().    ** fai
b020: 6c 73 20 61 6c 73 6f 20 28 74 68 65 20 69 66 28  ls also (the if(
b030: 2e 2e 2e 29 20 73 74 61 74 65 6d 65 6e 74 20 61  ...) statement a
b040: 62 6f 76 65 29 2e 20 42 75 74 20 69 66 20 70 65  bove). But if pe
b050: 6f 70 6c 65 20 61 72 65 0a 20 20 20 20 2a 2a 20  ople are.    ** 
b060: 6d 69 73 75 73 69 6e 67 20 73 71 6c 69 74 65 2c  misusing sqlite,
b070: 20 74 68 65 79 20 68 61 76 65 20 62 69 67 67 65   they have bigge
b080: 72 20 70 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20  r problems than 
b090: 61 20 6c 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a  a leaked value..
b0a0: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
b0b0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
b0c0: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
b0d0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
b0e0: 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69    /* If any auxi
b0f0: 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74  liary data funct
b100: 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63  ions have been c
b110: 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73  alled by this us
b120: 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a  er function,.  *
b130: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61  * immediately ca
b140: 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  ll the destructo
b150: 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74  r for any non-st
b160: 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a  atic values..  *
b170: 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62  /.  if( ctx.pVdb
b180: 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c  eFunc ){.    sql
b190: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
b1a0: 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46  xData(ctx.pVdbeF
b1b0: 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  unc, pOp->p1);. 
b1c0: 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65     pOp->p4.pVdbe
b1d0: 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65  Func = ctx.pVdbe
b1e0: 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  Func;.    pOp->p
b1f0: 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46  4type = P4_VDBEF
b200: 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  UNC;.  }..  /* I
b210: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
b220: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
b230: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
b240: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
b250: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
b260: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
b270: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
b280: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
b290: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
b2a0: 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
b2b0: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
b2c0: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
b2d0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b2e0: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
b2f0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
b300: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
b310: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
b320: 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
b330: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
b340: 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69  ut, &ctx.s);.  i
b350: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
b360: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
b370: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
b380: 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45  g;.  }.  REGISTE
b390: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
b3a0: 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
b3b0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b3c0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b3d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
b3e0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
b3f0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b400: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
b410: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
b420: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
b430: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
b440: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b450: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b460: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b470: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b480: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b490: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
b4a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b4b0: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b4c0: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
b4d0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b4e0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b4f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b500: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b510: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b520: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b530: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b540: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b550: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
b560: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
b570: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b580: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b590: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
b5a0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b5b0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b5c0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b5d0: 69 6e 20 72 65 67 69 73 65 72 20 50 31 2e 0a 2a  in regiser P1..*
b5e0: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
b5f0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b600: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b610: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b620: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b630: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b640: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
b650: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
b660: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
b670: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b680: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
b690: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
b6a0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
b6b0: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
b6c0: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
b6d0: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
b6e0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b6f0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b700: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b710: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b720: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b730: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
b740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b750: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
b760: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b770: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
b780: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
b790: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b7a0: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
b7b0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b7c0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
b7d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b7e0: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
b7f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b800: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
b810: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
b820: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b830: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
b840: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
b850: 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20   a;.  i64 b;..  
b860: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b870: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b880: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b890: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b8a0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
b8b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b8c0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b8d0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b8e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b8f0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b900: 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73  eak;.  }.  a = s
b910: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
b920: 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20  ue(pIn2);.  b = 
b930: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
b940: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73 77 69  lue(pIn1);.  swi
b950: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
b960: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
b970: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61 20 26  BitAnd:      a &
b980: 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  = b;     break;.
b990: 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 4f      case OP_BitO
b9a0: 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20 62 3b  r:       a |= b;
b9b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b9c0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
b9d0: 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20  t:   a <<= b;   
b9e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
b9f0: 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20 70 4f  ult:  assert( pO
ba00: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68  p->opcode==OP_Sh
ba10: 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20 20 20  iftRight );.    
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba30: 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20       a >>= b;   
ba40: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f   break;.  }.  pO
ba50: 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d  ut->u.i = a;.  M
ba60: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
ba70: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
ba80: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ba90: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
baa0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
bab0: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
bac0: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
bad0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
bae0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
baf0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
bb00: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
bb10: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
bb20: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
bb30: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
bb40: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
bb50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
bb60: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
bb70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bb80: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
bb90: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
bba0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
bbb0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
bbc0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
bbd0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
bbe0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
bbf0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
bc00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bc10: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
bc20: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
bc30: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
bc40: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
bc50: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
bc60: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
bc70: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
bc80: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
bc90: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
bca0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
bcb0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
bcc0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
bcd0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
bce0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
bcf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
bd00: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
bd10: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bd20: 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  1];.  applyAffin
bd30: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
bd40: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
bd50: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
bd60: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
bd70: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
bd80: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
bd90: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
bda0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
bdb0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
bdc0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
bdd0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
bde0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
bdf0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
be00: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
be10: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
be20: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
be30: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
be40: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
be50: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
be60: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
be70: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
be80: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
be90: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
bea0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
beb0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
bec0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
bed0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
bee0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
bef0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
bf00: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
bf10: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
bf20: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
bf30: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
bf40: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
bf50: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
bf60: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
bf70: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
bf80: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
bf90: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
bfa0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
bfb0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
bfc0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
bfd0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
bfe0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bff0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c000: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c010: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
c020: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
c030: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c040: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
c050: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c060: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
c070: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
c080: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c090: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c0a0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
c0b0: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
c0c0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c0d0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c0e0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
c0f0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c100: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
c110: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
c120: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
c130: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
c140: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
c150: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
c160: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c170: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c180: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c190: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c1a0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
c1b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c1c0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c1d0: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
c1e0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c1f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
c200: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c210: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
c220: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
c230: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
c240: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
c250: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
c260: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
c270: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
c280: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c290: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c2a0: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
c2b0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
c2c0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
c2d0: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
c2e0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
c2f0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
c300: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
c310: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
c320: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
c330: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c340: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c350: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c360: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
c370: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c380: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c390: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
c3a0: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
c3b0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
c3c0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c3d0: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
c3e0: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
c3f0: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
c400: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
c410: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
c420: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
c430: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
c440: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c450: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c460: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c470: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c480: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c4b0: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
c4c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c4d0: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
c4e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c4f0: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
c500: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c510: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
c520: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
c530: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
c540: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
c550: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
c560: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
c570: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
c580: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
c590: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c5a0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
c5b0: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
c5c0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
c5d0: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
c5e0: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
c5f0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c600: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
c610: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c620: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
c630: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c640: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c650: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c660: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
c670: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
c680: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
c690: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
c6a0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
c6b0: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
c6c0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
c6d0: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
c6e0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
c6f0: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
c700: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
c710: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
c720: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
c730: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
c740: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c750: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c760: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c770: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c780: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
c790: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c7a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c7b0: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
c7c0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c7d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c7e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c7f0: 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   & (MEM_Null|MEM
c800: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
c810: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c820: 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79  3VdbeMemNumerify
c830: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
c840: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
c850: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
c860: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
c870: 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20   ToInt P1 * * * 
c880: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c890: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c8a0: 74 65 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74  ter P1 be an int
c8b0: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
c8c0: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c8d0: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
c8e0: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
c8f0: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
c900: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c910: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c920: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c930: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
c940: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
c950: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
c960: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c970: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c980: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c990: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c9a0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c9b0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c9c0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c9d0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c9e0: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
c9f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ca00: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
ca10: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
ca20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ca30: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ca40: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
ca50: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ca60: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
ca70: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
ca80: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66  eak;.}..#if !def
ca90: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
caa0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
cab0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
cac0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
cad0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c  * Opcode: ToReal
cae0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
caf0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
cb00: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
cb10: 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e   to be a floatin
cb20: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
cb30: 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20  ** If The value 
cb40: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20  is currently an 
cb50: 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74  integer, convert
cb60: 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76   it..** If the v
cb70: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
cb80: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
cb90: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
cba0: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
cbb0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
cbc0: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
cbd0: 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68  e 0.0 if no such
cbe0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
cbf0: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
cc00: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
cc10: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
cc20: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
cc30: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
cc40: 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a  .case OP_ToReal:
cc50: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
cc60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cc70: 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a  K_TO_REAL, in1 *
cc80: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
cc90: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
cca0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
ccb0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
ccc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
ccd0: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
cce0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
ccf0: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
cd00: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
cd10: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
cd20: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
cd30: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a  ATING_POINT) */.
cd40: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
cd50: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
cd60: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
cd70: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
cd80: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
cd90: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
cda0: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
cdb0: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
cdc0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
cdd0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
cde0: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
cdf0: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
ce00: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
ce10: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
ce20: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
ce30: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
ce40: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
ce50: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
ce60: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
ce70: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
ce80: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
ce90: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
cea0: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
ceb0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
cec0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
ced0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
cee0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
cef0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
cf00: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
cf10: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
cf20: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
cf30: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
cf40: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
cf50: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
cf60: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
cf70: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
cf80: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
cf90: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
cfa0: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
cfb0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
cfc0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
cfd0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
cfe0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
cff0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
d000: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
d010: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
d020: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
d030: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
d040: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
d050: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
d060: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
d070: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
d080: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
d090: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
d0a0: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
d0b0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
d0c0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
d0d0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
d0e0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
d0f0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
d100: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
d110: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
d120: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
d130: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
d140: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
d150: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
d160: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
d170: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
d180: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
d190: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
d1a0: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
d1b0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
d1c0: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
d1d0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
d1e0: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
d1f0: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
d200: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
d210: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
d220: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
d230: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
d240: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
d250: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
d260: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
d270: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
d280: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
d290: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
d2a0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
d2b0: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
d2c0: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
d2d0: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
d2e0: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
d2f0: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
d300: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
d310: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
d320: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
d330: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
d340: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d350: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d360: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d370: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d380: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d390: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
d3a0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
d3b0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
d3c0: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
d3d0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d3e0: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
d3f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
d400: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
d410: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
d420: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
d430: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
d440: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
d450: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
d460: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
d470: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
d480: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
d490: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
d4a0: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
d4b0: 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65   is false.  If e
d4c0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d4d0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
d4e0: 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a  esult is true..*
d4f0: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
d500: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d510: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
d520: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
d530: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
d540: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
d550: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
d560: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
d570: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
d580: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d590: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d5a0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d5b0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d5c0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d5d0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
d5e0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
d5f0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
d600: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
d610: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d620: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d630: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
d640: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
d650: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
d660: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
d670: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
d680: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
d690: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
d6a0: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
d6b0: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
d6c0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
d6d0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
d6e0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
d6f0: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
d700: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
d710: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
d720: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
d730: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
d740: 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65   NULL the the re
d750: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
d760: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
d770: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
d780: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
d790: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
d7a0: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
d7b0: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
d7c0: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d7d0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d7e0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d7f0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d800: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d810: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
d820: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
d830: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
d840: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
d850: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d860: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d870: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d880: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d890: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d8a0: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
d8b0: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d8c0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d8d0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d8e0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d8f0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d900: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
d910: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
d920: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
d930: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
d940: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
d950: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
d960: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d970: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
d980: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
d990: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
d9a0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
d9b0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
d9c0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
d9d0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
d9e0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
d9f0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
da00: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
da10: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
da20: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
da30: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
da40: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
da50: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
da60: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
da70: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
da80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
da90: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
daa0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
dab0: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
dac0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dad0: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
dae0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
daf0: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
db00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
db10: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
db20: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
db30: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
db40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
db50: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
db60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
db80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
db90: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
dba0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dbc0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
dbd0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
dbe0: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
dbf0: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
dc00: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
dc10: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
dc20: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
dc30: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
dc40: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
dc50: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
dc60: 6f 6e 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  on */..  pIn1 = 
dc70: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
dc80: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
dc90: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
dca0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
dcb0: 6e 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d 5f 4e  n3->flags)&MEM_N
dcc0: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
dcd0: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
dce0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
dcf0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
dd00: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
dd10: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
dd20: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
dd30: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
dd40: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
dd50: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
dd60: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
dd70: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
dd80: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
dd90: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
dda0: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
ddb0: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
ddc0: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
ddd0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
dde0: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
ddf0: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
de00: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
de10: 0a 20 20 20 20 20 20 72 65 73 20 3d 20 28 70 49  .      res = (pI
de20: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33  n1->flags & pIn3
de30: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
de40: 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73  ll)==0;.    }els
de50: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
de60: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
de70: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
de80: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
de90: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
dea0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
deb0: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
dec0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
ded0: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
dee0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
def0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
df00: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
df10: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
df20: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
df30: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
df40: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
df50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
df60: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
df70: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
df80: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
df90: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
dfa0: 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
dfb0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
dfc0: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
dfd0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
dfe0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
dff0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
e000: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
e010: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e020: 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
e030: 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
e040: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
e050: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
e060: 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
e070: 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
e080: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
e090: 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  1, affinity, enc
e0a0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70  oding);.      ap
e0b0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
e0c0: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
e0d0: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28  ding);.      if(
e0e0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
e0f0: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
e100: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
e110: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
e120: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
e130: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
e140: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
e150: 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70  b(pIn1);.    Exp
e160: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
e170: 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
e180: 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
e190: 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
e1a0: 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
e1b0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
e1c0: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
e1d0: 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
e1e0: 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
e1f0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
e200: 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
e210: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e220: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
e230: 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
e240: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e250: 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
e260: 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
e270: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e280: 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
e290: 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
e2a0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
e2b0: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
e2c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
e2d0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
e2e0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e2f0: 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
e300: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
e310: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e320: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
e330: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
e340: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
e350: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
e360: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
e370: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
e380: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
e390: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
e3a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
e3b0: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
e3c0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
e3d0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
e3e0: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
e3f0: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
e400: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
e410: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
e420: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
e430: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
e440: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
e450: 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  next OP_Permutat
e460: 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c  ion, OP_Compare,
e470: 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20  .** OP_Halt, or 
e480: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54  OP_ResultRow.  T
e490: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
e4a0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
e4b0: 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65  ld occur.** imme
e4c0: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
e4d0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
e4e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
e4f0: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
e500: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
e510: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
e520: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
e530: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
e540: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
e550: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e560: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
e570: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
e580: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20  *.** Compare to 
e590: 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73  vectors of regis
e5a0: 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e  ters in reg(P1).
e5b0: 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61  .reg(P1+P3-1) (a
e5c0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22  ll this.** one "
e5d0: 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50  A") and in reg(P
e5e0: 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29  2)..reg(P2+P3-1)
e5f0: 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68   ("B").  Save th
e600: 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
e610: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f  he comparison fo
e620: 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78  r use by the nex
e630: 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75  t OP_Jump instru
e640: 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ct..**.** P4 is 
e650: 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
e660: 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
e670: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
e680: 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
e690: 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
e6a0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
e6b0: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
e6c0: 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
e6d0: 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
e6e0: 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
e6f0: 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
e700: 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
e710: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
e720: 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
e730: 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
e740: 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
e750: 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
e760: 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
e770: 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
e780: 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
e790: 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
e7a0: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
e7b0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
e7c0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
e7d0: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
e7e0: 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
e7f0: 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
e800: 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
e810: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
e820: 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
e830: 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
e840: 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
e850: 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
e860: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
e870: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
e880: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e  rt order */..  n
e890: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b   = pOp->p3;.  pK
e8a0: 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
e8b0: 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
e8c0: 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73  ert( n>0 );.  as
e8d0: 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d  sert( pKeyInfo!=
e8e0: 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  0 );.  p1 = pOp-
e8f0: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
e900: 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  >p2;.#if SQLITE_
e910: 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72  DEBUG.  if( aPer
e920: 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  mute ){.    int 
e930: 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66  k, mx = 0;.    f
e940: 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b  or(k=0; k<n; k++
e950: 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b  ) if( aPermute[k
e960: 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72  ]>mx ) mx = aPer
e970: 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73  mute[k];.    ass
e980: 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
e990: 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  mx<=p->nMem+1 );
e9a0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
e9b0: 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e  0 && p2+mx<=p->n
e9c0: 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65  Mem+1 );.  }else
e9d0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31  {.    assert( p1
e9e0: 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e  >0 && p1+n<=p->n
e9f0: 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  Mem+1 );.    ass
ea00: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
ea10: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
ea20: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
ea30: 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
ea40: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
ea50: 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
ea60: 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
ea70: 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45  e[i] : i;.    RE
ea80: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
ea90: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
eaa0: 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
eab0: 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
eac0: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
ead0: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
eae0: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
eaf0: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
eb00: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
eb10: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
eb20: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
eb30: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
eb40: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
eb50: 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
eb60: 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
eb70: 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
eb80: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
eb90: 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
eba0: 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
ebb0: 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
ebc0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
ebd0: 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
ebe0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ebf0: 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
ec00: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
ec10: 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
ec20: 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
ec30: 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
ec40: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
ec50: 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
ec60: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
ec70: 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
ec80: 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
ec90: 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
eca0: 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
ecb0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
ecc0: 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
ecd0: 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
ece0: 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
ecf0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
ed00: 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
ed10: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
ed20: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p1 - 1;.  }el
ed30: 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
ed40: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
ed50: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
ed60: 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
ed70: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p3 - 1;.  }. 
ed80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ed90: 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
eda0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
edb0: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
edc0: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
edd0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
ede0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
edf0: 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
ee00: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
ee10: 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
ee20: 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
ee30: 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
ee40: 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
ee50: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
ee60: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
ee70: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
ee80: 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
ee90: 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
eea0: 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
eeb0: 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
eec0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
eed0: 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
eee0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
eef0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
ef00: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
ef10: 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
ef20: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
ef30: 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
ef40: 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
ef50: 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
ef60: 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
ef70: 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
ef80: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
ef90: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
efa0: 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
efb0: 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
efc0: 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
efd0: 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
efe0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
eff0: 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
f000: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
f010: 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
f020: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f030: 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
f040: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
f050: 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
f060: 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
f070: 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
f080: 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
f090: 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
f0a0: 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
f0b0: 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
f0c0: 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
f0d0: 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e  r NULL */..  pIn
f0e0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f0f0: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
f100: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f110: 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
f120: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
f130: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
f140: 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
f150: 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d    }.  pIn2 = &aM
f160: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
f170: 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  f( pIn2->flags &
f180: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
f190: 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v2 = 2;.  }else
f1a0: 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74  {.    v2 = sqlit
f1b0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
f1c0: 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69  In2)!=0;.  }.  i
f1d0: 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
f1e0: 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74  OP_And ){.    st
f1f0: 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
f200: 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67  ned char and_log
f210: 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30  ic[] = { 0, 0, 0
f220: 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c  , 0, 1, 2, 0, 2,
f230: 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61   2 };.    v1 = a
f240: 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  nd_logic[v1*3+v2
f250: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
f260: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
f270: 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f  igned char or_lo
f280: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20  gic[] = { 0, 1, 
f290: 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31  2, 1, 1, 1, 2, 1
f2a0: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
f2b0: 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  or_logic[v1*3+v2
f2c0: 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  ];.  }.  pOut = 
f2d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
f2e0: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
f2f0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
f300: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
f310: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f320: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
f330: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f340: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
f350: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f360: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
f370: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
f380: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
f390: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f3a0: 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
f3b0: 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
f3c0: 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
f3d0: 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
f3e0: 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
f3f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
f400: 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
f410: 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
f420: 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
f430: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
f440: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
f450: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f460: 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
f470: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
f480: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
f490: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
f4a0: 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
f4b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f4c0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
f4d0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
f4e0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f4f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f500: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
f510: 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
f520: 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
f530: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
f540: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
f550: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f560: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f570: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f580: 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
f590: 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
f5a0: 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
f5b0: 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
f5c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
f5d0: 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
f5e0: 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
f5f0: 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
f600: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
f610: 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
f620: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f630: 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
f640: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
f650: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
f660: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
f670: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
f680: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
f690: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f6a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
f6b0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
f6c0: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
f6d0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
f6e0: 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
f6f0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
f700: 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
f710: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
f720: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
f730: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
f740: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
f750: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
f760: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
f770: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
f780: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
f790: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
f7a0: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
f7b0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
f7c0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
f7d0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
f7e0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
f7f0: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
f800: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f810: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
f820: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f830: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
f840: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
f850: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
f860: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
f870: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
f880: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
f890: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
f8a0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
f8b0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
f8c0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
f8d0: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
f8e0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
f8f0: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
f900: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
f910: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
f920: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
f930: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f940: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
f950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f960: 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
f970: 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
f980: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
f990: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
f9a0: 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
f9b0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
f9c0: 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
f9d0: 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
f9e0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
f9f0: 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
fa00: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
fa10: 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
fa20: 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20  = !c;.  }.  if( 
fa30: 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  c ){.    pc = pO
fa40: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
fa50: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fa60: 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
fa70: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
fa80: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
fa90: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
faa0: 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
fab0: 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
fac0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
fad0: 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
fae0: 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
faf0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
fb00: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
fb10: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
fb20: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
fb30: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
fb40: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
fb50: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
fb60: 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
fb70: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
fb80: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
fb90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
fba0: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
fbb0: 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
fbc0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
fbd0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
fbe0: 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
fbf0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
fc00: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
fc10: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
fc20: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
fc30: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
fc40: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
fc50: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
fc60: 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
fc70: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49  P3 P4 P5.**.** I
fc80: 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
fc90: 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
fca0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
fcb0: 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
fcc0: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
fcd0: 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
fce0: 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
fcf0: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
fd00: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
fd10: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
fd20: 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
fd30: 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
fd40: 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
fd50: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
fd60: 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
fd70: 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
fd80: 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
fd90: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
fda0: 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
fdb0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
fdc0: 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
fdd0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
fde0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
fdf0: 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
fe00: 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
fe10: 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
fe20: 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
fe30: 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
fe40: 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
fe50: 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
fe60: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
fe70: 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
fe80: 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
fe90: 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
fea0: 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
feb0: 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
fec0: 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
fed0: 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
fee0: 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
fef0: 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
ff00: 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
ff10: 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
ff20: 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
ff30: 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
ff40: 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
ff50: 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
ff60: 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
ff70: 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
ff80: 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
ff90: 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
ffa0: 73 65 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  set..*/.case OP_
ffb0: 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20  Column: {.  u32 
ffc0: 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f  payloadSize;   /
ffd0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
ffe0: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
fff0: 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64  */.  i64 payload
10000 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
10010 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
10020 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
10030 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
10040 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20   /* P1 value of 
10050 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  the opcode */.  
10060 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
10070 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
10080 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
10090 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
100a0 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
100b0 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
100c0 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20  char *zRec;     
100d0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
100e0 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
100f0 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72  -data */.  BtCur
10100 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
10110 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
10120 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70  r */.  u32 *aTyp
10130 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79  e;        /* aTy
10140 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20  pe[i] holds the 
10150 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  numeric type of 
10160 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  the i-th column 
10170 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
10180 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
10190 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
101a0 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
101b0 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
101c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
101d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62  ;        /* numb
101e0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
101f0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
10200 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
10210 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
10220 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
10230 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
10240 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
10250 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
10260 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
10270 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b  /.  char *zData;
10280 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f         /* Part o
10290 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
102a0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
102b0 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20  Mem *pDest;     
102c0 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
102d0 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74  rite the extract
102e0 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  ed value */.  Me
102f0 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
10300 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
10310 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10320 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   decoded */.  u8
10330 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20   *zIdx;         
10340 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68   /* Index into h
10350 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a  eader */.  u8 *z
10360 45 6e 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a  EndHdr;       /*
10370 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
10380 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
10390 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
103a0 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
103b0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
103c0 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34  he data */.  u64
103d0 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20   offset64;      
103e0 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74  /* 64-bit offset
103f0 2e 20 20 36 34 20 62 69 74 73 20 6e 65 65 64 65  .  64 bits neede
10400 64 20 74 6f 20 63 61 74 63 68 20 6f 76 65 72 66  d to catch overf
10410 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48  low */.  int szH
10420 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  dr;         /* S
10430 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
10440 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20  r size field at 
10450 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20  start of record 
10460 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20  */.  int avail; 
10470 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10480 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76  r of bytes of av
10490 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a  ailable data */.
104a0 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
104b0 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
104c0 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
104d0 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70  er */...  p1 = p
104e0 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
104f0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30  Op->p2;.  pC = 0
10500 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ;.  memset(&sMem
10510 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
10520 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  ));.  assert( p1
10530 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
10540 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
10550 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
10560 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
10570 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10580 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  3];.  MemSetType
10590 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
105a0 4e 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20  Null);.  zRec = 
105b0 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  0;..  /* This bl
105c0 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
105d0 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
105e0 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
105f0 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
10600 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
10610 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
10620 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
10630 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
10640 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
10650 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
10660 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
10670 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
10680 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
10690 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
106a0 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
106b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
106c0 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
106d0 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
106e0 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
106f0 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
10700 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
10710 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
10720 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
10730 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
10740 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
10750 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
10760 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
10770 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
10780 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
10790 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
107a0 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
107b0 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
107c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
107d0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
107e0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
107f0 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
10800 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
10810 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
10820 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
10830 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10840 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
10850 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
10860 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
10870 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
10880 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
10890 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
108a0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
108b0 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72  stored in a B-Tr
108c0 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  ee */.    rc = s
108d0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
108e0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
108f0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
10900 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
10910 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
10920 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
10930 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
10940 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
10950 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
10960 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
10970 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10980 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
10990 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20  e;.      zRec = 
109a0 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b  (char*)pC->aRow;
109b0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
109c0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
109d0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
109e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
109f0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
10a00 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
10a10 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
10a20 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
10a30 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73  ze64);.      ass
10a40 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
10a50 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20  OK );   /* True 
10a60 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
10a70 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
10a80 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  bove */.      /*
10a90 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
10aa0 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
10ab0 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
10ac0 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
10ad0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
10ae0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
10af0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
10b00 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
10b10 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72  .      ** larger
10b20 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
10b30 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10b40 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
10b50 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
10b60 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
10b70 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61  ze64 );.      pa
10b80 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
10b90 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
10ba0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10bb0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
10bc0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
10bd0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
10be0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
10bf0 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
10c00 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
10c10 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
10c20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10c30 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
10c40 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
10c50 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
10c60 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  f( pC->pseudoTab
10c70 6c 65 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70  leReg>0 ){.    p
10c80 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
10c90 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
10ca0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65  .    assert( pRe
10cb0 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
10cc0 6c 6f 62 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f  lob );.    paylo
10cd0 61 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e  adSize = pReg->n
10ce0 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65  ;.    zRec = pRe
10cf0 67 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61  g->z;.    pC->ca
10d00 63 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70  cheStatus = (pOp
10d10 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41  ->p5&OPFLAG_CLEA
10d20 52 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f  RCACHE) ? CACHE_
10d30 53 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65  STALE : p->cache
10d40 43 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Ctr;.    assert(
10d50 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
10d60 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20  || zRec!=0 );.  
10d70 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f  }else{.    /* Co
10d80 6e 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74  nsider the row t
10d90 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  o be NULL */.   
10da0 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
10db0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
10dc0 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
10dd0 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
10de0 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28   a NULL */.  if(
10df0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
10e00 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
10e10 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
10e20 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  Null );.    goto
10e30 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
10e40 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62    }.  assert( db
10e50 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
10e60 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30  LIMIT_LENGTH]>=0
10e70 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61   );.  if( payloa
10e80 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
10e90 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10ea0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
10eb0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
10ec0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
10ed0 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  = pC->nField;.  
10ee0 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c  assert( p2<nFiel
10ef0 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20  d );..  /* Read 
10f00 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61  and parse the ta
10f10 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f  ble header.  Sto
10f20 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
10f30 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a  f the parse.  **
10f40 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
10f50 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69   header cache fi
10f60 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73  elds of the curs
10f70 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65  or..  */.  aType
10f80 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20   = pC->aType;.  
10f90 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
10fa0 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus==p->cacheCtr
10fb0 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20   ){.    aOffset 
10fc0 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
10fd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10fe0 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61  rt(aType);.    a
10ff0 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43  vail = 0;.    pC
11000 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66  ->aOffset = aOff
11010 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69  set = &aType[nFi
11020 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61  eld];.    pC->pa
11030 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c  yloadSize = payl
11040 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d  oadSize;.    pC-
11050 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
11060 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20  ->cacheCtr;..   
11070 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68   /* Figure out h
11080 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72  ow many bytes ar
11090 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  e in the header 
110a0 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  */.    if( zRec 
110b0 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  ){.      zData =
110c0 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65   zRec;.    }else
110d0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  {.      if( pC->
110e0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
110f0 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
11100 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  *)sqlite3BtreeKe
11110 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
11120 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c  vail);.      }el
11130 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
11140 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  a = (char*)sqlit
11150 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
11160 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
11170 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
11180 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f  * If KeyFetch()/
11190 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61  DataFetch() mana
111a0 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65  ged to get the e
111b0 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20  ntire payload,. 
111c0 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65       ** save the
111d0 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20   payload in the 
111e0 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
111f0 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20   That will save 
11200 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a  us from.      **
11210 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20   having to make 
11220 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73  additional calls
11230 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f   to fetch the co
11240 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66  ntent portion of
11250 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65  .      ** the re
11260 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  cord..      */. 
11270 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
11280 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  il>=0 );.      i
11290 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c  f( payloadSize <
112a0 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a  = (u32)avail ){.
112b0 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a          zRec = z
112c0 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43  Data;.        pC
112d0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44  ->aRow = (u8*)zD
112e0 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ata;.      }else
112f0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  {.        pC->aR
11300 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ow = 0;.      }.
11310 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65      }.    /* The
11320 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
11330 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c  t is true in all
11340 20 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68   cases accept wh
11350 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61  en.    ** the da
11360 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
11370 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65  been corrupted e
11380 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a  xternally..    *
11390 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65  *    assert( zRe
113a0 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70  c!=0 || avail>=p
113b0 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76  ayloadSize || av
113c0 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20  ail>=9 ); */.   
113d0 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69   szHdr = getVari
113e0 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c  nt32((u8*)zData,
113f0 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f   offset);..    /
11400 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
11410 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
11420 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
11430 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
11440 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
11450 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
11460 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
11470 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
11480 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
11490 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
114a0 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
114b0 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
114c0 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
114d0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
114e0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
114f0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
11500 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
11510 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
11520 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
11530 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
11540 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
11550 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
11560 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
11570 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
11580 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
11590 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
115a0 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
115b0 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
115c0 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
115d0 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
115e0 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
115f0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
11600 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a  fset > 98307 ){.
11610 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
11620 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
11630 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11640 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
11650 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20  .    /* Compute 
11660 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65  in len the numbe
11670 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
11680 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65  ta we need to re
11690 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20  ad in order.    
116a0 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64  ** to get nField
116b0 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f   type values.  o
116c0 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65  ffset is an uppe
116d0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e  r bound on this.
116e0 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69    But.    ** nFi
116f0 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67  eld might be sig
11700 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20  nificantly less 
11710 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75  than the true nu
11720 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
11730 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61      ** in the ta
11740 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74  ble, and in that
11750 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b   case, 5*nField+
11760 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c  3 might be small
11770 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a  er than offset..
11780 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74      ** We want t
11790 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69  o minimize len i
117a0 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74  n order to limit
117b0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
117c0 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61   memory.    ** a
117d0 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63  llocation, espec
117e0 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75  ially if a corru
117f0 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
11800 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73   has caused offs
11810 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  et.    ** to be 
11820 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65  oversized. Offse
11830 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  t is limited to 
11840 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75  98307 above.  Bu
11850 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20  t 98307 might.  
11860 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65    ** still excee
11870 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  d Robson memory 
11880 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11890 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67  s on some config
118a0 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a  urations..    **
118b0 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74   On systems that
118c0 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65   cannot tolerate
118d0 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
118e0 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c  locations, nFiel
118f0 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c  d*5+3.    ** wil
11900 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68  l likely be much
11910 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e   smaller since n
11920 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c  Field will likel
11930 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20  y be less than. 
11940 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20     ** 20 or so. 
11950 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68   This insures th
11960 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  at Robson memory
11970 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
11980 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f  ts are.    ** no
11990 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20  t exceeded even 
119a0 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61  for corrupt data
119b0 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20  base files..    
119c0 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69  */.    len = nFi
119d0 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69  eld*5 + 3;.    i
119e0 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66  f( len > (int)of
119f0 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e  fset ) len = (in
11a00 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  t)offset;..    /
11a10 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29  * The KeyFetch()
11a20 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20   or DataFetch() 
11a30 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61  above are fast a
11a40 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20  nd will get the 
11a50 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65  entire.    ** re
11a60 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d  cord header in m
11a70 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20  ost cases.  But 
11a80 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74  they will fail t
11a90 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65  o get the comple
11aa0 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  te.    ** record
11ab0 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72   header if the r
11ac0 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65  ecord header doe
11ad0 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73  s not fit on a s
11ae0 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a  ingle page.    *
11af0 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e  * in the B-Tree.
11b00 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
11b10 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33  ens, use sqlite3
11b20 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
11b30 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71  () to.    ** acq
11b40 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  uire the complet
11b50 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20  e header text.. 
11b60 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a     */.    if( !z
11b70 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e  Rec && avail<len
11b80 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
11b90 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
11ba0 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
11bb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
11bc0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11bd0 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70  pCrsr, 0, len, p
11be0 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
11bf0 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
11c00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
11c10 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
11c20 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
11c30 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
11c40 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20   sMem.z;.    }. 
11c50 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38     zEndHdr = (u8
11c60 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a   *)&zData[len];.
11c70 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a      zIdx = (u8 *
11c80 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a  )&zData[szHdr];.
11c90 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65  .    /* Scan the
11ca0 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20   header and use 
11cb0 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68  it to fill in th
11cc0 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f  e aType[] and aO
11cd0 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61  ffset[].    ** a
11ce0 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d  rrays.  aType[i]
11cf0 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
11d00 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66  e type integer f
11d10 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20  or the i-th.    
11d20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f  ** column and aO
11d30 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f  ffset[i] will co
11d40 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74  ntain the offset
11d50 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
11d60 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ing.    ** of th
11d70 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20  e record to the 
11d80 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74  start of the dat
11d90 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63  a for the i-th c
11da0 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20  olumn.    */.   
11db0 20 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73   offset64 = offs
11dc0 65 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  et;.    for(i=0;
11dd0 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
11de0 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
11df0 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
11e00 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
11e10 28 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20  (u32)offset64;. 
11e20 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67         zIdx += g
11e30 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
11e40 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20   aType[i]);.    
11e50 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
11e60 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
11e70 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69  lTypeLen(aType[i
11e80 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ]);.      }else{
11e90 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69  .        /* If i
11ea0 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46   is less that nF
11eb0 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ield, then there
11ec0 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73   are less fields
11ed0 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20   in this.       
11ee0 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20   ** record than 
11ef0 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e  SetNumColumns in
11f00 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72  dicated there ar
11f10 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
11f20 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
11f30 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65  e. Set the offse
11f40 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20  t for any extra 
11f50 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73  columns not pres
11f60 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a  ent in.        *
11f70 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  * the record to 
11f80 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f  0. This tells co
11f90 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72  de below to stor
11fa0 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  e a NULL.       
11fb0 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64   ** instead of d
11fc0 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76  eserializing a v
11fd0 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65  alue from the re
11fe0 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  cord..        */
11ff0 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
12000 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  [i] = 0;.      }
12010 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
12020 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
12030 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65  (&sMem);.    sMe
12040 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
12050 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77  ll;..    /* If w
12060 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65  e have read more
12070 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61   header data tha
12080 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20  n was contained 
12090 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20  in the header,. 
120a0 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20     ** or if the 
120b0 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
120c0 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
120d0 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64   be past the end
120e0 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72   of the.    ** r
120f0 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65  ecord, or if the
12100 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
12110 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
12120 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  o be before the 
12130 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  end.    ** of th
12140 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61  e record (when a
12150 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e  ll fields presen
12160 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74  t), then we must
12170 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20   be dealing .   
12180 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
12190 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
121a0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64   */.    if( (zId
121b0 78 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28  x > zEndHdr)|| (
121c0 6f 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f  offset64 > paylo
121d0 61 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20  adSize).     || 
121e0 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
121f0 26 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34  & offset64!=(u64
12200 29 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b  )payloadSize) ){
12210 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
12220 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
12230 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
12240 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
12250 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74  .  }..  /* Get t
12260 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d  he column inform
12270 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65  ation. If aOffse
12280 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72  t[p2] is non-zer
12290 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65  o, then .  ** de
122a0 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61  serialize the va
122b0 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
122c0 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b  ord. If aOffset[
122d0 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a  p2] is zero,.  *
122e0 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  * then there are
122f0 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c   not enough fiel
12300 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
12310 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a   to satisfy the.
12320 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49    ** request.  I
12330 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74  n this case, set
12340 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
12350 6f 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69  or to P4 if P4 i
12360 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72  s.  ** a pointer
12370 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74   to a Mem object
12380 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66  ..  */.  if( aOf
12390 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20  fset[p2] ){.    
123a0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
123b0 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28  TE_OK );.    if(
123c0 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73   zRec ){.      s
123d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
123e0 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65  easeExternal(pDe
123f0 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  st);.      sqlit
12400 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
12410 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66  (u8 *)&zRec[aOff
12420 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b  set[p2]], aType[
12430 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  p2], pDest);.   
12440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65   }else{.      le
12450 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
12460 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79  erialTypeLen(aTy
12470 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73  pe[p2]);.      s
12480 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
12490 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b  e(&sMem, pDest);
124a0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
124b0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
124c0 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
124d0 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d  et[p2], len, pC-
124e0 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
124f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
12500 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
12510 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12520 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
12530 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
12540 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  Mem.z;.      sql
12550 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
12560 74 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54  t((u8*)zData, aT
12570 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b  ype[p2], pDest);
12580 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74  .    }.    pDest
12590 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
125a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
125b0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
125c0 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
125d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
125e0 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
125f0 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
12600 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
12610 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
12620 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67  ert( pDest->flag
12630 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  s&MEM_Null );.  
12640 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66    }.  }..  /* If
12650 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
12660 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
12670 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
12680 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71   (in the.  ** sq
12690 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
126a0 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f  Btree() call abo
126b0 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65  ve) then transfe
126c0 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61  r control of tha
126d0 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c  t.  ** dynamical
126e0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
126f0 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70  ce over to the p
12700 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a  Dest structure..
12710 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e    ** This preven
12720 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79  ts a memory copy
12730 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65  ..  */.  if( sMe
12740 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20  m.zMalloc ){.   
12750 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d   assert( sMem.z=
12760 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b  =sMem.zMalloc );
12770 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70  .    assert( !(p
12780 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
12790 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73  M_Dyn) );.    as
127a0 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
127b0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
127c0 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44  |MEM_Str)) || pD
127d0 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29  est->z==sMem.z )
127e0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
127f0 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65  gs &= ~(MEM_Ephe
12800 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  m|MEM_Static);. 
12810 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
12820 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20  |= MEM_Term;.   
12830 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d   pDest->z = sMem
12840 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  .z;.    pDest->z
12850 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d  Malloc = sMem.zM
12860 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63  alloc;.  }..  rc
12870 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
12880 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
12890 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d  Dest);..op_colum
128a0 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f  n_out:.  UPDATE_
128b0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
128c0 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
128d0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
128e0 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
128f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
12900 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
12910 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  4 *.**.** Apply 
12920 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
12930 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
12940 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
12950 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
12960 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
12970 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
12980 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
12990 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
129a0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
129b0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
129c0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
129d0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
129e0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
129f0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
12a00 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
12a10 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
12a20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
12a30 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
12a40 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
12a50 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72  pplied */.  char
12a60 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20   cAff;          
12a70 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65       /* A single
12a80 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66   character of af
12a90 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66  finity */..  zAf
12aa0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
12ab0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
12ac0 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
12ad0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
12ae0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
12af0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
12b00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
12b10 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66  e( (cAff = *(zAf
12b20 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b  finity++))!=0 ){
12b30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
12b40 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  1 <= &p->aMem[p-
12b50 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 45 78  >nMem] );.    Ex
12b60 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
12b70 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
12b80 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e  y(pIn1, cAff, en
12b90 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e  coding);.    pIn
12ba0 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
12bb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12bc0 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
12bd0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
12be0 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
12bf0 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
12c00 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e  th P1 into a sin
12c10 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69  gle entry.** sui
12c20 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73  table for use as
12c30 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
12c40 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
12c50 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
12c60 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
12c70 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  The details of t
12c80 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72  he format are ir
12c90 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67  relevant as long
12ca0 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f   as.** the OP_Co
12cb0 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
12cc0 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
12cd0 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65  d later..** Refe
12ce0 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65  r to source code
12cf0 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68   comments for th
12d00 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
12d10 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61   record.** forma
12d20 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  t..**.** P4 may 
12d30 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
12d40 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
12d50 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
12d60 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
12d70 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
12d80 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
12d90 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
12da0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
12db0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
12dc0 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
12dd0 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
12de0 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
12df0 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
12e00 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
12e10 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
12e20 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
12e30 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
12e40 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
12e50 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
12e60 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
12e70 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
12e80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
12e90 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
12ea0 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
12eb0 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
12ec0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
12ed0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
12ee0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
12ef0 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
12f00 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
12f10 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
12f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12f30 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12f40 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
12f50 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
12f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12f70 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
12f80 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
12f90 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
12fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
12fb0 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
12fc0 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
12fd0 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ff0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
13000 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
13010 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
13020 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
13030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13040 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
13050 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
13060 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
13070 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
13080 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
13090 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
130a0 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
130b0 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
130c0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
130d0 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
130e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
130f0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
13100 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
13110 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
13120 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
13130 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
13140 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
13150 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
13160 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
13170 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
13180 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
13190 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
131a0 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
131b0 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
131c0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
131f0 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f   zNewRecord[] */
13200 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
13210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
13220 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
13230 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
13240 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
13250 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
13260 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
13270 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
13280 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
13290 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
132a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
132b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
132c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
132d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
132e0 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
132f0 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
13300 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
13310 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
13320 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
13330 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13340 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13350 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13370 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
13380 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
13390 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
133a0 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
133b0 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
133c0 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
133d0 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20  o froth..  **.  
133e0 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
133f0 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
13400 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
13410 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
13420 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
13430 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
13440 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
13450 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
13460 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
13470 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
13480 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
13490 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
134a0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
134b0 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
134c0 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
134d0 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
134e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
134f0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
13500 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
13510 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
13520 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13530 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
13540 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79 74 65  space */.  nByte
13550 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
13560 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
13570 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
13580 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20  cord */.  nZero 
13590 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
135a0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
135b0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
135c0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
135d0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
135e0 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79  >p1;.  zAffinity
135f0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
13600 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
13610 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26   && pOp->p2>0 &&
13620 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c   pOp->p2+nField<
13630 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
13640 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
13650 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
13660 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
13670 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
13680 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
13690 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
136a0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
136b0 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
136c0 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
136d0 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
136e0 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
136f0 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
13700 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
13710 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
13720 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
13730 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70   */.  for(pRec=p
13740 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61  Data0; pRec<=pLa
13750 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  st; pRec++){.   
13760 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
13770 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
13780 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
13790 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
137a0 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
137b0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65     }.    if( pRe
137c0 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72  c->flags&MEM_Zer
137d0 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29  o && pRec->n>0 )
137e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
137f0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
13800 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
13810 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
13820 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13830 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
13840 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
13850 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
13860 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
13870 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e  ial_type);.    n
13880 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
13890 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   nHdr += sqlite3
138a0 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
138b0 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20  _type);.    if( 
138c0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
138d0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
138e0 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72  /* Only pure zer
138f0 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63  o-filled BLOBs c
13900 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74  an be input to t
13910 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20  his Opcode..    
13920 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61    ** We do not a
13930 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20  llow blobs with 
13940 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a  a prefix and a z
13950 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e  ero-filled tail.
13960 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   */.      nZero 
13970 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
13980 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
13990 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65  len ){.      nZe
139a0 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ro = 0;.    }.  
139b0 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20  }..  /* Add the 
139c0 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76  initial header v
139d0 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20  arint and total 
139e0 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48  the size */.  nH
139f0 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20  dr += nVarint = 
13a00 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
13a10 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56  (nHdr);.  if( nV
13a20 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
13a30 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a  intLen(nHdr) ){.
13a40 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a      nHdr++;.  }.
13a50 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
13a60 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66  Data-nZero;.  if
13a70 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
13a80 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
13a90 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
13aa0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
13ab0 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
13ac0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
13ad0 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
13ae0 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
13af0 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
13b00 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
13b10 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
13b20 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
13b30 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
13b40 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
13b50 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
13b60 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
13b70 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
13b80 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
13b90 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20  MemGrow() could 
13ba0 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
13bb0 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
13bc0 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  sed)..  */.  ass
13bd0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
13be0 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
13bf0 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
13c00 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
13c10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
13c20 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
13c30 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
13c40 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20  )nByte, 0) ){.  
13c50 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
13c60 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20   }.  zNewRecord 
13c70 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b  = (u8 *)pOut->z;
13c80 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65  ..  /* Write the
13c90 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d   record */.  i =
13ca0 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65   putVarint32(zNe
13cb0 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a  wRecord, nHdr);.
13cc0 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
13cd0 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
13ce0 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72  pRec++){.    ser
13cf0 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
13d00 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13d10 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
13d20 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75  at);.    i += pu
13d30 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
13d40 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
13d50 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20  _type);      /* 
13d60 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
13d70 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44   }.  for(pRec=pD
13d80 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
13d90 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20  t; pRec++){  /* 
13da0 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20  serial data */. 
13db0 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56     i += sqlite3V
13dc0 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
13dd0 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e  ewRecord[i], (in
13de0 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65  t)(nByte-i), pRe
13df0 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  c,file_format);.
13e00 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d    }.  assert( i=
13e10 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
13e20 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
13e30 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
13e40 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  em );.  pOut->n 
13e50 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
13e60 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
13e70 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e  M_Blob | MEM_Dyn
13e80 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d  ;.  pOut->xDel =
13e90 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20   0;.  if( nZero 
13ea0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
13eb0 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
13ec0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
13ed0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
13ee0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
13ef0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
13f00 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
13f10 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
13f20 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
13f30 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
13f40 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
13f50 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
13f60 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
13f70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13f80 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
13f90 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
13fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
13fb0 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
13fc0 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
13fd0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
13fe0 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
13ff0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
14000 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
14010 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
14020 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
14030 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
14040 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
14050 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  se */.  i64 nEnt
14060 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
14070 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20  pCrsr;..  pCrsr 
14080 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
14090 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
140a0 69 66 28 20 70 43 72 73 72 20 29 7b 0a 20 20 20  if( pCrsr ){.   
140b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
140c0 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
140d0 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65  nEntry);.  }else
140e0 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30  {.    nEntry = 0
140f0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
14100 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
14110 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
14120 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
14130 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
14140 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
14150 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
14160 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
14170 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
14180 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
14190 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
141a0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
141b0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
141c0 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
141d0 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
141e0 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
141f0 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
14200 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
14210 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
14220 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
14230 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
14240 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
14270 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
14280 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
142a0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
142b0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
142c0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
142d0 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
142e0 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
142f0 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
14300 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
14310 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
14320 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
14330 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
14340 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
14350 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
14360 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
14370 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
14380 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
14390 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
143a0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
143b0 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
143c0 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
143d0 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
143e0 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
143f0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
14400 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
14410 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
14420 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
14430 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
14440 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
14450 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
14460 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
14470 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14480 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
14490 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
144a0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
144b0 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
144c0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
144d0 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65     if( db->write
144e0 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20  VdbeCnt>0 ){.   
144f0 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
14500 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
14510 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
14520 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
14530 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
14540 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
14550 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
14560 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
14570 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
14580 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
14590 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
145a0 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
145b0 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
145c0 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
145d0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
145e0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
145f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
14600 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
14610 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
14620 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
14630 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  e);..      /* Cr
14640 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
14650 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
14660 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
14670 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
14680 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
14690 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
146a0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
146b0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
146c0 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
146d0 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
146e0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
146f0 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
14700 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
14710 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
14720 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
14730 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
14740 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
14750 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
14760 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
14770 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
14780 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
14790 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
147a0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
147b0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
147c0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
147d0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
147e0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
147f0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
14800 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
14810 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
14820 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
14830 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
14840 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
14850 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
14860 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
14870 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
14880 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14890 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
148a0 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
148b0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
148c0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
148d0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
148e0 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
148f0 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
14900 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
14910 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
14920 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
14930 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
14940 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
14950 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
14960 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
14970 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
14980 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
14990 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
149a0 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
149b0 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
149c0 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
149d0 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
149e0 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
149f0 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
14a00 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
14a10 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
14a20 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
14a30 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
14a40 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
14a50 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
14a60 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
14a70 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
14a80 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
14a90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
14aa0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
14ab0 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  f( .        db->
14ac0 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 7c  writeVdbeCnt>0 |
14ad0 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  | (p1==SAVEPOINT
14ae0 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d  _ROLLBACK && db-
14af0 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
14b00 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
14b10 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
14b20 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
14b30 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
14b40 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
14b50 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
14b60 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
14b70 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74 20  ents. It is not 
14b80 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c  possible to roll
14b90 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e 74  back a savepoint
14ba0 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68 65  .      ** if the
14bb0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
14bc0 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74 20  e statements at 
14bd0 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  all..      */.  
14be0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
14bf0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
14c00 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22  , db, .        "
14c10 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70 6f  cannot %s savepo
14c20 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
14c30 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
14c40 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d 3d  ",.        (p1==
14c50 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14c60 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a  CK ? "rollback":
14c70 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20 20   "release").    
14c80 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20    );.      rc = 
14c90 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
14ca0 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
14cb0 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
14cc0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
14cd0 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
14ce0 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
14cf0 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
14d00 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
14d10 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
14d20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
14d30 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
14d40 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
14d50 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14d60 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
14d70 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
14d80 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
14d90 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
14da0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66  epoint;.      if
14db0 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
14dc0 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
14dd0 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
14de0 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
14df0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
14e00 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
14e10 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
14e20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
14e30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
14e40 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
14e50 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  it = 1;.        
14e60 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
14e70 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
14e80 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20  USY ){.         
14e90 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
14ea0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
14eb0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
14ec0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
14ed0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
14ee0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
14ef0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
14f00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
14f10 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14f20 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
14f30 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
14f40 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14f50 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
14f60 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
14f70 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
14f80 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   1;.        for(
14f90 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
14fa0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
14fb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
14fc0 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
14fd0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
14fe0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
14ff0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
15000 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
15010 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
15020 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
15030 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
15040 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15050 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
15060 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
15070 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
15080 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
15090 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
150a0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
150b0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
150c0 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
150d0 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
150e0 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
150f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
15100 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
15110 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
15120 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
15130 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
15140 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
15150 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
15160 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
15170 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
15180 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
15190 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
151a0 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
151b0 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
151c0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
151d0 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
151e0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
151f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
15200 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
15210 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
15220 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
15230 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
15240 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
15250 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
15260 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
15270 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
15280 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
15290 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
152a0 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
152b0 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
152c0 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
152d0 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
152e0 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
152f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
15300 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
15310 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
15320 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
15330 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
15340 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
15350 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
15360 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
15370 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
15380 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
15390 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
153a0 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
153b0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
153c0 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
153d0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
153e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
153f0 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
15400 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
15410 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
15420 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
15430 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
15440 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
15450 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
15460 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65  rredCons = pSave
15470 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
15480 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Cons;.      }.  
15490 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b    }.  }..  break
154a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
154b0 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
154c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
154d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
154e0 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
154f0 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
15500 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
15510 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
15520 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
15530 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
15540 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
15550 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
15560 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
15570 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
15580 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
15590 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
155a0 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
155b0 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
155c0 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
155d0 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
155e0 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
155f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
15600 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
15610 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
15620 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
15630 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
15640 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69  oCommit;.  int i
15650 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20  Rollback;.  int 
15660 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73  turnOnAC;..  des
15670 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
15680 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
15690 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
156a0 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65  .  turnOnAC = de
156b0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
156c0 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && !db->autoComm
156d0 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  it;.  assert( de
156e0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
156f0 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
15700 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
15710 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
15720 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
15730 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
15740 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63    assert( db->ac
15750 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b  tiveVdbeCnt>0 );
15760 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
15770 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
15780 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75  ive */..  if( tu
15790 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62  rnOnAC && iRollb
157a0 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76  ack && db->activ
157b0 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
157c0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
157d0 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
157e0 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61  nts a ROLLBACK a
157f0 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
15800 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75  .    ** still ru
15810 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61  nning, and a tra
15820 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
15830 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72  ve, return an er
15840 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20  ror indicating. 
15850 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f     ** that the o
15860 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
15870 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
15880 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
15890 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
158a0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
158b0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61  not rollback tra
158c0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
158d0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
158e0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
158f0 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
15900 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
15910 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26  e if( turnOnAC &
15920 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
15930 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
15940 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >0 ){.    /* If 
15950 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
15960 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
15970 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
15980 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
15990 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
159a0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
159b0 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
159c0 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
159d0 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
159e0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
159f0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
15a00 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63  g, db, "cannot c
15a10 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
15a20 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
15a30 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
15a40 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
15a50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15a60 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
15a70 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15a80 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
15a90 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
15aa0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
15ab0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
15ac0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
15ad0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
15ae0 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20  backAll(db);.   
15af0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15b00 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
15b10 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
15b20 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
15b30 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
15b40 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
15b50 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
15b60 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
15b70 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
15b80 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
15b90 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
15ba0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
15bb0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
15bc0 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
15bd0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
15be0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
15bf0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
15c00 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
15c10 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
15c20 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
15c30 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
15c40 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
15c50 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
15c60 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
15c70 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
15c80 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
15c90 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
15ca0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
15cb0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
15cc0 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
15cd0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
15ce0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
15cf0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
15d00 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
15d10 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
15d20 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
15d30 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
15d40 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
15d50 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
15d60 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
15d70 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
15d80 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
15d90 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
15da0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
15db0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
15dc0 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
15de0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
15df0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
15e00 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
15e10 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
15e20 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
15e30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15e40 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
15e50 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  on P1 P2 * * *.*
15e60 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
15e70 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74  nsaction.  The t
15e80 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20  ransaction ends 
15e90 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72  when a Commit or
15ea0 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63   Rollback.** opc
15eb0 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ode is encounter
15ec0 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f  ed.  Depending o
15ed0 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  n the ON CONFLIC
15ee0 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a  T setting, the.*
15ef0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69  * transaction mi
15f00 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c  ght also be roll
15f10 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72  ed back if an er
15f20 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
15f30 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
15f40 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
15f50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
15f60 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
15f70 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
15f80 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
15f90 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
15fa0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
15fb0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
15fc0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
15fd0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
15fe0 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
15ff0 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
16000 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
16010 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
16020 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
16030 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
16040 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
16050 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52  tarted.  A RESER
16060 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f  VED lock is.** o
16070 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64  btained on the d
16080 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65  atabase file whe
16090 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
160a0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
160b0 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70  .  No.** other p
160c0 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74  rocess can start
160d0 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74   another write t
160e0 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65  ransaction while
160f0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
16100 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79  n is.** underway
16110 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72  .  Starting a wr
16120 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
16130 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72  also creates a r
16140 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
16150 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e   A.** write tran
16160 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
16170 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61  started before a
16180 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62  ny changes can b
16190 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a  e made to the.**
161a0 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50   database.  If P
161b0 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65  2 is 2 or greate
161c0 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53  r then an EXCLUS
161d0 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f  IVE lock is also
161e0 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20   obtained.** on 
161f0 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  the file..**.** 
16200 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
16210 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
16220 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
16230 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
16240 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
16250 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
16260 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
16270 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
16280 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
16290 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
162a0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
162b0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
162c0 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
162d0 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
162e0 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
162f0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
16300 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
16310 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
16320 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
16330 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
16340 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
16350 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
16360 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
16370 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
16380 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
16390 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
163a0 77 73 20 74 68 65 20 61 66 66 65 63 74 73 20 6f  ws the affects o
163b0 66 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  f this.** VDBE t
163c0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
163d0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
163e0 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
163f0 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
16400 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
16410 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
16420 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
16430 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
16440 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
16450 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
16460 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
16470 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
16480 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
16490 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
164a0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
164b0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
164c0 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
164d0 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
164e0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
164f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
16500 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
16510 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
16520 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
16530 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
16540 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
16550 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
16560 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
16570 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
16580 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
16590 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
165a0 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
165b0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
165c0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
165d0 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
165e0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
165f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
16600 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
16610 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
16620 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
16630 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16640 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
16650 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
16660 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
16670 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
16680 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
16690 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
166a0 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a  eCnt>1) .    ){.
166b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
166c0 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
166d0 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20  ans(pBt) );.    
166e0 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d    if( p->iStatem
166f0 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ent==0 ){.      
16700 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53    assert( db->nS
16710 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64  tatement>=0 && d
16720 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30  b->nSavepoint>=0
16730 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
16740 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20  nStatement++; . 
16750 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65         p->iState
16760 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  ment = db->nSave
16770 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61  point + db->nSta
16780 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  tement;.      }.
16790 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
167a0 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
167b0 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
167c0 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ent);..      /* 
167d0 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
167e0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
167f0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
16800 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
16810 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
16820 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
16830 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
16840 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
16850 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
16860 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
16870 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
16880 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
16890 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
168a0 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
168b0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
168c0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20  edCons;.    }.  
168d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
168e0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
168f0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
16900 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
16910 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
16920 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
16930 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
16940 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
16950 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
16960 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
16970 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
16980 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
16990 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
169a0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
169b0 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
169c0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
169d0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
169e0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
169f0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
16a00 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
16a10 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
16a20 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
16a30 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
16a40 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
16a50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
16a60 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
16a70 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
16a80 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
16a90 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
16aa0 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
16ab0 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
16ac0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
16ad0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
16ae0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
16af0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
16b00 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
16b10 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
16b20 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
16b30 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  ;..  iDb = pOp->
16b40 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
16b50 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
16b60 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
16b70 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
16b80 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
16b90 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
16ba0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
16bb0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
16bc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
16bd0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
16be0 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  (1<<iDb))!=0 );.
16bf0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
16c00 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
16c10 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
16c20 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
16c30 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
16c40 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
16c50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
16c60 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
16c70 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
16c80 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
16c90 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
16ca0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
16cb0 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
16cc0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
16cd0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
16ce0 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
16cf0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
16d00 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
16d10 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
16d20 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
16d30 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
16d40 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
16d50 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
16d60 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
16d70 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
16d80 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
16d90 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
16da0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
16db0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16dc0 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
16dd0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
16de0 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
16df0 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
16e00 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
16e10 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
16e20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
16e30 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
16e40 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
16e50 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
16e60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16e70 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
16e80 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
16e90 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
16ea0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
16eb0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
16ec0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
16ed0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
16ee0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
16ef0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
16f00 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p3];.  sqlite3
16f10 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
16f20 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65  y(pIn3);.  /* Se
16f30 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
16f40 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
16f50 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
16f60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16f70 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
16f80 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  b->pBt, pOp->p2,
16f90 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29   (int)pIn3->u.i)
16fa0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
16fb0 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
16fc0 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
16fd0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
16fe0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
16ff0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
17000 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
17010 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
17020 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
17030 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d  kie = (int)pIn3-
17040 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
17050 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
17060 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
17070 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
17080 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52  ==BTREE_FILE_FOR
17090 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  MAT ){.    /* Re
170a0 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
170b0 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
170c0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
170d0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
170e0 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69   = (u8)pIn3->u.i
170f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
17100 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
17110 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
17120 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17130 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
17140 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
17150 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
17160 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
17170 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
17180 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
17190 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
171a0 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
171b0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
171c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
171d0 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50  : VerifyCookie P
171e0 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  1 P2 *.**.** Che
171f0 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ck the value of 
17200 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20  global database 
17210 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
17220 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d   0 (the.** schem
17230 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d  a version) and m
17240 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65  ake sure it is e
17250 71 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  qual to P2.  .**
17260 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62   P1 is the datab
17270 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68  ase number which
17280 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61   is 0 for the ma
17290 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
172a0 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68  .** and 1 for th
172b0 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74  e file holding t
172c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
172d0 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20  and some higher 
172e0 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75  number.** for au
172f0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
17300 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f  s..**.** The coo
17310 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
17320 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
17330 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
17340 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
17350 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
17360 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
17370 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
17380 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
17390 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
173a0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
173b0 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
173c0 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a   the schema..**.
173d0 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e  ** Either a tran
173e0 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
173f0 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74   have been start
17400 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e  ed or an OP_Open
17410 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20   needs.** to be 
17420 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74  executed (to est
17430 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f  ablish a read lo
17440 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20  ck) before this 
17450 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76  opcode is.** inv
17460 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oked..*/.case OP
17470 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b  _VerifyCookie: {
17480 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
17490 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73  Btree *pBt;.  as
174a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
174b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
174c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
174d0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
174e0 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
174f0 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
17500 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
17510 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  t;.  if( pBt ){.
17520 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
17530 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
17540 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
17550 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
17560 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
17570 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
17580 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d   if( iMeta!=pOp-
17590 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p2 ){.    sqlit
175a0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
175b0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
175c0 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
175d0 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22  e3DbStrDup(db, "
175e0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
175f0 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20  has changed");. 
17600 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68     /* If the sch
17610 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20  ema-cookie from 
17620 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
17630 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f  e matches the co
17640 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f  okie .    ** sto
17650 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d  red with the in-
17660 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74  memory represent
17670 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68  ation of the sch
17680 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e  ema, do.    ** n
17690 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  ot reload the sc
176a0 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61  hema from the da
176b0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
176c0 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69   **.    ** If vi
176d0 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65  rtual-tables are
176e0 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73   in use, this is
176f0 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74   not just an opt
17700 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  imization..    *
17710 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65  * Often, v-table
17720 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61  s store their da
17730 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69  ta in other SQLi
17740 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68  te tables, which
17750 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72  .    ** are quer
17760 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ied from within 
17770 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65  xNext() and othe
17780 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  r v-table method
17790 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70  s using.    ** p
177a0 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e  repared queries.
177b0 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79   If such a query
177c0 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c   is out-of-date,
177d0 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
177e0 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72  to.    ** discar
177f0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
17800 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73  chema, as the us
17810 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e  er code implemen
17820 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20  ting the.    ** 
17830 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61  v-table would ha
17840 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66  ve to be ready f
17850 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  or the sqlite3_v
17860 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74  tab structure it
17870 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62  self.    ** to b
17880 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68  e invalidated wh
17890 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73  enever sqlite3_s
178a0 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20  tep() is called 
178b0 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20  from within .   
178c0 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65   ** a v-table me
178d0 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  thod..    */.   
178e0 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70   if( db->aDb[pOp
178f0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  ->p1].pSchema->s
17900 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d  chema_cookie!=iM
17910 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eta ){.      sql
17920 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
17930 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  lSchema(db, pOp-
17940 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  >p1);.    }..   
17950 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
17960 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17970 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  (db);.    rc = S
17980 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
17990 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
179a0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61   Opcode: OpenRea
179b0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  d P1 P2 P3 P4 P5
179c0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
179d0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
179e0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
179f0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
17a00 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
17a10 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
17a20 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
17a30 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
17a40 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
17a50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
17a60 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
17a70 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
17a80 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
17a90 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
17aa0 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
17ab0 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
17ac0 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
17ad0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
17ae0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
17af0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
17b00 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
17b10 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
17b20 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
17b30 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
17b40 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
17b50 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
17b60 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
17b70 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
17b80 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
17b90 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
17ba0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
17bb0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
17bc0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
17bd0 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
17be0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
17bf0 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
17c00 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
17c10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
17c20 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
17c30 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
17c40 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
17c50 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
17c60 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
17c70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
17c80 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
17c90 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
17ca0 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
17cb0 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
17cc0 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
17cd0 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
17ce0 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
17cf0 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
17d00 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
17d10 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
17d20 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
17d30 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
17d40 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
17d50 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
17d60 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
17d70 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
17d80 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
17d90 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
17da0 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
17db0 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
17dc0 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
17dd0 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
17de0 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** The
17df0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
17e00 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
17e10 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
17e20 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
17e30 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
17e40 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
17e50 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
17e60 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
17e70 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
17e80 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
17e90 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
17ea0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
17eb0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
17ec0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
17ed0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
17ee0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
17ef0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
17f00 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
17f10 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
17f20 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
17f30 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  the table..**.**
17f40 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72   See also OpenWr
17f50 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ite..*/./* Opcod
17f60 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
17f70 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
17f80 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72  * Open a read/wr
17f90 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64  ite cursor named
17fa0 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65   P1 on the table
17fb0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
17fc0 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20  root.** page is 
17fd0 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30  P2.  Or if P5!=0
17fe0 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
17ff0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
18000 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72  to find the.** r
18010 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  oot page..**.** 
18020 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
18030 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
18040 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
18050 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
18060 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
18070 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
18080 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
18090 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
180a0 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
180b0 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
180c0 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
180d0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
180e0 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
180f0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
18100 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
18110 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
18120 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
18130 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
18140 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
18150 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18160 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72  in the table, or
18170 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65   to the.** large
18180 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20  st index of any 
18190 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61  column of the ta
181a0 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75  ble that is actu
181b0 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a  ally used..**.**
181c0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
181d0 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
181e0 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
181f0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
18200 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
18210 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
18220 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
18230 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
18240 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
18250 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
18260 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
18270 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
18280 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
18290 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
182a0 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
182b0 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
182c0 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
182d0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
182e0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
182f0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
18300 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
18310 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
18320 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
18330 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
18340 70 44 62 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65  pDb;..  if( p->e
18350 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63  xpired ){.    rc
18360 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
18370 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
18380 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
18390 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
183a0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
183b0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
183c0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
183d0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
183e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
183f0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
18400 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
18410 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
18420 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
18430 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
18440 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
18450 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
18460 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
18470 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69  rFlag = 1;.    i
18480 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
18490 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
184a0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
184b0 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
184c0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
184d0 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
184e0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
184f0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
18500 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
18510 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
18520 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  5 ){.    assert(
18530 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73   p2>0 );.    ass
18540 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  ert( p2<=p->nMem
18550 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
18560 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71  aMem[p2];.    sq
18570 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
18580 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
18590 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
185a0 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
185b0 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
185c0 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
185d0 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61  rior OP_CreateTa
185e0 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ble opcode and. 
185f0 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
18600 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
18610 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
18620 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
18630 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
18640 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
18650 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
18660 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18670 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
18680 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
18690 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
186a0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
186b0 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c     if( NEVER(p2<
186c0 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  2) ) {.      rc 
186d0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
186e0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
186f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18700 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
18710 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
18720 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
18730 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
18740 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
18750 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e  ;.    pKeyInfo->
18760 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
18770 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
18780 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
18790 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  1;.  }else if( p
187a0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
187b0 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
187c0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
187d0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
187e0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
187f0 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
18800 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
18810 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b  nField, iDb, 1);
18820 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
18830 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
18840 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
18850 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
18860 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
18870 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
18880 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75  yInfo, pCur->pCu
18890 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
188a0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
188b0 66 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20  fo;..  /* Since 
188c0 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d  it performs no m
188d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
188e0 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79   or IO, the only
188f0 20 76 61 6c 75 65 73 20 74 68 61 74 0a 20 20 2a   values that.  *
18900 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  * sqlite3BtreeCu
18910 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72  rsor() may retur
18920 6e 20 61 72 65 20 53 51 4c 49 54 45 5f 45 4d 50  n are SQLITE_EMP
18930 54 59 20 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b  TY and SQLITE_OK
18940 2e 20 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45  . .  ** SQLITE_E
18950 4d 50 54 59 20 69 73 20 6f 6e 6c 79 20 72 65 74  MPTY is only ret
18960 75 72 6e 65 64 20 77 68 65 6e 20 61 74 74 65 6d  urned when attem
18970 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68  pting to open th
18980 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f  e table.  ** roo
18990 74 65 64 20 61 74 20 70 61 67 65 20 31 20 6f 66  ted at page 1 of
189a0 20 61 20 7a 65 72 6f 2d 62 79 74 65 20 64 61 74   a zero-byte dat
189b0 61 62 61 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73  abase.  */.  ass
189c0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
189d0 45 4d 50 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  EMPTY || rc==SQL
189e0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20  ITE_OK );.  if( 
189f0 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59  rc==SQLITE_EMPTY
18a00 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70 43   ){.    pCur->pC
18a10 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72  ursor = 0;.    r
18a20 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
18a30 20 7d 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65   }..  /* Set the
18a40 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
18a50 62 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78 20  ble and isIndex 
18a60 76 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76 69  variables. Previ
18a70 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
18a80 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
18a90 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
18aa0 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
18ab0 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
18ac0 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
18ad0 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
18ae0 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
18af0 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
18b00 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
18b10 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
18b20 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
18b30 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
18b40 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
18b50 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
18b60 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72  _KEYINFO;.  pCur
18b70 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75  ->isIndex = !pCu
18b80 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  r->isTable;.  br
18b90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18ba0 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
18bb0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
18bc0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
18bd0 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
18be0 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
18bf0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
18c00 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
18c10 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
18c20 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
18c30 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
18c40 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73 69  nly.  The transi
18c50 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a  ent or virtual.*
18c60 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
18c70 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
18c80 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
18c90 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
18ca0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
18cb0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
18cc0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
18cd0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
18ce0 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
18cf0 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
18d00 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
18d10 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
18d20 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
18d30 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
18d40 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
18d50 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
18d60 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
18d70 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
18d80 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
18d90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
18da0 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c  de was once call
18db0 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75  ed OpenTemp.  Bu
18dc0 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a  t that created.*
18dd0 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61  * confusion beca
18de0 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74 65  use the term "te
18df0 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74  mp table", might
18e00 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a   refer either.**
18e10 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65   to a TEMP table
18e20 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
18e30 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65  l, or to a table
18e40 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68   opened by.** th
18e50 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e  is opcode.  Then
18e60 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73   this opcode was
18e70 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61   call OpenVirtua
18e80 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  l.  But.** that 
18e90 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f  created confusio
18ea0 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65  n with the whole
18eb0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69   virtual-table i
18ec0 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  dea..*/.case OP_
18ed0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
18ee0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
18ef0 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  Cx;.  static con
18f00 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  st int openFlags
18f10 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
18f20 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
18f30 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
18f40 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
18f50 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
18f60 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
18f70 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
18f80 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
18f90 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
18fa0 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20  RANSIENT_DB;..  
18fb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18fc0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
18fd0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
18fe0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
18ff0 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
19000 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
19010 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
19020 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d  lRow = 1;.  rc =
19030 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
19040 74 6f 72 79 28 64 62 2c 20 30 2c 20 31 2c 20 53  tory(db, 0, 1, S
19050 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 54 45  QLITE_DEFAULT_TE
19060 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f  MP_CACHE_SIZE, o
19070 70 65 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20 20  penFlags,.      
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 20 26 70 43 78 2d 3e 70 42 74 29 3b       &pCx->pBt);
190a0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
190b0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
190c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
190d0 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
190e0 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
190f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19100 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
19110 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
19120 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
19130 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
19140 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
19150 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
19160 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 5a  with the BTREE_Z
19170 45 52 4f 44 41 54 41 20 66 6c 61 67 20 62 65 66  ERODATA flag bef
19180 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69  ore.    ** openi
19190 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e  ng it. If a tran
191a0 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72  sient table is r
191b0 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73  equired, just us
191c0 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74  e the.    ** aut
191d0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
191e0 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f  ed table with ro
191f0 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 49 4e  ot-page 1 (an IN
19200 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
19210 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
19220 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a  >p4.pKeyInfo ){.
19230 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
19240 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
19250 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
19260 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
19270 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19280 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
19290 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
192a0 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20  EE_ZERODATA); . 
192b0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
192c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
192d0 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
192e0 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
192f0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
19300 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
19310 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c  (pCx->pBt, pgno,
19320 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   1, .           
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70       (KeyInfo*)p
19350 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70  Op->p4.z, pCx->p
19360 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
19370 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
19380 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
19390 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  o;.        pCx->
193a0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
193b0 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20  ENC(p->db);.    
193c0 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
193d0 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
193e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
193f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
19400 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d  rsor(pCx->pBt, M
19410 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30  ASTER_ROOT, 1, 0
19420 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
19430 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
19440 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
19450 20 7d 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65   }.  pCx->isInde
19460 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c  x = !pCx->isTabl
19470 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
19480 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
19490 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
194a0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
194b0 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
194c0 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
194d0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
194e0 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
194f0 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
19500 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
19510 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68 65  t one row in the
19520 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
19530 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
19540 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
19550 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
19560 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
19570 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
19580 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
19590 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
195a0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
195b0 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
195c0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
195d0 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
195e0 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a  d the a single.*
195f0 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
19600 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
19610 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
19620 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
19630 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
19640 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
19650 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
19660 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
19670 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
19680 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
19690 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
196a0 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
196b0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
196c0 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
196d0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
196e0 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
196f0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
19700 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
19710 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
19720 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
19730 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
19740 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
19750 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p1>=0 );.  pCx 
19760 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
19770 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
19780 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  ->p3, -1, 0);.  
19790 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
197a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
197b0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
197c0 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  pCx->pseudoTable
197d0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
197e0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
197f0 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65  1;.  pCx->isInde
19800 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  x = 0;.  break;.
19810 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
19820 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
19830 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
19840 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
19850 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
19860 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
19870 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
19880 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
19890 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
198a0 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
198b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
198c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
198d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
198e0 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
198f0 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
19900 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
19910 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
19920 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
19930 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19940 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Ge P1 P2 P3 P4 *
19950 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
19960 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
19970 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
19980 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
19990 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
199a0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
199b0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
199c0 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
199d0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
199e0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
199f0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
19a00 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
19a10 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
19a20 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
19a30 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
19a40 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
19a50 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
19a60 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
19a70 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
19a80 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
19a90 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
19aa0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
19ab0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
19ac0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
19ad0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
19ae0 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
19af0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
19b00 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
19b10 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
19b20 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
19b30 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
19b40 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
19b50 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
19b60 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
19b70 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
19b80 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
19b90 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
19ba0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
19bb0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
19bc0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
19bd0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
19be0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
19bf0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
19c00 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
19c10 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
19c20 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
19c30 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
19c40 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
19c50 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
19c60 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
19c70 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
19c80 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
19c90 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
19ca0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
19cb0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
19cc0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
19cd0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
19ce0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
19cf0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
19d00 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
19d10 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
19d20 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
19d30 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
19d40 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
19d50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
19d60 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
19d70 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
19d80 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
19d90 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
19da0 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50  eekLt P1 P2 P3 P
19db0 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  4 * .**.** If cu
19dc0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19dd0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19de0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19df0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19e00 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19e10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
19e20 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
19e30 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
19e40 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
19e50 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
19e60 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
19e70 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19e80 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19e90 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19ea0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19eb0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19ec0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19ed0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19ee0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
19ef0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
19f00 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
19f10 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
19f20 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
19f30 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
19f40 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
19f50 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
19f60 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
19f70 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
19f80 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
19f90 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
19fa0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
19fb0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
19fc0 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kLe P1 P2 P3 P4 
19fd0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
19fe0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19ff0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1a000 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1a010 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1a020 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1a030 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1a040 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1a050 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1a060 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1a070 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1a080 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1a090 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1a0a0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1a0b0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1a0c0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1a0d0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1a0e0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1a0f0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1a100 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1a110 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1a120 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1a130 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1a140 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1a150 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1a160 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1a170 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1a180 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1a190 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1a1a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1a1b0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1a1c0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1a1d0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1a1e0 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  Lt.*/.case OP_Se
1a1f0 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLt:         /*
1a200 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1a210 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20  se OP_SeekLe:   
1a220 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1a230 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1a240 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekGe:         /*
1a250 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1a260 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20  se OP_SeekGt: { 
1a270 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1a280 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
1a290 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62  .  int oc;.  Vdb
1a2a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55  eCursor *pC;.  U
1a2b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1a2c0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1a2d0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1a2e0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1a2f0 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1a300 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1a310 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1a320 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1a330 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a340 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1a350 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1a360 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1a370 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a380 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1a390 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
1a3a0 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20  t( OP_SeekLe == 
1a3b0 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20  OP_SeekLt+1 );. 
1a3c0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1a3d0 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Ge == OP_SeekLt+
1a3e0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
1a3f0 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53  P_SeekGt == OP_S
1a400 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 69 66 28  eekLt+3 );.  if(
1a410 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1a420 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d  ){.    oc = pOp-
1a430 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d  >opcode;.    pC-
1a440 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1a450 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1a460 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  e ){.      /* Th
1a470 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
1a480 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
1a490 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
1a4a0 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
1a4b0 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  .      ** blob, 
1a4c0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
1a4d0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
1a4e0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
1a4f0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a  e can do.      *
1a500 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
1a510 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  overt it. */.   
1a520 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
1a530 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1a540 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
1a550 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20  nity(pIn3);.    
1a560 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1a570 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1a580 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f  3);.      pC->ro
1a590 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1a5a0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1a5b0 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1a5c0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1a5d0 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1a5e0 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a   without.      *
1a5f0 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
1a600 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
1a610 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
1a620 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
1a630 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1a640 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1a650 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
1a660 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1a670 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1a680 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1a690 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1a6a0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1a6b0 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1a6c0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1a6d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1a6e0 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
1a6f0 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
1a700 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
1a710 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1a720 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
1a730 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1a740 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49    }.        /* I
1a750 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
1a760 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  point, then the 
1a770 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1a780 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20   a floating.    
1a790 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d      ** point num
1a7a0 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ber. */.        
1a7b0 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
1a7c0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1a7d0 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20  !=0 );..        
1a7e0 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45  if( iKey==SMALLE
1a7f0 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e  ST_INT64 && (pIn
1a800 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  3->r<(double)iKe
1a810 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20  y || pIn3->r>0) 
1a820 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1a830 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
1a840 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67  too large in mag
1a850 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70  nitude to be exp
1a860 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20  ressed as an.   
1a870 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65         ** intege
1a880 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  r. */.          
1a890 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
1a8a0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30     if( pIn3->r<0
1a8b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1a8c0 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1a8d0 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1a8e0 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1a8f0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
1a910 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
1a920 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  irst(pC->pCursor
1a930 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1a940 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1a950 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1a960 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a970 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  or;.            
1a980 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  }.          }els
1a990 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e{.            i
1a9a0 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65  f( oc<=OP_SeekLe
1a9b0 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1a9c0 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1a9d0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20  ==OP_SeekLe );. 
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1a9f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
1aa00 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1aa10 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
1aa20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1aa30 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1aa40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1aa50 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1aa60 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1aa70 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
1aa80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20  .            pc 
1aa90 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1aaa0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1aab0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1aac0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63      }else if( oc
1aad0 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1aae0 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a  c==OP_SeekGe ){.
1aaf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1ab00 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66   the ceiling() f
1ab10 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
1ab20 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a  rt real->int */.
1ab30 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1ab40 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29  n3->r > (double)
1ab50 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20  iKey ) iKey++;. 
1ab60 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1ab70 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
1ab80 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74  he floor() funct
1ab90 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72  ion to convert r
1aba0 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20  eal->int */.    
1abb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1abc0 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f  ==OP_SeekLe || o
1abd0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a  c==OP_SeekGt );.
1abe0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
1abf0 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29  n3->r < (double)
1ac00 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20  iKey ) iKey--;. 
1ac10 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1ac20 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c   .      rc = sql
1ac30 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1ac40 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1ac50 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1ac60 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1ac70 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1ac80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1ac90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1aca0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1acb0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
1acc0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  0 ){.        pC-
1acd0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1ace0 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c  1;.        pC->l
1acf0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
1ad00 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1ad10 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64  se{.      nField
1ad20 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1ad30 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1ad40 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1ad50 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
1ad60 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
1ad70 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20       r.pKeyInfo 
1ad80 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1ad90 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d        r.nField =
1ada0 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
1adb0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
1adc0 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1add0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1ade0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1adf0 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f        **   if( o
1ae00 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c==OP_SeekGt || 
1ae10 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b  oc==OP_SeekLe ){
1ae20 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  .      **     r.
1ae30 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1ae40 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20  _INCRKEY;.      
1ae50 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  **   }else{.    
1ae60 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73    **     r.flags
1ae70 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20   = 0;.      **  
1ae80 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20   }.      */.    
1ae90 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36    r.flags = (u16
1aea0 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  )(UNPACKED_INCRK
1aeb0 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20  EY * (1 & (oc - 
1aec0 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20  OP_SeekLt)));.  
1aed0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1aee0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66  OP_SeekGt || r.f
1aef0 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49  lags==UNPACKED_I
1af00 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20  NCRKEY );.      
1af10 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1af20 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73  eekLe || r.flags
1af30 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  ==UNPACKED_INCRK
1af40 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EY );.      asse
1af50 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1af60 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20  e || r.flags==0 
1af70 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1af80 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc!=OP_SeekLt |
1af90 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a  | r.flags==0 );.
1afa0 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  .      r.aMem = 
1afb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1afc0 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1afd0 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20  (r.aMem);.      
1afe0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1aff0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1b000 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c  pC->pCursor, &r,
1b010 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
1b020 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b030 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b040 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b050 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b060 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  }.      pC->rowi
1b070 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1b080 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
1b090 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1b0a0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1b0b0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1b0c0 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
1b0d0 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
1b0e0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
1b0f0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
1b100 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc>=OP_SeekGe )
1b110 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1b120 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d  P_SeekGe || oc==
1b130 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20  OP_SeekGt );.   
1b140 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1b150 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1b160 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20  P_SeekGt) ){.   
1b170 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b180 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
1b190 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1b1a0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1b1b0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1b1c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b1d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
1b1e0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1b1f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1b200 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
1b210 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1b220 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
1b230 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
1b240 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
1b250 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
1b260 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
1b270 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20   oc==OP_SeekLt) 
1b280 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1b290 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1b2a0 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1b2b0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1b2c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b2d0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1b2e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b2f0 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1b300 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1b310 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1b320 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
1b330 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
1b340 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
1b350 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
1b360 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69          ** see i
1b370 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1b380 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
1b390 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c         res = sql
1b3a0 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1b3b0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1b3c0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
1b3d0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1b3e0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
1b3f0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1b400 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
1b410 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
1b420 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e  his happens when
1b430 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f   attempting to o
1b440 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f  pen the sqlite3_
1b450 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20  master table.   
1b460 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63   ** for read acc
1b470 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ess returns SQLI
1b480 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69  TE_EMPTY. In thi
1b490 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20  s case always.  
1b4a0 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75    ** take the ju
1b4b0 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65 20  mp (since there 
1b4c0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69  are no records i
1b4d0 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20  n the table)..  
1b4e0 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1b4f0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1b500 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b510 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
1b520 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
1b530 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1b540 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1b550 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1b560 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1b570 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1b580 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1b590 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1b5a0 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1b5b0 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1b5c0 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1b5d0 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1b5e0 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1b5f0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1b600 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1b610 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1b620 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1b630 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1b640 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1b650 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1b660 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1b670 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1b680 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1b690 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1b6a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1b6b0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1b6c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1b6d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1b6e0 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  0 );.  if( ALWAY
1b6f0 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1b700 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
1b710 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1b720 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1b730 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  = 0;.    pIn2 = 
1b740 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1b750 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
1b760 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64  rget = sqlite3Vd
1b770 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
1b780 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
1b790 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1b7a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1b7b0 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  to = 1;.  }.  br
1b7c0 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70  eak;.}.  ../* Op
1b7d0 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50  code: Found P1 P
1b7e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1b7f0 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1b800 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1b810 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1b820 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1b830 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1b840 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1b850 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1b860 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1b870 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1b880 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
1b890 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1b8a0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
1b8b0 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
1b8c0 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
1b8d0 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
1b8e0 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  a prefix of any 
1b8f0 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1b900 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1b910 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20  to P2 and.** P1 
1b920 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1b930 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
1b940 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70   entry..*/./* Op
1b950 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
1b960 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1b970 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1b980 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1b990 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1b9a0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1b9b0 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1b9c0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1b9d0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1b9e0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1b9f0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1ba00 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1ba10 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
1ba20 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1ba30 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1ba40 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1ba50 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1ba60 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
1ba70 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1ba80 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1ba90 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
1baa0 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
1bab0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
1bac0 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
1bad0 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
1bae0 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
1baf0 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
1bb00 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1bb10 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
1bb20 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
1bb30 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
1bb40 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1bb50 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1bb60 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1bb70 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61  , IsUnique.*/.ca
1bb80 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
1bb90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1bba0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
1bbb0 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
1bbc0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1bbd0 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
1bbe0 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
1bbf0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
1bc00 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1bc10 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
1bc20 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1bc30 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
1bc40 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
1bc50 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
1bc60 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b 20  sizeof(Mem)*3 + 
1bc70 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
1bc80 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
1bc90 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
1bca0 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65 61  .#endif..  alrea
1bcb0 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  dyExists = 0;.  
1bcc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bcd0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1bce0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1bcf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1bd00 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1bd10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1bd20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1bd30 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49  t( pC!=0 );.  pI
1bd40 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1bd50 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  p3];.  if( ALWAY
1bd60 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  S(pC->pCursor!=0
1bd70 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74  ) ){..    assert
1bd80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1bd90 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
1bda0 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  >p4.i>0 ){.     
1bdb0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1bdc0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1bdd0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1bde0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
1bdf0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
1be00 3b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  ;.      r.flags 
1be10 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1be20 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70  X_MATCH;.      p
1be30 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20  IdxKey = &r;.   
1be40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
1be50 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1be60 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
1be70 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1be80 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 49  (pIn3);.      pI
1be90 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1bea0 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1beb0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1bec0 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a  n3->n, pIn3->z,.
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bef0 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63          aTempRec
1bf00 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1bf10 63 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  c));.      if( p
1bf20 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
1bf30 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
1bf40 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1bf50 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1bf60 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1bf70 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1bf80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bf90 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1bfa0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1bfb0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1bfc0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1bfd0 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1bfe0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
1bff0 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
1c000 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
1c010 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
1c020 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c030 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1c040 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1c050 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1c060 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1c070 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1c080 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c090 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1c0a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1c0b0 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1c0c0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1c0d0 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1c0e0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1c0f0 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1c100 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1c110 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c120 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c130 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1c140 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1c150 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1c160 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1c170 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61  dex b-tree - tha
1c180 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62  t is to say, a b
1c190 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f  tree which.** no
1c1a0 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65 20   data and where 
1c1b0 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f  the key are reco
1c1c0 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  rds generated by
1c1d0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77   OP_MakeRecord w
1c1e0 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20  ith.** the list 
1c1f0 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20  field being the 
1c200 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66  integer ROWID of
1c210 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1c220 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  the index.** ent
1c230 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ry refers to..**
1c240 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1c250 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1c260 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1c270 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1c280 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1c290 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1c2a0 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1c2b0 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1c2c0 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1c2d0 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1c2e0 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1c2f0 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1c300 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1c310 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1c320 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1c330 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1c340 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1c350 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1c360 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1c370 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1c380 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1c390 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1c3a0 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1c3b0 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1c3c0 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1c3d0 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1c3e0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1c3f0 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1c400 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1c410 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1c420 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1c430 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1c440 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1c450 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1c460 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1c470 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1c480 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1c490 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1c4a0 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1c4b0 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1c4c0 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1c4d0 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1c4e0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1c4f0 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1c500 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1c510 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1c520 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1c530 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1c540 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1c550 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1c560 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1c570 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1c580 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1c590 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1c5a0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1c5b0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1c5c0 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1c5d0 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1c5e0 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1c5f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c600 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1c610 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1c620 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1c630 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1c640 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61  Mem *aMx;.  Unpa
1c650 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20  ckedRecord r;   
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c670 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73  * B-Tree index s
1c680 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69  earch key */.  i
1c690 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20 20  64 R;           
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65    /* Rowid store
1c6c0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1c6d0 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61   */..  pIn3 = &a
1c6e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1c6f0 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  aMx = &aMem[pOp-
1c700 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1c710 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1c720 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1c730 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1c740 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1c750 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1c760 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1c770 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c780 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1c790 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1c7a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c7b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c7c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1c7d0 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1c7e0 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1c7f0 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1c800 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1c810 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1c820 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1c830 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1c840 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1c850 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1c860 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1c870 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1c880 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1c890 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1c8a0 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1c8b0 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1c8c0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1c8d0 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1c8e0 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1c8f0 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b  +){.    if( aMx[
1c900 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1c910 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63  Null ){.      pc
1c920 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1c930 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b        pCrsr = 0;
1c940 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1c950 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1c960 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66  ( (aMx[nField].f
1c970 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
1c980 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43  ==0 );..  if( pC
1c990 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
1c9a0 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e   Populate the in
1c9b0 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20  dex search key. 
1c9c0 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  */.    r.pKeyInf
1c9d0 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  o = pCx->pKeyInf
1c9e0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1c9f0 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20  = nField + 1;.  
1ca00 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1ca10 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1ca20 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  CH;.    r.aMem =
1ca30 20 61 4d 78 3b 0a 0a 20 20 20 20 2f 2a 20 45 78   aMx;..    /* Ex
1ca40 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
1ca50 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74  of R from regist
1ca60 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71  er P3. */.    sq
1ca70 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1ca80 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
1ca90 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b    R = pIn3->u.i;
1caa0 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20  ..    /* Search 
1cab0 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78  the B-Tree index
1cac0 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74  . If no conflict
1cad0 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f  ing record is fo
1cae0 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a  und, jump.    **
1caf0 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
1cb00 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69  e, copy the rowi
1cb10 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63  d of the conflic
1cb20 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20  ting record to. 
1cb30 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50     ** register P
1cb40 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  3 and fall throu
1cb50 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1cb60 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a  nstruction.  */.
1cb70 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1cb80 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1cb90 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
1cba0 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52  , 0, &pCx->seekR
1cbb0 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20  esult);.    if( 
1cbc0 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43  (r.flags & UNPAC
1cbd0 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
1cbe0 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52  H) || r.rowid==R
1cbf0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1cc00 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1cc10 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e  }else{.      pIn
1cc20 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64  3->u.i = r.rowid
1cc30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
1cc40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1cc50 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1cc60 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1cc70 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1cc80 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61  of register P3 a
1cc90 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e  s a integer key.
1cca0 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a    If a record .*
1ccb0 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20  * with that key 
1ccc0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69  does not exist i
1ccd0 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74  n table of P1, t
1cce0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
1ccf0 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
1cd00 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68  d does exist, th
1cd10 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54  en fall thru.  T
1cd20 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1cd30 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  t .** pointing t
1cd40 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20  o the record if 
1cd50 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a  it exists..**.**
1cd60 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
1cd70 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65  between this ope
1cd80 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f  ration and NotFo
1cd90 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73  und is that this
1cda0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73  .** operation as
1cdb0 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73  sumes the key is
1cdc0 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
1cdd0 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62  that P1 is a tab
1cde0 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f  le whereas.** No
1cdf0 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b  tFound assumes k
1ce00 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e  ey is a blob con
1ce10 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61  structed from Ma
1ce20 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20  keRecord and.** 
1ce30 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
1ce40 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ce50 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1ce60 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73   IsUnique.*/.cas
1ce70 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1ce80 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1ce90 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
1cea0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1ceb0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1cec0 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
1ced0 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
1cee0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1cef0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1cf00 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1cf10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1cf20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1cf30 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1cf40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1cf50 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1cf60 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1cf70 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1cf80 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
1cf90 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1cfa0 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  eg==0 );.  pCrsr
1cfb0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
1cfc0 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
1cfd0 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20  {.    res = 0;. 
1cfe0 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e     iKey = pIn3->
1cff0 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  u.i;.    rc = sq
1d000 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1d010 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1d020 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
1d030 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  );.    pC->lastR
1d040 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  owid = pIn3->u.i
1d050 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
1d060 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1d070 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  ?1:0;.    pC->nu
1d080 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
1d090 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1d0a0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1d0b0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1d0c0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66  veto = 0;.    if
1d0d0 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
1d0e0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1d0f0 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
1d100 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1d110 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20  id==0 );.    }. 
1d120 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c     pC->seekResul
1d130 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65  t = res;.  }else
1d140 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1d150 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74  ppens when an at
1d160 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20  tempt to open a 
1d170 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74  read cursor on t
1d180 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  he .    ** sqlit
1d190 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72  e_master table r
1d1a0 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1d1b0 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  PTY..    */.    
1d1c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d1d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1d1e0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1d1f0 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65  0 );.    pC->see
1d200 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d  kResult = 0;.  }
1d210 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d220 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1d230 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d240 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1d250 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1d260 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1d270 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1d280 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1d290 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1d2a0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1d2b0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1d2c0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1d2d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1d2e0 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1d2f0 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1d300 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1d310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1d320 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1d330 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d340 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1d350 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d360 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1d370 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
1d380 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1d390 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d3a0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
1d3b0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1d3c0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1d3d0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1d3e0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1d3f0 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1d400 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1d410 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1d420 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1d430 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1d440 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1d450 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1d460 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1d470 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1d480 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1d490 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1d4a0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1d4b0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1d4c0 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1d4d0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1d4e0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1d4f0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
1d500 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
1d510 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
1d520 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
1d530 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
1d540 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1d550 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
1d560 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
1d570 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
1d580 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
1d590 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
1d5a0 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1d5b0 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
1d5c0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
1d5d0 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
1d5e0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1d5f0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1d600 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
1d610 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1d620 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
1d630 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
1d640 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
1d650 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
1d660 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
1d670 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
1d680 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1d690 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1d6a0 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d6c0 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
1d6d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d6e0 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
1d6f0 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
1d700 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
1d710 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d730 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
1d740 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
1d750 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d770 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
1d780 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1d790 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
1d7a0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
1d7b0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1d7c0 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
1d7d0 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
1d7e0 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
1d7f0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
1d800 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
1d810 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
1d820 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
1d830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d840 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1d850 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1d860 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1d870 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1d880 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1d890 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
1d8a0 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
1d8b0 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
1d8c0 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
1d8d0 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
1d8e0 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
1d8f0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
1d900 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
1d910 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
1d920 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
1d930 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
1d940 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
1d950 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
1d960 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1d970 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
1d980 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
1d990 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
1d9a0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
1d9b0 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
1d9c0 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
1d9d0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1d9e0 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
1d9f0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
1da00 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
1da10 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
1da20 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
1da30 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
1da40 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
1da50 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
1da60 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1da70 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
1da80 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
1da90 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
1daa0 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
1dab0 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
1dac0 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
1dad0 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
1dae0 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
1daf0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
1db00 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
1db10 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
1db20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
1db30 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
1db40 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
1db50 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
1db60 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
1db70 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1db80 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b   );.    cnt = 0;
1db90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1dba0 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
1dbb0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1dbc0 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
1dbd0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
1dbe0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
1dbf0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
1dc00 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
1dc10 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
1dc20 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
1dc30 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
1dc40 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1dc50 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
1dc60 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
1dc70 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
1dc80 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
1dc90 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
1dca0 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
1dcb0 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
1dcc0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
1dcd0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
1dce0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1dcf0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1dd00 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1dd10 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1dd20 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  owid ){.      v 
1dd30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
1dd40 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1dd50 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1dd60 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20   if( v==0 ){.   
1dd70 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1dd80 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1dd90 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1dda0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1ddb0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1ddc0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1ddd0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1dde0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ddf0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1de00 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
1de10 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
1de20 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  8074 */.        
1de30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1de40 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1de50 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
1de60 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20  id(pC->pCursor) 
1de70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  );.          rc 
1de80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1de90 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
1dea0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
1deb0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1dec0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
1ded0 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c  Cannot fail foll
1dee0 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28  owing BtreeLast(
1def0 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  ) */.          i
1df00 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v==MAX_ROWID 
1df10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1df20 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1df30 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  d = 1;.         
1df40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1df50 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
1df60 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
1df70 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   */.          }.
1df80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1df90 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1dfa0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1dfb0 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70  MENT.      if( p
1dfc0 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
1dfd0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1dfe0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1dff0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1e000 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1e010 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
1e020 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
1e030 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  e ){.          f
1e040 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
1e050 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
1e060 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
1e070 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
1e080 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1e090 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1e0a0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1e0b0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1e0c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1e0d0 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
1e0e0 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20  .          pMem 
1e0f0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
1e100 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1e110 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1e120 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1e130 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1e140 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1e150 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1e160 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
1e170 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  em );.          
1e180 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
1e190 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
1e1a0 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ..        REGIST
1e1b0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1e1c0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
1e1d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1e1e0 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
1e1f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e200 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
1e210 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
1e220 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
1e230 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
1e240 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
1e250 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
1e260 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
1e270 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
1e280 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1e290 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
1e2a0 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
1e2b0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1e2c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e2d0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1e2e0 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
1e2f0 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
1e300 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
1e310 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  i + 1;.        }
1e320 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75  .        pMem->u
1e330 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a  .i = v;.      }.
1e340 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71  #endif..      sq
1e350 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1e360 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1e370 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49  rsor, v<MAX_ROWI
1e380 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20  D ? v+1 : 0);.  
1e390 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e    }.    if( pC->
1e3a0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1e3b0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
1e3c0 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
1e3d0 34 38 35 39 38 2d 30 32 39 33 38 20 49 66 20 74  48598-02938 If t
1e3e0 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
1e3f0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
1e400 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
1e410 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
1e420 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
1e430 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
1e440 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
1e450 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
1e460 73 20 70 69 63 6b 69 6e 67 20 63 61 6e 64 69 64  s picking candid
1e470 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
1e480 6e 64 6f 6d 20 75 6e 74 69 6c 20 69 74 20 66 69  ndom until it fi
1e490 6e 64 73 20 6f 6e 65 0a 20 20 20 20 20 20 2a 2a  nds one.      **
1e4a0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
1e4b0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 0a 20 20  viously used..  
1e4c0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
1e4d0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
1e4e0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
1e4f0 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
1e500 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
1e510 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
1e540 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
1e550 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73       v = db->las
1e560 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 63 6e  tRowid;.      cn
1e570 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
1e580 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74  .        if( cnt
1e590 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66 66 66  ==0 && (v&0xffff
1e5a0 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20  ff)==v ){.      
1e5b0 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20      v++;.       
1e5c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1e5d0 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
1e5e0 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
1e5f0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  &v);.          i
1e600 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26 3d 20  f( cnt<5 ) v &= 
1e610 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20  0xffffff;.      
1e620 20 20 7d 0a 20 20 20 20 20 20 20 20 72 63 20 3d    }.        rc =
1e630 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e640 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1e650 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1e660 29 76 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  )v, 0, &res);.  
1e670 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
1e680 20 20 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31     }while( cnt<1
1e690 30 30 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45  00 && rc==SQLITE
1e6a0 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 3b  _OK && res==0 );
1e6b0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1e6c0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
1e6d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1e6e0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
1e6f0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
1e700 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
1e710 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1e720 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1e730 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43    }.    }.    pC
1e740 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1e750 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1e760 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1e770 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1e780 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e790 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
1e7a0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
1e7b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1e7c0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
1e7d0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  4 P5.**.** Write
1e7e0 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
1e7f0 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
1e800 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
1e810 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
1e820 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
1e830 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
1e840 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
1e850 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
1e860 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
1e870 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
1e880 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c  the value MEM_Bl
1e890 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ob stored in reg
1e8a0 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
1e8b0 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
1e8c0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1e8d0 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
1e8e0 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49  st.** be a MEM_I
1e8f0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nt..**.** If the
1e900 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1e910 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1e920 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
1e930 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
1e940 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
1e950 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
1e960 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
1e970 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
1e980 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
1e990 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
1e9a0 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
1e9b0 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
1e9c0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
1e9d0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
1e9e0 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
1e9f0 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
1ea00 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  fied)..**.** If 
1ea10 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
1ea20 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
1ea30 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69   P5 is set and i
1ea40 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  f the result of.
1ea50 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b  ** the last seek
1ea60 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e   operation (OP_N
1ea70 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20  otExists) was a 
1ea80 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68  success, then th
1ea90 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  is.** operation 
1eaa0 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74  will not attempt
1eab0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70   to find the app
1eac0 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66  ropriate row bef
1ead0 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65  ore doing.** the
1eae0 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c   insert but will
1eaf0 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69   instead overwri
1eb00 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  te the row that 
1eb10 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1eb20 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
1eb30 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61  ing to.  Presuma
1eb40 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f  bly, the prior O
1eb50 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f  P_NotExists opco
1eb60 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64  de.** has alread
1eb70 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  y positioned the
1eb80 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c   cursor correctl
1eb90 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f  y.  This is an o
1eba0 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  ptimization.** t
1ebb0 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f  hat boosts perfo
1ebc0 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69  rmance by avoidi
1ebd0 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65  ng redundant see
1ebe0 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ks..**.** If the
1ebf0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1ec00 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
1ec10 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
1ec20 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20  s part of an.** 
1ec30 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e  UPDATE operation
1ec40 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66  .  Otherwise (if
1ec50 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65   the flag is cle
1ec60 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70  ar) then this op
1ec70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20  code.** is part 
1ec80 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65  of an INSERT ope
1ec90 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66  ration.  The dif
1eca0 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20  ference is only 
1ecb0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20  important to.** 
1ecc0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e  the update hook.
1ecd0 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  .**.** Parameter
1ece0 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f   P4 may point to
1ecf0 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
1ed00 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e  ning the table-n
1ed10 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62  ame, or.** may b
1ed20 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
1ed30 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
1ed40 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1ed50 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70  .** (sqlite3.xUp
1ed60 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
1ed70 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69   invoked followi
1ed80 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  ng a successful 
1ed90 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57  insert..**.** (W
1eda0 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20  ARNING/TODO: If 
1edb0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63  P1 is a pseudo-c
1edc0 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1edd0 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
1ede0 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f  llocated, then o
1edf0 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69  wnership of P2 i
1ee00 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  s transferred to
1ee10 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73   the pseudo-curs
1ee20 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74  or.** and regist
1ee30 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70  er P2 becomes ep
1ee40 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65  hemeral.  If the
1ee50 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67   cursor is chang
1ee60 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  ed, the.** value
1ee70 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
1ee80 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65  will then change
1ee90 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69  .  Make sure thi
1eea0 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61  s does not.** ca
1eeb0 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  use any problems
1eec0 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  .).**.** This in
1eed0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
1eee0 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20  orks on tables. 
1eef0 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
1ef00 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
1ef10 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50  or indices is OP
1ef20 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f  _IdxInsert..*/./
1ef30 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
1ef40 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20  Int P1 P2 P3 P4 
1ef50 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
1ef60 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
1ef70 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
1ef80 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
1ef90 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
1efa0 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
1efb0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1efc0 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
1efd0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
1efe0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
1eff0 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
1f000 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
1f010 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
1f020 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
1f030 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
1f040 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
1f050 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
1f060 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
1f070 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
1f080 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
1f090 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  d */.  i64 iKey;
1f0a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f0b0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
1f0c0 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
1f0d0 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
1f0e0 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ed */.  VdbeCurs
1f0f0 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
1f100 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
1f110 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
1f120 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
1f130 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
1f140 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
1f150 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65  ro-bytes to appe
1f160 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b  nd */.  int seek
1f170 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73  Result;   /* Res
1f180 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65  ult of prior see
1f190 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45  k or 0 if no USE
1f1a0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
1f1b0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1f1c0 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61  *zDb;  /* databa
1f1d0 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  se name - used b
1f1e0 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  y the update hoo
1f1f0 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  k */.  const cha
1f200 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c  r *zTbl; /* Tabl
1f210 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
1f220 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b   the opdate hook
1f230 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20   */.  int op;   
1f240 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
1f250 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f  e for update hoo
1f260 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45  k: SQLITE_UPDATE
1f270 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52   or SQLITE_INSER
1f280 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20  T */..  pData = 
1f290 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
1f2a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f2b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1f2c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f2d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1f2e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1f2f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1f300 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1f310 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1f320 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1f330 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1f340 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1f350 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1f360 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1f370 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
1f380 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1f390 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
1f3a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1f3b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1f3c0 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
1f3d0 6e 74 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  nt );.    REGIST
1f3e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1f3f0 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
1f400 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
1f410 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1f420 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1f430 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
1f440 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
1f450 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
1f460 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1f470 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1f480 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
1f490 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1f4a0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
1f4b0 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1f4c0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
1f4d0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1f4e0 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1f4f0 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1f500 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1f510 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1f520 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1f530 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1f540 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
1f550 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
1f560 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1f570 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
1f580 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
1f590 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
1f5a0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
1f5b0 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
1f5c0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
1f5d0 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
1f5e0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
1f5f0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1f600 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1f610 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
1f620 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1f630 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1f640 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1f660 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
1f670 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f690 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
1f6a0 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
1f6b0 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
1f6c0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1f6d0 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1f6e0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1f6f0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1f700 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1f710 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1f720 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1f730 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1f740 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1f750 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1f760 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1f770 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
1f780 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1f790 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
1f7a0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
1f7b0 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
1f7c0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
1f7d0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
1f7e0 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
1f7f0 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
1f800 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1f810 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1f820 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
1f830 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
1f840 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
1f850 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1f860 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
1f870 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1f880 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
1f890 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
1f8a0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
1f8b0 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
1f8c0 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
1f8d0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
1f8e0 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
1f8f0 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
1f900 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
1f910 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
1f920 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
1f930 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
1f940 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
1f950 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
1f960 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
1f970 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
1f980 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
1f990 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
1f9a0 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
1f9b0 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
1f9c0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
1f9d0 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
1f9e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
1f9f0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
1fa00 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
1fa10 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
1fa20 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
1fa30 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
1fa40 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
1fa50 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
1fa60 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
1fa70 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
1fa80 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
1fa90 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
1faa0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
1fab0 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
1fac0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
1fad0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
1fae0 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
1faf0 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
1fb00 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
1fb10 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
1fb20 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
1fb30 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
1fb40 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1fb50 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
1fb60 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
1fb70 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
1fb80 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
1fb90 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
1fba0 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
1fbb0 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
1fbc0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1fbd0 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73   iKey = 0;.  ass
1fbe0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1fbf0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1fc00 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1fc10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1fc20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1fc30 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1fc40 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1fc50 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
1fc60 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
1fc70 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
1fc80 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
1fc90 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
1fca0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
1fcb0 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
1fcc0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
1fcd0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
1fce0 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
1fcf0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1fd00 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
1fd10 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1fd20 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1fd30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1fd40 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
1fd50 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
1fd60 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
1fd70 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
1fd80 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
1fd90 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  wid;.  }..  /* T
1fda0 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63  he OP_Delete opc
1fdb0 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ode always follo
1fdc0 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73  ws an OP_NotExis
1fdd0 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72  ts or OP_Last or
1fde0 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  .  ** OP_Column 
1fdf0 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  on the same tabl
1fe00 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
1fe10 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74  tervening operat
1fe20 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d  ions that.  ** m
1fe30 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76  ight move or inv
1fe40 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
1fe50 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f  or.  Hence curso
1fe60 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70  r pC is always p
1fe70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20  ointing.  ** to 
1fe80 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65  the row to be de
1fe90 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
1fea0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1feb0 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f  oveto() operatio
1fec0 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20  n.  ** below is 
1fed0 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61  always a no-op a
1fee0 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20  nd cannot fail. 
1fef0 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20   We will run it 
1ff00 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a  anyhow, though,.
1ff10 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67    ** to guard ag
1ff20 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61  ainst future cha
1ff30 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65  nges to the code
1ff40 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a   generator..  **
1ff50 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
1ff60 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1ff70 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
1ff80 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
1ff90 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
1ffa0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
1ffb0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
1ffc0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
1ffd0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
1ffe0 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1fff0 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
20000 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20010 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
20020 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
20030 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20040 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
20050 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
20060 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
20070 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
20080 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
20090 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
200a0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
200b0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
200c0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
200d0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
200e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
200f0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
20100 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
20110 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
20120 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
20130 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  LETE, zDb, zTbl,
20140 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
20150 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
20160 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
20170 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
20180 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
20190 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
201a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
201b0 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
201c0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
201d0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
201e0 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
201f0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
20200 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
20210 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
20220 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
20230 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
20240 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
20250 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
20260 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
20270 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
20280 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
20290 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
202a0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
202b0 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
202c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
202d0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
202e0 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
202f0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
20300 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20310 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
20320 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
20330 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
20340 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
20350 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
20360 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
20370 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
20380 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
20390 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
203a0 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
203b0 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
203c0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
203d0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
203e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
203f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
20400 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
20410 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
20420 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
20430 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
20440 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
20450 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
20460 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
20470 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
20480 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
20490 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
204a0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
204b0 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
204c0 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
204d0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
204e0 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
204f0 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
20500 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33  pied onto the P3
20510 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
20520 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
20530 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
20540 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
20550 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
20560 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
20570 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
20580 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
20590 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
205a0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
205b0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
205c0 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
205d0 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
205e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
205f0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
20600 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
20610 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
20620 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
20630 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  2];..  /* Note t
20640 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
20650 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
20660 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
20670 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
20680 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
20690 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
206a0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
206b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
206c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
206d0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
206e0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
206f0 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61  OP_RowKey );.  a
20700 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64  ssert( pC->isInd
20710 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ex || pOp->opcod
20720 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
20730 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20740 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20750 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
20760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
20770 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
20780 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20790 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
207a0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
207b0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
207c0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
207d0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
207e0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50   );..  /* The OP
207f0 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
20800 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
20810 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
20820 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
20830 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
20840 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
20850 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
20860 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
20870 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
20880 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
20890 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ce the following
208a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
208b0 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
208c0 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61  is always.  ** a
208d0 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e   no-op and can n
208e0 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20  ever fail.  But 
208f0 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70  we leave it in p
20900 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79  lace as a safety
20910 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
20920 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
20930 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
20940 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
20950 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
20960 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
20970 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
20980 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
20990 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  or;..  if( pC->i
209a0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73  sIndex ){.    as
209b0 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62  sert( !pC->isTab
209c0 6c 65 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  le );.    rc = s
209d0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
209e0 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b  ze(pCrsr, &n64);
209f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
20a00 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
20a10 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
20a20 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
20a30 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
20a40 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d  .    if( n64>db-
20a50 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
20a60 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
20a70 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
20a80 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20  ig;.    }.    n 
20a90 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65  = (u32)n64;.  }e
20aa0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
20ab0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
20ac0 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20  ze(pCrsr, &n);. 
20ad0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
20ae0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
20af0 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
20b00 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
20b10 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
20b20 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
20b30 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
20b40 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
20b50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
20b60 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
20b70 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29  Grow(pOut, n, 0)
20b80 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
20b90 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
20ba0 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
20bb0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
20bc0 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20  EM_Blob);.  if( 
20bd0 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
20be0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20bf0 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30  treeKey(pCrsr, 0
20c00 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
20c10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
20c20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
20c30 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  a(pCrsr, 0, n, p
20c40 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70  Out->z);.  }.  p
20c50 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
20c60 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
20c70 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
20c80 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78  ever cast to tex
20c90 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41  t */.  UPDATE_MA
20ca0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
20cb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20cc0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
20cd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20ce0 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
20cf0 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
20d00 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
20d10 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
20d20 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
20d30 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
20d40 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
20d50 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
20d60 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
20d70 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
20d80 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
20d90 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
20da0 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
20db0 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
20dc0 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
20dd0 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
20de0 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
20df0 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
20e00 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
20e10 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20e30 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
20e40 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
20e50 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
20e60 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
20e70 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
20e80 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
20e90 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  dule;..  assert(
20ea0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20eb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
20ec0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
20ed0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20ee0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
20ef0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20f00 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
20f10 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  0 );.  if( pC->n
20f20 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f  ullRow ){.    pO
20f30 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
20f40 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Null;.    break;
20f50 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
20f60 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
20f70 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
20f80 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
20f90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20fa0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
20fb0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56  }else if( pC->pV
20fc0 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  tabCursor ){.   
20fd0 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74   pVtab = pC->pVt
20fe0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
20ff0 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
21000 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
21010 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
21020 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
21030 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
21040 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
21050 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
21060 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20  isuse;.    rc = 
21070 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
21080 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  pC->pVtabCursor,
21090 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   &v);.    sqlite
210a0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
210b0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
210c0 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
210d0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
210e0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
210f0 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
21100 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
21110 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21120 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64 69 66  o_misuse;.#endif
21130 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
21140 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
21150 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21160 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
21170 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
21180 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21190 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
211a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
211b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
211c0 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
211d0 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
211e0 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
211f0 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
21200 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
21210 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
21220 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
21230 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
21240 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21250 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
21260 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
21270 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
21280 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
21290 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
212a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
212b0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
212c0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
212d0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
212e0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
212f0 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
21300 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
21310 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
21320 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
21330 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
21340 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
21350 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
21360 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
21370 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21380 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
21390 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
213a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
213b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
213c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
213d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
213e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
213f0 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
21400 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  lid = 0;.  if( p
21410 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
21420 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
21430 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
21440 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
21450 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21460 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
21470 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
21480 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
21490 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
214a0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
214b0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
214c0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
214d0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
214e0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
214f0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
21500 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
21510 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
21520 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
21530 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21540 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
21550 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
21560 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
21570 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
21580 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
21590 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
215a0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
215b0 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
215c0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
215d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
215e0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
215f0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
21600 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21610 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21620 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21630 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21640 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21650 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
21660 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
21670 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
21680 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d      res = 1;.  }
21690 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
216a0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
216b0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
216c0 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
216d0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
216e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
216f0 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
21700 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21710 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21720 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21730 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
21740 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
21750 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
21760 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
21770 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
21780 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21790 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
217a0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
217b0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
217c0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
217d0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
217e0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
217f0 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
21800 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
21810 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
21820 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
21830 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
21840 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
21850 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
21860 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
21870 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
21880 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
21890 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
218a0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
218b0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
218c0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
218d0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
218e0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
218f0 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
21900 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
21910 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
21920 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
21930 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
21940 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
21950 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
21960 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
21970 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
21980 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
21990 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
219a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
219b0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
219c0 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
219d0 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
219e0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
219f0 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
21a00 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
21a10 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
21a20 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
21a30 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
21a40 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
21a50 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
21a60 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
21a70 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
21a80 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
21a90 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
21aa0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
21ab0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
21ac0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
21ad0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
21ae0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
21af0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
21b00 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
21b10 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
21b20 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
21b30 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
21b40 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
21b50 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
21b60 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
21b70 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
21b80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
21b90 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
21ba0 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
21bb0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
21bc0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21bd0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
21be0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
21bf0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
21c00 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21c10 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21c20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21c30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21c40 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
21c50 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e  f( (pCrsr = pC->
21c60 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20  pCursor)!=0 ){. 
21c70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
21c80 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
21c90 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
21ca0 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30  atFirst = res==0
21cb0 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64   ?1:0;.    pC->d
21cc0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
21cd0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
21ce0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21cf0 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  TALE;.    pC->ro
21d00 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
21d10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73    }else{.    res
21d20 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 1;.  }.  pC->
21d30 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
21d40 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
21d50 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
21d60 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
21d70 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
21d80 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
21d90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21da0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
21db0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21dc0 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
21dd0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
21de0 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
21df0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
21e00 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
21e10 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
21e20 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
21e30 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
21e40 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
21e50 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
21e60 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
21e70 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
21e80 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
21e90 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
21ea0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
21eb0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
21ec0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
21ed0 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
21ee0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
21ef0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
21f00 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a  See also: Prev.*
21f10 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
21f20 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  v P1 P2 * * *.**
21f30 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
21f40 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
21f50 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
21f60 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
21f70 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
21f80 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
21f90 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
21fa0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
21fb0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
21fc0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
21fd0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
21fe0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
21ff0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
22000 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
22010 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
22020 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
22030 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
22040 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
22050 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
22060 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
22070 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  e..*/.case OP_Pr
22080 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
22090 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
220a0 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Next: {        /
220b0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
220c0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
220d0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
220e0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45   int res;..  CHE
220f0 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
22100 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22110 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22120 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22130 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22140 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
22150 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65  pC==0 ){.    bre
22160 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b  ak;  /* See tick
22170 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a  et #2273 */.  }.
22180 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
22190 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
221a0 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  sr==0 ){.    pC-
221b0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
221c0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72    break;.  }.  r
221d0 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74  es = 1;.  assert
221e0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
221f0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
22200 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  = pOp->opcode==O
22210 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74 65 33  P_Next ? sqlite3
22220 42 74 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c  BtreeNext(pCrsr,
22230 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20 20 20   &res) :.       
22240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22250 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
22260 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 72 73  reePrevious(pCrs
22270 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
22280 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
22290 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  s;.  pC->cacheSt
222a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
222b0 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  LE;.  if( res==0
222c0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
222d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 69 66  ->p2 - 1;.    if
222e0 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d 3e 61  ( pOp->p5 ) p->a
222f0 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 2d  Counter[pOp->p5-
22300 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  1]++;.#ifdef SQL
22310 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
22320 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
22330 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  t++;.#endif.  }.
22340 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
22350 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  id = 0;.  break;
22360 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
22370 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
22380 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67  3 * P5.**.** Reg
22390 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
223a0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
223b0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
223c0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
223d0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
223e0 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
223f0 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
22400 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
22410 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
22420 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
22430 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
22440 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
22450 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
22460 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
22470 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
22480 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
22490 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  nd..**.** This i
224a0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
224b0 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
224c0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
224d0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
224e0 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
224f0 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
22500 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a  se OP_IdxInsert:
22510 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
22520 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22530 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22540 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e   *pCrsr;.  int n
22550 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  Key;.  const cha
22560 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65  r *zKey;..  asse
22570 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22580 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22590 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
225a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
225b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
225c0 30 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  0 );.  pIn2 = &a
225d0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
225e0 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
225f0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
22600 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
22610 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 41  pCursor;.  if( A
22620 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20  LWAYS(pCrsr!=0) 
22630 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
22640 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
22650 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64  .    rc = Expand
22660 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20  Blob(pIn2);.    
22670 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22680 4b 20 29 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20  K ){.      nKey 
22690 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20  = pIn2->n;.     
226a0 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b   zKey = pIn2->z;
226b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
226c0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
226d0 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79  Crsr, zKey, nKey
226e0 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d  , "", 0, 0, pOp-
226f0 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20  >p3, .          
22700 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
22710 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22720 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
22730 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 29 3b  lt : 0).      );
22740 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
22750 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
22760 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43  o==0 );.      pC
22770 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22780 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
22790 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
227a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
227b0 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
227c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63   * *.**.** The c
227d0 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
227e0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
227f0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
22800 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
22810 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
22820 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
22830 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
22840 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
22850 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
22860 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
22870 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
22880 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22890 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
228a0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
228b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
228c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
228d0 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
228e0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
228f0 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
22900 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
22910 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22920 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22930 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22940 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22950 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22960 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
22970 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
22980 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72    if( ALWAYS(pCr
22990 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e  sr!=0) ){.    r.
229a0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
229b0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
229c0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
229d0 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67  ->p3;.    r.flag
229e0 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65  s = 0;.    r.aMe
229f0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
22a00 32 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  2];.    rc = sql
22a10 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
22a20 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
22a30 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
22a40 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
22a50 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
22a60 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
22a70 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
22a80 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
22a90 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
22aa0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
22ab0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
22ac0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22ad0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
22ae0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22af0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
22b00 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
22b10 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
22b20 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
22b30 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
22b40 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
22b50 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
22b60 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
22b70 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
22b80 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
22b90 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
22ba0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
22bb0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
22bc0 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
22bd0 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
22be0 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
22bf0 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
22c00 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
22c10 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22c30 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
22c40 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
22c50 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
22c60 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
22c70 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
22c80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22c90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22ca0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22cb0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22cc0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22cd0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
22ce0 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
22cf0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
22d00 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
22d10 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
22d20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22d30 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
22d40 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
22d50 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
22d60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22d70 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
22d80 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
22d90 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
22da0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
22db0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
22dc0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
22dd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22de0 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
22df0 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
22e00 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
22e10 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
22e20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22e30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
22e40 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
22e50 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
22e60 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
22e70 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
22e80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22e90 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
22ea0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
22eb0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
22ec0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
22ed0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
22ee0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
22ef0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
22f00 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
22f10 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
22f20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
22f30 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
22f40 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
22f50 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
22f60 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
22f70 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
22f80 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
22f90 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
22fa0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
22fb0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
22fc0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
22fd0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
22fe0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
22ff0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
23000 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
23010 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
23020 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
23030 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
23040 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
23050 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
23060 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
23070 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
23080 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
23090 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
230a0 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
230b0 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
230c0 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
230d0 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
230e0 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
230f0 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
23100 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
23110 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
23120 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
23130 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
23140 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54   P3 * P5.**.** T
23150 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
23160 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
23170 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
23180 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
23190 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
231a0 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f  s the ROWID.  Co
231b0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
231c0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
231d0 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
231e0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
231f0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
23200 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20  oring the ROWID 
23210 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
23220 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
23230 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
23240 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
23250 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
23260 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
23270 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
23280 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
23290 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
232a0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
232b0 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79  ero then the key
232c0 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61   value is increa
232d0 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f  sed by an epsilo
232e0 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74  n prior .** to t
232f0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
23300 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f  This makes the o
23310 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
23320 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f  IdxLE..*/.case O
23330 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
23340 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
23350 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20  e OP_IdxGE: {   
23360 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
23370 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23380 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
23390 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
233a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
233b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
233c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
233d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
233e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
233f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
23400 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
23410 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
23420 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
23430 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
23440 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
23450 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
23460 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  >p5==1 );.    as
23470 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
23480 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
23490 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
234a0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
234b0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
234c0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
234d0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
234e0 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
234f0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
23500 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   | UNPACKED_IGNO
23510 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65  RE_ROWID;.    }e
23520 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  lse{.      r.fla
23530 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47  gs = UNPACKED_IG
23540 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20  NORE_ROWID;.    
23550 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  }.    r.aMem = &
23560 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23570 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
23580 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
23590 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a  (pC, &r, &res);.
235a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
235b0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b  ode==OP_IdxLT ){
235c0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65  .      res = -re
235d0 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
235e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
235f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
23600 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b  E );.      res++
23610 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
23620 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70  res>0 ){.      p
23630 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20  c = pOp->p2 - 1 
23640 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
23650 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23660 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
23670 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
23680 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
23690 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
236a0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
236b0 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
236c0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
236d0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
236e0 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
236f0 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
23700 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
23710 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
23720 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
23730 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
23740 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
23750 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
23760 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
23770 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
23780 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
23790 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
237a0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
237b0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
237c0 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
237d0 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
237e0 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
237f0 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
23800 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
23810 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
23820 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
23830 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
23840 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
23850 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
23860 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
23870 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
23880 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
23890 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
238a0 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
238b0 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
238c0 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
238d0 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
238e0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
238f0 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61  er P2.  If no pa
23900 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20  ge .** movement 
23910 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
23920 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
23930 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
23940 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68  s already .** th
23950 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
23960 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
23970 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
23980 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
23990 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  ..** If AUTOVACU
239a0 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
239b0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
239c0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
239d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
239e0 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
239f0 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
23a00 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
23a10 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
23a20 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
23a30 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64  Cnt;.  Vdbe *pVd
23a40 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23  be;.  int iDb;.#
23a50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23a60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
23a70 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f    iCnt = 0;.  fo
23a80 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62  r(pVdbe=db->pVdb
23a90 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20  e; pVdbe; pVdbe 
23aa0 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b  = pVdbe->pNext){
23ab0 0a 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e  .    if( pVdbe->
23ac0 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
23ad0 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e  C_RUN && pVdbe->
23ae0 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26  inVtabMethod<2 &
23af0 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29  & pVdbe->pc>=0 )
23b00 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a  {.      iCnt++;.
23b10 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a      }.  }.#else.
23b20 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74    iCnt = db->act
23b30 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64  iveVdbeCnt;.#end
23b40 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  if.  pOut->flags
23b50 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
23b60 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
23b70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
23b80 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
23b90 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
23ba0 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
23bb0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
23bc0 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
23bd0 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
23be0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
23bf0 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
23c00 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
23c10 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
23c20 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
23c30 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
23c40 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
23c50 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
23c60 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
23c70 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
23c80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
23c90 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
23ca0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
23cb0 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
23cc0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
23cd0 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61  PageMoved(&db->a
23ce0 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c  Db[iDb], iMoved,
23cf0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
23d00 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
23d10 75 6c 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 23  ult = 1;.    }.#
23d20 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
23d30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23d40 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
23d50 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
23d60 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
23d70 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
23d80 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
23d90 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
23da0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
23db0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
23dc0 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
23dd0 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
23de0 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
23df0 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
23e00 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
23e10 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
23e20 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
23e30 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
23e40 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
23e50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
23e60 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
23e70 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
23e80 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
23e90 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
23ea0 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
23eb0 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
23ec0 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
23ed0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
23ee0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
23ef0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
23f00 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
23f10 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
23f20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
23f30 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
23f40 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
23f50 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
23f60 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
23f70 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
23f80 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
23f90 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
23fa0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
23fb0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
23fc0 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
23fd0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
23fe0 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
23ff0 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
24000 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
24010 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
24020 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
24030 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
24040 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
24050 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
24060 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
24070 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
24080 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
24090 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
240a0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
240b0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
240c0 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
240d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
240e0 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
240f0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
24100 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
24110 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
24120 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
24130 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
24140 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
24150 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
24160 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
24170 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33      aMem[pOp->p3
24180 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65  ].u.i += nChange
24190 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
241a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
241b0 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
241c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
241d0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
241e0 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
241f0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
24200 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
24210 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
24220 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
24230 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
24240 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
24250 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
24260 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
24270 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
24280 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
24290 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
242a0 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
242b0 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
242c0 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
242d0 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
242e0 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
242f0 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
24300 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
24310 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
24320 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
24330 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
24340 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
24350 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
24360 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
24370 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
24380 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
24390 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
243a0 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
243b0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
243c0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
243d0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
243e0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
243f0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
24400 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
24410 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
24420 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
24430 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
24440 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
24450 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
24460 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
24470 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
24480 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
24490 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
244a0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
244b0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
244c0 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
244d0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
244e0 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ase */.case OP_C
244f0 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
24500 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
24510 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
24520 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
24530 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
24540 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ..  pgno = 0;.  
24550 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24560 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
24570 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
24580 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
24590 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29   & (1<<pOp->p1))
245a0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
245b0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
245c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
245d0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
245e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
245f0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
24600 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
24610 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
24620 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
24630 45 5f 4c 45 41 46 44 41 54 41 7c 42 54 52 45 45  E_LEAFDATA|BTREE
24640 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
24650 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
24660 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b 0a 20 20  REE_ZERODATA;.  
24670 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
24680 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
24690 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
246a0 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74  , flags);.  pOut
246b0 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
246c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
246d0 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
246e0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
246f0 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72  .** Read and par
24700 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  se all entries f
24710 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  rom the SQLITE_M
24720 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64  ASTER table of d
24730 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68  atabase P1.** th
24740 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45  at match the WHE
24750 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 20 50  RE clause P4.  P
24760 32 20 69 73 20 74 68 65 20 22 66 6f 72 63 65 22  2 is the "force"
24770 20 66 6c 61 67 2e 20 20 20 41 6c 77 61 79 73 20   flag.   Always 
24780 64 6f 0a 2a 2a 20 74 68 65 20 70 61 72 73 69 6e  do.** the parsin
24790 67 20 69 66 20 50 32 20 69 73 20 74 72 75 65 2e  g if P2 is true.
247a0 20 20 49 66 20 50 32 20 69 73 20 66 61 6c 73 65    If P2 is false
247b0 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
247c0 69 6e 65 20 69 73 20 61 0a 2a 2a 20 6e 6f 2d 6f  ine is a.** no-o
247d0 70 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  p if the schema 
247e0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
247f0 20 6c 6f 61 64 65 64 2e 20 20 49 6e 20 6f 74 68   loaded.  In oth
24800 65 72 20 77 6f 72 64 73 2c 20 69 66 20 50 32 0a  er words, if P2.
24810 2a 2a 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  ** is false, the
24820 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
24830 61 62 6c 65 20 69 73 20 6f 6e 6c 79 20 70 61 72  able is only par
24840 73 65 64 20 69 66 20 74 68 65 20 72 65 73 74 20  sed if the rest 
24850 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
24860 20 69 73 20 61 6c 72 65 61 64 79 20 6c 6f 61 64   is already load
24870 65 64 20 69 6e 74 6f 20 74 68 65 20 73 79 6d 62  ed into the symb
24880 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ol table..**.** 
24890 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
248a0 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
248b0 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
248c0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
248d0 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
248e0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
248f0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
24900 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
24910 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
24920 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
24930 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
24940 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
24950 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
24960 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
24970 44 61 74 61 3b 0a 0a 20 20 69 44 62 20 3d 20 70  Data;..  iDb = p
24980 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
24990 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
249a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a  db->nDb );..  /*
249b0 20 49 66 20 70 4f 70 2d 3e 70 32 20 69 73 20 30   If pOp->p2 is 0
249c0 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
249d0 64 65 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  de is being exec
249e0 75 74 65 64 20 74 6f 20 72 65 61 64 20 61 0a 20  uted to read a. 
249f0 20 2a 2a 20 73 69 6e 67 6c 65 20 72 6f 77 2c 20   ** single row, 
24a00 66 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  for example the 
24a10 72 6f 77 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  row correspondin
24a20 67 20 74 6f 20 61 20 6e 65 77 20 69 6e 64 65 78  g to a new index
24a30 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 62 79  .  ** created by
24a40 20 74 68 69 73 20 56 44 42 45 2c 20 66 72 6f 6d   this VDBE, from
24a50 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
24a60 65 72 20 74 61 62 6c 65 2e 20 49 74 20 6f 6e 6c  er table. It onl
24a70 79 0a 20 20 2a 2a 20 64 6f 65 73 20 74 68 69 73  y.  ** does this
24a80 20 69 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   if the correspo
24a90 6e 64 69 6e 67 20 69 6e 2d 6d 65 6d 6f 72 79 20  nding in-memory 
24aa0 73 63 68 65 6d 61 20 69 73 20 63 75 72 72 65 6e  schema is curren
24ab0 74 6c 79 0a 20 20 2a 2a 20 6c 6f 61 64 65 64 2e  tly.  ** loaded.
24ac0 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
24ad0 6e 65 77 20 69 6e 64 65 78 20 64 65 66 69 6e 69  new index defini
24ae0 74 69 6f 6e 20 63 61 6e 20 62 65 20 6c 6f 61 64  tion can be load
24af0 65 64 20 61 6c 6f 6e 67 0a 20 20 2a 2a 20 77 69  ed along.  ** wi
24b00 74 68 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  th the rest of t
24b10 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 69  he schema when i
24b20 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 20  t is required.. 
24b30 20 2a 2a 0a 20 20 2a 2a 20 41 6c 74 68 6f 75 67   **.  ** Althoug
24b40 68 20 74 68 65 20 6d 75 74 65 78 20 6f 6e 20 74  h the mutex on t
24b50 68 65 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  he BtShared obje
24b60 63 74 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ct that correspo
24b70 6e 64 73 20 74 6f 0a 20 20 2a 2a 20 64 61 74 61  nds to.  ** data
24b80 62 61 73 65 20 69 44 62 20 28 74 68 65 20 64 61  base iDb (the da
24b90 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
24ba0 67 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  g the sqlite_mas
24bb0 74 65 72 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72  ter table.  ** r
24bc0 65 61 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  ead by this inst
24bd0 72 75 63 74 69 6f 6e 29 20 69 73 20 63 75 72 72  ruction) is curr
24be0 65 6e 74 6c 79 20 68 65 6c 64 2c 20 69 74 20 69  ently held, it i
24bf0 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 20  s necessary to. 
24c00 20 2a 2a 20 6f 62 74 61 69 6e 20 74 68 65 20 6d   ** obtain the m
24c10 75 74 65 78 65 73 20 6f 6e 20 61 6c 6c 20 61 74  utexes on all at
24c20 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
24c30 20 62 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67   before checking
24c40 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 73 63 68   if.  ** the sch
24c50 65 6d 61 20 6f 66 20 69 44 62 20 69 73 20 6c 6f  ema of iDb is lo
24c60 61 64 65 64 2e 20 54 68 69 73 20 69 73 20 62 65  aded. This is be
24c70 63 61 75 73 65 2c 20 61 74 20 74 68 65 20 73 74  cause, at the st
24c80 61 72 74 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  art of.  ** the 
24c90 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 20 63  sqlite3_exec() c
24ca0 61 6c 6c 20 62 65 6c 6f 77 2c 20 53 51 4c 69 74  all below, SQLit
24cb0 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 0a 20  e will invoke . 
24cc0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
24cd0 45 6e 74 65 72 41 6c 6c 28 29 2e 20 49 66 20 61  EnterAll(). If a
24ce0 6c 6c 20 6d 75 74 65 78 65 73 20 61 72 65 20 6e  ll mutexes are n
24cf0 6f 74 20 61 6c 72 65 61 64 79 20 68 65 6c 64 2c  ot already held,
24d00 20 74 68 65 0a 20 20 2a 2a 20 69 44 62 20 6d 75   the.  ** iDb mu
24d10 74 65 78 20 6d 61 79 20 62 65 20 74 65 6d 70 6f  tex may be tempo
24d20 72 61 72 69 6c 79 20 72 65 6c 65 61 73 65 64 20  rarily released 
24d30 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
24d40 6b 2e 20 49 66 20 0a 20 20 2a 2a 20 74 68 69 73  k. If .  ** this
24d50 20 68 61 70 70 65 6e 73 2c 20 74 68 65 6e 20 73   happens, then s
24d60 6f 6d 65 20 6f 74 68 65 72 20 74 68 72 65 61 64  ome other thread
24d70 20 6d 61 79 20 64 65 6c 65 74 65 20 74 68 65 20   may delete the 
24d80 69 6e 2d 6d 65 6d 6f 72 79 20 0a 20 20 2a 2a 20  in-memory .  ** 
24d90 73 63 68 65 6d 61 20 6f 66 20 64 61 74 61 62 61  schema of databa
24da0 73 65 20 69 44 62 20 62 65 66 6f 72 65 20 74 68  se iDb before th
24db0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
24dc0 72 75 6e 73 2e 20 54 68 65 20 73 63 68 65 6d 61  runs. The schema
24dd0 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20 62  .  ** will not b
24de0 65 20 72 65 6c 6f 61 64 65 64 20 62 65 63 75 61  e reloaded becua
24df0 73 65 20 74 68 65 20 64 62 2d 3e 69 6e 69 74 2e  se the db->init.
24e00 62 75 73 79 20 66 6c 61 67 20 69 73 20 73 65 74  busy flag is set
24e10 2e 20 54 68 69 73 0a 20 20 2a 2a 20 63 61 6e 20  . This.  ** can 
24e20 72 65 73 75 6c 74 20 69 6e 20 61 20 22 6e 6f 20  result in a "no 
24e30 73 75 63 68 20 74 61 62 6c 65 3a 20 73 71 6c 69  such table: sqli
24e40 74 65 5f 6d 61 73 74 65 72 22 20 6f 72 20 22 6d  te_master" or "m
24e50 61 6c 66 6f 72 6d 65 64 0a 20 20 2a 2a 20 64 61  alformed.  ** da
24e60 74 61 62 61 73 65 20 73 63 68 65 6d 61 22 20 65  tabase schema" e
24e70 72 72 6f 72 20 62 65 69 6e 67 20 72 65 74 75 72  rror being retur
24e80 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
24e90 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
24ea0 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
24eb0 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
24ec0 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 73 71  Db].pBt) );.  sq
24ed0 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
24ee0 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28 20 70 4f  ll(db);.  if( pO
24ef0 70 2d 3e 70 32 20 7c 7c 20 44 62 48 61 73 50 72  p->p2 || DbHasPr
24f00 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
24f10 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
24f20 20 29 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20   ){.    zMaster 
24f30 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
24f40 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Db);.    initDat
24f50 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
24f60 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
24f70 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
24f80 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
24f90 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
24fa0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
24fb0 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
24fc0 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
24fd0 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
24fe0 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
24ff0 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
25000 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
25010 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
25020 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
25030 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
25040 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
25050 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
25060 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25070 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61   (void)sqlite3Sa
25080 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
25090 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
250a0 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
250b0 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
250c0 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
250d0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
250e0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
250f0 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
25100 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
25110 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
25120 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
25130 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
25140 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
25150 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
25160 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
25170 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
25180 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
25190 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
251a0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
251b0 20 30 3b 0a 20 20 20 20 20 20 28 76 6f 69 64 29   0;.      (void)
251c0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
251d0 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  db);.    }.  }. 
251e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61   sqlite3BtreeLea
251f0 76 65 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28  veAll(db);.  if(
25200 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
25210 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  M ){.    goto no
25220 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
25230 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
25240 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
25250 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
25260 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
25270 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
25280 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
25290 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
252a0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
252b0 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
252c0 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
252d0 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
252e0 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
252f0 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
25300 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
25310 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
25320 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
25330 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
25340 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
25350 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
25360 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
25370 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25380 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
25390 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
253a0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
253b0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65   pOp->p1);.  bre
253c0 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
253d0 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
253e0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
253f0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
25400 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
25410 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
25420 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
25430 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
25440 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
25450 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
25460 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
25470 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
25480 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
25490 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
254a0 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
254b0 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
254c0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
254d0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
254e0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
254f0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
25500 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
25510 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
25520 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
25530 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
25540 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
25550 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
25560 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25570 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
25580 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
25590 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
255a0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
255b0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
255c0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
255d0 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
255e0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
255f0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
25600 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
25610 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
25620 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
25630 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
25640 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
25650 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
25660 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
25670 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
25680 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78  ase OP_DropIndex
25690 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
256a0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
256b0 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
256c0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
256d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
256e0 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
256f0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
25700 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
25710 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
25720 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
25730 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
25740 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
25750 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
25760 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
25770 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
25780 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
25790 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
257a0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
257b0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
257c0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
257d0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
257e0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
257f0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
25800 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
25810 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
25820 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
25830 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
25840 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
25850 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
25860 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
25870 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
25880 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
25890 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
258a0 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
258b0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
258c0 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
258d0 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
258e0 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
258f0 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
25900 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
25910 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
25920 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
25930 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
25940 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
25950 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
25960 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
25970 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
25980 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
25990 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
259a0 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
259b0 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
259c0 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
259d0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
259e0 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
259f0 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
25a00 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
25a10 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
25a20 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
25a30 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
25a40 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
25a50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
25a60 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
25a70 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
25a80 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
25a90 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
25aa0 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
25ab0 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
25ac0 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
25ad0 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
25ae0 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
25af0 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
25b00 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
25b10 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
25b20 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
25b30 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
25b40 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
25b50 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
25b60 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
25b70 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
25b80 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
25b90 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
25ba0 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
25bb0 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
25bc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
25bd0 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
25be0 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
25bf0 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
25c00 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
25c10 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
25c20 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
25c30 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
25c40 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
25c50 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
25c60 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
25c70 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
25c80 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
25c90 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
25ca0 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
25cb0 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
25cc0 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
25cd0 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
25ce0 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
25cf0 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
25d00 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
25d10 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f  .  .  nRoot = pO
25d20 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
25d30 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
25d40 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
25d50 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
25d60 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
25d70 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
25d80 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
25d90 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
25da0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
25db0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
25dc0 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
25dd0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
25de0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
25df0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
25e00 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
25e10 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
25e20 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
25e30 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
25e40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
25e50 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f   for(j=0; j<nRoo
25e60 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f  t; j++){.    aRo
25e70 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c  ot[j] = (int)sql
25e80 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
25e90 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a  (&pIn1[j]);.  }.
25ea0 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a    aRoot[j] = 0;.
25eb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25ec0 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  5<db->nDb );.  a
25ed0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
25ee0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
25ef0 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d  p5))!=0 );.  z =
25f00 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
25f10 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
25f20 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
25f30 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f60 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
25f70 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
25f80 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 52  te3DbFree(db, aR
25f90 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75  oot);.  pnErr->u
25fa0 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71  .i -= nErr;.  sq
25fb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
25fc0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
25fd0 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
25fe0 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
25ff0 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
26000 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
26010 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
26020 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
26030 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
26040 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
26050 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
26060 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
26070 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
26080 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
26090 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
260a0 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
260b0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
260c0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
260d0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
260e0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
260f0 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
26100 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  * *.**.** Insert
26110 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
26120 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
26130 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
26140 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
26150 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
26160 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
26170 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
26180 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
26190 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
261a0 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
261b0 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
261c0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
261d0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
261e0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
261f0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
26200 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
26210 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
26220 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
26230 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
26240 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
26250 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
26260 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
26270 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
26280 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
26290 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
262a0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
262b0 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
262c0 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
262d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
262e0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
262f0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
26300 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  *.**.** Extract 
26310 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
26320 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
26330 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
26340 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
26350 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
26360 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
26370 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
26380 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
26390 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
263a0 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
263b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
263c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
263d0 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
263e0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
263f0 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
26400 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
26410 52 52 55 50 54 3b 0a 20 20 70 49 6e 31 20 3d 20  RRUPT;.  pIn1 = 
26420 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
26430 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
26440 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
26450 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
26460 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
26470 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
26480 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
26490 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
264a0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
264b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
264c0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
264d0 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
264e0 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
264f0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
26500 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
26510 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
26520 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
26530 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
26540 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
26550 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
26560 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
26570 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
26580 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
26590 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
265a0 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
265b0 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
265c0 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
265d0 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
265e0 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
265f0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
26600 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
26610 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
26620 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
26630 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
26640 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
26650 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
26660 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
26670 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
26680 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
26690 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
266a0 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
266b0 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
266c0 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
266d0 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
266e0 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
266f0 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
26700 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
26710 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
26720 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
26730 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
26740 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
26750 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
26760 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
26770 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
26780 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
26790 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
267a0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
267b0 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
267c0 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
267d0 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
267e0 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
267f0 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
26800 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
26810 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
26820 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
26830 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
26840 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
26850 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
26860 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
26870 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
26880 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
26890 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
268a0 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
268b0 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
268c0 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
268d0 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
268e0 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
268f0 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
26900 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
26910 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
26920 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
26930 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
26940 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
26950 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
26960 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
26970 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
26980 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
26990 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
269a0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
269b0 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
269c0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
269d0 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
269e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
269f0 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
26a00 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
26a10 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
26a20 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
26a30 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
26a40 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
26a50 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
26a60 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
26a70 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
26a80 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
26a90 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
26aa0 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
26ab0 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
26ac0 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
26ad0 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
26ae0 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
26af0 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
26b00 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
26b10 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
26b20 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
26b30 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
26b40 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
26b50 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
26b60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
26b70 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
26b80 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
26b90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
26ba0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
26bb0 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
26bc0 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
26bd0 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
26be0 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
26bf0 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
26c00 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
26c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69  (u8)(iSet>=0 ? i
26c40 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66  Set & 0xf : 0xff
26c50 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20    pIn3->u.i);.  
26c80 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a    if( exists ){.
26c90 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
26ca0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
26cb0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
26cc0 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
26cd0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
26ce0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
26cf0 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
26d00 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
26d10 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
26d20 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
26d30 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
26d40 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
26d50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
26d60 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
26d70 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
26d80 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
26d90 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
26da0 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
26db0 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
26dc0 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
26dd0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
26de0 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
26df0 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
26e00 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
26e10 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
26e20 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
26e30 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
26e40 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
26e50 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
26e60 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
26e70 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
26e80 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
26e90 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
26ea0 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
26eb0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
26ec0 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
26ed0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
26ee0 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
26ef0 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
26f00 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
26f10 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
26f20 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
26f30 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
26f40 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
26f50 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
26f60 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
26f70 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
26f80 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
26f90 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
26fa0 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
26fb0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
26fc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
26fd0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
26fe0 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
26ff0 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
27000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
27010 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
27020 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
27030 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
27040 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
27050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
27060 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
27070 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
27080 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
27090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
270a0 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
270b0 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
270c0 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
270d0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
270e0 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
270f0 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
27100 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
27110 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
27120 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
27130 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
27140 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
27150 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
27160 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
27170 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
27180 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
27190 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
271a0 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
271b0 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
271c0 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
271d0 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
271e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
271f0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
27200 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
27210 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
27220 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
27230 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
27240 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
27250 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
27260 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
27270 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
27280 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
27290 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
272a0 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
272b0 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
272c0 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
272d0 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
272e0 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
272f0 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
27300 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
27310 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
27320 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
27330 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
27340 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
27350 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
27360 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
27370 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
27380 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
27390 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
273a0 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
273b0 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
273c0 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
273d0 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
273e0 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
273f0 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
27400 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
27410 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
27420 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
27430 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
27440 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
27450 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
27460 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
27470 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
27480 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
27490 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
274a0 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
274b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
274c0 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
274d0 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
274e0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
274f0 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
27500 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
27510 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
27520 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
27530 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
27540 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
27550 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
27560 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
27570 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
27580 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
27590 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
275a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
275b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f  zErrMsg, db, "to
275c0 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
275d0 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
275e0 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  on");.    break;
275f0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
27600 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20  ter pRt is used 
27610 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d  to store the mem
27620 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20  ory required to 
27630 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20  save the state. 
27640 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65   ** of the curre
27650 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20  nt program, and 
27660 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
27670 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74  red at runtime t
27680 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74  o execute.  ** t
27690 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
276a0 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67  am. If this trig
276b0 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72  ger has been fir
276c0 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20  ed before, then 
276d0 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72  pRt .  ** is alr
276e0 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  eady allocated. 
276f0 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75  Otherwise, it mu
27700 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
27710 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52  d.  */.  if( (pR
27720 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61  t->flags&MEM_Fra
27730 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  me)==0 ){.    /*
27740 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
27750 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
27760 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
27770 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
27780 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
27790 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
277a0 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
277b0 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
277c0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
277d0 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
277e0 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
277f0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
27800 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
27810 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
27820 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
27830 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
27840 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
27850 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
27860 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
27870 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
27880 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74  ->nCsr;.    nByt
27890 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
278a0 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
278b0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
278c0 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
278d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
278e0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
278f0 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
27900 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70 46 72 61  sor *);.    pFra
27910 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
27920 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
27930 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
27940 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
27950 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
27960 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
27970 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
27980 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
27990 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
279a0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
279b0 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
279c0 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
279d0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
279e0 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
279f0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
27a00 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
27a10 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
27a20 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61  c = pc;.    pFra
27a30 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
27a40 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
27a50 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
27a60 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
27a70 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
27a80 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
27a90 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
27aa0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
27ab0 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
27ac0 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
27ad0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
27ae0 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
27af0 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20 20 70 45  ->token;..    pE
27b00 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
27b10 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
27b20 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
27b30 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
27b40 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
27b50 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
27b60 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
27b70 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  m->flags = MEM_N
27b80 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ull;.      pMem-
27b90 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a  >db = db;.    }.
27ba0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72    }else{.    pFr
27bb0 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72  ame = pRt->u.pFr
27bc0 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ame;.    assert(
27bd0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
27be0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
27bf0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
27c00 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  m );.    assert(
27c10 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
27c20 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
27c30 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
27c40 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  ( pc==pFrame->pc
27c50 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
27c60 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
27c70 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
27c80 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
27c90 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d  >lastRowid = db-
27ca0 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46  >lastRowid;.  pF
27cb0 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
27cc0 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d  p->nChange;.  p-
27cd0 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
27ce0 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
27cf0 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20  me;.  p->aMem = 
27d00 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d  aMem = &VdbeFram
27d10 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d  eMem(pFrame)[-1]
27d20 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
27d30 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
27d40 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
27d50 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
27d60 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
27d70 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
27d80 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
27d90 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  m+1];.  p->aOp =
27da0 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d   aOp = pProgram-
27db0 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d  >aOp;.  p->nOp =
27dc0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a   pProgram->nOp;.
27dd0 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20 20 62 72    pc = -1;..  br
27de0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27df0 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a  e: Param P1 P2 *
27e00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
27e10 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65  opcode is only e
27e20 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73  ver present in s
27e30 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c  ub-programs call
27e40 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f  ed via the .** O
27e50 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
27e60 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61  ction. Copy a va
27e70 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74  lue currently st
27e80 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79  ored in a memory
27e90 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65   .** cell of the
27ea0 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74   calling (parent
27eb0 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20  ) frame to cell 
27ec0 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  P2 in the curren
27ed0 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64  t frames .** add
27ee0 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73  ress space. This
27ef0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
27f00 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ger programs to 
27f10 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a  access the new.*
27f20 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76   .** and old.* v
27f30 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  alues..**.** The
27f40 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
27f50 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
27f60 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65  nt frame is dete
27f70 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67  rmined by adding
27f80 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
27f90 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
27fa0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
27fb0 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
27fc0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69   to the.** calli
27fd0 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ng OP_Program in
27fe0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
27ff0 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20  se OP_Param: {  
28000 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
28010 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
28020 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
28030 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a  me;.  Mem *pIn;.
28040 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
28050 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
28060 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
28070 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
28080 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
28090 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
280a0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
280b0 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
280c0 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
280d0 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
280e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
280f0 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
28100 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28110 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
28120 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
28130 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
28140 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
28150 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
28160 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
28170 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
28180 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
28190 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
281a0 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
281b0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
281c0 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
281d0 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
281e0 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
281f0 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
28200 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
28210 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
28220 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
28230 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
28240 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
28250 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
28260 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
28270 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
28280 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
28290 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
282a0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
282b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
282c0 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
282d0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
282e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
282f0 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
28300 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
28310 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
28320 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
28330 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
28340 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
28350 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
28360 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
28370 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
28380 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
28390 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
283a0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
283b0 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
283c0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
283d0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
283e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
283f0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
28400 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
28410 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
28420 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
28430 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
28440 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
28450 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
28460 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
28470 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
28480 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
28490 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
284a0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
284b0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
284c0 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
284d0 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
284e0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
284f0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
28500 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66      if( db->nDef
28510 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 29 20 70  erredCons==0 ) p
28520 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
28530 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
28540 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
28550 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
28560 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
28570 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23  k;.}.#endif /* #
28580 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28590 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a  IT_FOREIGN_KEY *
285a0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
285b0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
285c0 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MENT./* Opcode: 
285d0 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a  MemMax P1 P2 * *
285e0 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
285f0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
28600 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
28610 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74  his VM (the root
28620 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66   frame is.** dif
28630 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
28640 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66  current frame if
28650 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
28660 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
28670 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ted.** within a 
28680 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65  sub-program). Se
28690 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
286a0 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
286b0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a  e maximum of .**
286c0 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c   its current val
286d0 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ue and the value
286e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
286f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
28700 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61  ruction throws a
28710 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d  n error if the m
28720 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f  emory cell is no
28730 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61  t initially.** a
28740 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
28750 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20  se OP_MemMax: { 
28760 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
28770 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20  .  Mem *pIn1;.  
28780 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
28790 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  e;.  if( p->pFra
287a0 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46  me ){.    for(pF
287b0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
287c0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
287d0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
287e0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49  pParent);.    pI
287f0 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  n1 = &pFrame->aM
28800 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
28810 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d  else{.    pIn1 =
28820 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
28830 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
28840 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
28850 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
28860 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
28870 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28880 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
28890 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
288a0 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
288b0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
288c0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
288d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
288e0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
288f0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
28900 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
28910 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28920 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
28930 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
28940 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
28950 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
28960 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
28970 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
28980 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
28990 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
289a0 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
289b0 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
289c0 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
289d0 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
289e0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
289f0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
28a00 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
28a10 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
28a20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28a30 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
28a40 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
28a50 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
28a60 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
28a70 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
28a80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28a90 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a  e: IfNeg P1 P2 *
28aa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
28ab0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
28ac0 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
28ad0 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
28ae0 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
28af0 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
28b00 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
28b10 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
28b20 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
28b30 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
28b40 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
28b50 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
28b60 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
28b70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
28b80 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  eg: {        /* 
28b90 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
28ba0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
28bb0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
28bc0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
28bd0 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
28be0 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20  1->u.i<0 ){.    
28bf0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
28c00 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
28c10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
28c20 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
28c30 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  *.**.** The regi
28c40 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
28c50 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
28c60 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33    Add literal P3
28c70 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   to the.** value
28c80 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
28c90 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20    If the result 
28ca0 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75  is exactly 0, ju
28cb0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
28cc0 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
28cd0 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
28ce0 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
28cf0 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
28d00 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
28d10 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
28d20 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
28d30 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
28d40 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
28d50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  _IfZero: {      
28d60 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
28d70 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
28d80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28d90 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
28da0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
28db0 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
28dc0 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  p3;.  if( pIn1->
28dd0 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70  u.i==0 ){.     p
28de0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
28df0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28e00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
28e10 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50  tep * P2 P3 P4 P
28e20 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
28e30 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
28e40 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
28e50 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
28e60 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
28e70 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
28e80 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
28e90 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
28ea0 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
28eb0 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
28ec0 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a  .  Use register.
28ed0 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63  ** P3 as the acc
28ee0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
28ef0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
28f00 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
28f10 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
28f20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
28f30 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  s..*/.case OP_Ag
28f40 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e  gStep: {.  int n
28f50 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
28f60 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70   *pMem;.  Mem *p
28f70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Rec;.  sqlite3_c
28f80 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
28f90 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
28fa0 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  Val;..  n = pOp-
28fb0 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p5;.  assert( n
28fc0 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20  >=0 );.  pRec = 
28fd0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
28fe0 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
28ff0 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
29000 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20  Val || n==0 );. 
29010 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
29020 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  ++, pRec++){.   
29030 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63   apVal[i] = pRec
29040 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
29050 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52  eMemStoreType(pR
29060 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70  ec);.  }.  ctx.p
29070 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
29080 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  Func;.  assert( 
29090 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
290a0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
290b0 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
290c0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
290d0 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
290e0 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
290f0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
29100 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
29110 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
29120 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
29130 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
29140 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
29150 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
29160 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
29170 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
29180 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
29190 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
291a0 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
291b0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
291c0 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
291d0 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
291e0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
291f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
29200 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
29210 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
29220 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
29230 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
29240 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
29250 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  ;.  if( ctx.isEr
29260 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
29270 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
29280 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
29290 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
292a0 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
292b0 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
292c0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
292d0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
292e0 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65  e(&ctx.s);.  bre
292f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29300 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
29310 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
29320 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
29330 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
29340 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
29350 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
29360 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
29370 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
29380 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
29390 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
293a0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
293b0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
293c0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
293d0 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
293e0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
293f0 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
29400 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
29410 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
29420 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
29430 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
29440 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
29450 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
29460 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
29470 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
29480 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
29490 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
294a0 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
294b0 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
294c0 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
294d0 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
294e0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
294f0 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
29500 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
29510 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
29520 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
29530 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29540 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
29550 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
29560 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29570 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29580 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
29590 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
295a0 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
295b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
295c0 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
295d0 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
295e0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
295f0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
29600 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
29610 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
29620 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
29630 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
29640 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
29650 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
29660 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
29670 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
29680 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
29690 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
296a0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
296b0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
296c0 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e  ;.}...#if !defin
296d0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
296e0 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
296f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
29700 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
29710 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
29720 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
29730 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
29740 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
29750 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
29760 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
29770 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
29780 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
29790 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
297a0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
297b0 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
297c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
297d0 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c  uum: {.  if( sql
297e0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
297f0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
29800 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20  ue_to_misuse; . 
29810 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
29820 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
29830 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73  sg, db);.  if( s
29840 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
29850 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
29860 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
29870 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
29880 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
29890 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
298a0 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
298b0 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
298c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
298d0 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
298e0 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
298f0 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
29900 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
29910 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
29920 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
29930 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
29940 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
29950 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
29960 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
29970 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
29980 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
29990 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
299a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
299b0 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
299c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
299d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
299e0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
299f0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
29a00 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
29a10 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
29a20 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
29a30 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
29a40 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
29a50 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
29a60 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
29a70 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
29a80 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
29a90 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
29aa0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
29ab0 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
29ac0 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
29ad0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
29ae0 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
29af0 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
29b00 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
29b10 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
29b20 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
29b30 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
29b40 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
29b50 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
29b60 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
29b70 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
29b80 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
29b90 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
29ba0 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
29bb0 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
29bc0 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
29bd0 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
29be0 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
29bf0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
29c00 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
29c10 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
29c20 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
29c30 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
29c40 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
29c50 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
29c60 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
29c70 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
29c80 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
29c90 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
29ca0 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
29cb0 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
29cc0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
29cd0 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
29ce0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
29cf0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
29d00 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
29d10 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
29d20 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
29d30 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
29d40 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
29d50 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
29d60 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
29d70 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
29d80 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
29d90 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
29da0 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
29db0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
29dc0 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
29dd0 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
29de0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
29df0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
29e00 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
29e10 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
29e20 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
29e30 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
29e40 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
29e50 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
29e60 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
29e70 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
29e80 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
29e90 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
29ea0 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
29eb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
29ec0 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
29ed0 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
29ee0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
29ef0 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
29f00 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
29f10 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
29f20 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
29f30 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
29f40 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
29f50 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
29f60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
29f70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
29f80 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
29f90 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
29fa0 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
29fb0 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
29fc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
29fd0 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
29fe0 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
29ff0 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2a000 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2a010 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2a020 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2a030 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2a040 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2a050 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2a060 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2a070 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2a080 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2a090 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2a0a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2a0b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2a0c0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2a0d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a0e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a0f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2a100 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2a110 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2a120 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2a130 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2a140 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2a150 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2a160 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2a170 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2a180 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2a190 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2a1a0 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2a1b0 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2a1c0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2a1d0 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2a1e0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2a1f0 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2a200 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2a210 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2a220 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2a230 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2a240 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2a250 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2a260 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2a270 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2a280 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2a290 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2a2a0 66 28 20 70 56 54 61 62 20 29 7b 0a 20 20 20 20  f( pVTab ){.    
2a2b0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2a2c0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2a2d0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
2a2e0 70 56 54 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45  pVTab->pVtab->zE
2a2f0 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 54 61 62  rrMsg;.    pVTab
2a300 2d 3e 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  ->pVtab->zErrMsg
2a310 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
2a320 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2a330 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a340 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2a350 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a360 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2a370 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
2a380 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2a390 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
2a3a0 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
2a3b0 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
2a3c0 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
2a3d0 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66  eate method.** f
2a3e0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
2a3f0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
2a400 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  e: {.  rc = sqli
2a410 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2a420 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2a430 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45  Op->p4.z, &p->zE
2a440 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b  rrMsg);.  break;
2a450 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2a460 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a470 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2a480 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2a490 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2a4a0 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
2a4b0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2a4c0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
2a4d0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
2a4e0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
2a4f0 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
2a500 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
2a510 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
2a520 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
2a530 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61  oy: {.  p->inVta
2a540 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72  bMethod = 2;.  r
2a550 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
2a560 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
2a570 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2a580 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  z);.  p->inVtabM
2a590 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65  ethod = 0;.  bre
2a5a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2a5b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2a5c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2a5d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a5e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2a5f0 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
2a600 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2a610 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2a620 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
2a630 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
2a640 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2a650 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
2a660 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
2a670 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
2a680 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
2a690 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
2a6a0 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
2a6b0 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
2a6c0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
2a6d0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
2a6e0 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c  sor *pCur;.  sql
2a6f0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2a700 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
2a710 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2a720 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Vtab;.  sqlite3_
2a730 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2a740 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ..  pCur = 0;.  
2a750 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b  pVtabCursor = 0;
2a760 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2a770 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2a780 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2a790 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2a7a0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2a7b0 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26   assert(pVtab &&
2a7c0 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28   pModule);.  if(
2a7d0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
2a7e0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
2a7f0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2a800 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
2a810 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
2a820 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2a830 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2a840 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2a850 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
2a860 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
2a870 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
2a880 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
2a890 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
2a8a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a8b0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28 20  o_misuse;.  if( 
2a8c0 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b  SQLITE_OK==rc ){
2a8d0 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
2a8e0 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
2a8f0 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
2a900 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75  s */.    pVtabCu
2a910 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  rsor->pVtab = pV
2a920 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
2a930 74 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72  tialise vdbe cur
2a940 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
2a950 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
2a960 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
2a970 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20  p1, 0, -1, 0);. 
2a980 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20     if( pCur ){. 
2a990 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62       pCur->pVtab
2a9a0 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75  Cursor = pVtabCu
2a9b0 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72  rsor;.      pCur
2a9c0 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61  ->pModule = pVta
2a9d0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e  bCursor->pVtab->
2a9e0 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c  pModule;.    }el
2a9f0 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61  se{.      db->ma
2aa00 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2aa10 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78        pModule->x
2aa20 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f  Close(pVtabCurso
2aa30 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2aa40 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2aa50 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2aa60 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2aa70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2aa80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2aa90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
2aaa0 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
2aab0 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  *.**.** P1 is a 
2aac0 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
2aad0 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
2aae0 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
2aaf0 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
2ab00 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
2ab10 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
2ab20 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
2ab30 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
2ab40 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
2ab50 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
2ab60 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
2ab70 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
2ab80 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
2ab90 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
2aba0 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
2abb0 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
2abc0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
2abd0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2abe0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
2abf0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
2ac00 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2ac10 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
2ac20 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
2ac30 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
2ac40 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
2ac50 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
2ac60 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
2ac70 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
2ac80 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
2ac90 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
2aca0 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
2acb0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
2acc0 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
2acd0 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
2ace0 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
2acf0 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
2ad00 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
2ad10 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
2ad20 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
2ad30 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
2ad40 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
2ad50 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
2ad60 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
2ad70 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
2ad80 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
2ad90 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
2ada0 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
2adb0 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
2adc0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2add0 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
2ade0 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
2adf0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2ae00 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
2ae10 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
2ae20 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
2ae30 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2ae40 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2ae50 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2ae60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2ae70 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
2ae80 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
2ae90 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
2aea0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2aeb0 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
2aec0 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
2aed0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2aee0 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
2aef0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
2af00 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
2af10 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2af20 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
2af30 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
2af40 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
2af50 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
2af60 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2af70 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2af80 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
2af90 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
2afa0 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
2afb0 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
2afc0 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
2afd0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
2afe0 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
2aff0 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
2b000 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
2b010 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
2b020 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
2b030 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2b040 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
2b050 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
2b060 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
2b070 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
2b080 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
2b090 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
2b0a0 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
2b0b0 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1];.      sqlite
2b0c0 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2b0d0 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20  e(apArg[i]);.   
2b0e0 20 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69   }..    if( sqli
2b0f0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
2b100 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2b110 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
2b120 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2b130 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
2b140 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
2b150 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
2b160 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
2b170 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
2b180 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2b190 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
2b1a0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
2b1b0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
2b1c0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2b1d0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
2b1e0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
2b1f0 30 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  0;.    if( rc==S
2b200 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2b210 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
2b220 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f  >xEof(pVtabCurso
2b230 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  r);.    }.    if
2b240 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2b250 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
2b260 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2b270 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  ;..    if( res )
2b280 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2b290 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
2b2a0 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
2b2b0 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
2b2c0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2b2d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2b2e0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2b2f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b300 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2b310 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
2b320 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2b330 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
2b340 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
2b350 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
2b360 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
2b370 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
2b380 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
2b390 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
2b3a0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
2b3b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
2b3c0 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
2b3d0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2b3e0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2b3f0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2b400 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
2b410 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2b420 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
2b430 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
2b440 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2b450 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
2b460 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2b470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b480 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2b490 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
2b4a0 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
2b4b0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p3];.  if( pCu
2b4c0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
2b4d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b4e0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
2b4f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
2b500 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
2b510 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2b520 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2b530 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2b540 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
2b550 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
2b560 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
2b570 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
2b580 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
2b590 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
2b5a0 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
2b5b0 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
2b5c0 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
2b5d0 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
2b5e0 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
2b5f0 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
2b600 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
2b610 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
2b620 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
2b630 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
2b640 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
2b650 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
2b660 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2b670 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
2b680 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
2b690 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
2b6a0 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
2b6b0 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ull);..  if( sql
2b6c0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
2b6d0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2b6e0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
2b6f0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
2b700 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
2b710 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
2b720 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
2b730 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2b740 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2b750 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
2b760 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
2b770 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
2b780 20 30 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65   0;.  if( sConte
2b790 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
2b7a0 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
2b7b0 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
2b7c0 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
2b7d0 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
2b7e0 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67  on to the P3 reg
2b7f0 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64  ister. We.  ** d
2b800 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73  o this regardles
2b810 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
2b820 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63  not an error occ
2b830 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20  urred to ensure 
2b840 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  any.  ** dynamic
2b850 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73   allocation in s
2b860 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d  Context.s (a Mem
2b870 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c   struct) is  rel
2b880 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71  eased..  */.  sq
2b890 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2b8a0 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78  ncoding(&sContex
2b8b0 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  t.s, encoding);.
2b8c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b8d0 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f  Move(pDest, &sCo
2b8e0 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49  ntext.s);.  REGI
2b8f0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2b900 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
2b910 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2b920 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
2b930 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
2b940 28 64 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  (db) ){.    goto
2b950 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2b960 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20  suse;.  }.  if( 
2b970 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2b980 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2b990 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2b9a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b9b0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2b9c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2b9d0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2b9e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2b9f0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2ba00 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2ba10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2ba20 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2ba30 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2ba40 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2ba50 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2ba60 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2ba70 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2ba80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2ba90 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2baa0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2bab0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2bac0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2bad0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2bae0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2baf0 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2bb00 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2bb10 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2bb20 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2bb30 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2bb40 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2bb50 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2bb60 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2bb70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2bb80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2bb90 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2bba0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2bbb0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2bbc0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2bbd0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2bbe0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2bbf0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2bc00 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2bc10 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2bc20 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2bc30 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2bc40 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2bc50 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2bc60 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2bc70 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2bc80 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2bc90 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2bca0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2bcb0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2bcc0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2bcd0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2bce0 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2bcf0 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2bd00 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2bd10 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2bd20 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2bd30 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2bd40 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2bd50 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2bd60 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2bd70 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2bd80 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2bd90 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
2bda0 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2bdb0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2bdc0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 70 2d 3e 69  o_misuse;.  p->i
2bdd0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
2bde0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2bdf0 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
2be00 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e  abCursor);.  p->
2be10 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
2be20 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2be30 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2be40 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
2be50 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
2be60 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
2be70 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  sg = 0;.  if( rc
2be80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2be90 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2bea0 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
2beb0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  abCursor);.  }. 
2bec0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2bed0 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
2bee0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2bef0 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72 65 73  use;..  if( !res
2bf00 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
2bf10 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
2bf20 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70  p to P2 */.    p
2bf30 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2bf40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2bf50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2bf60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2bf70 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2bf80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bf90 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2bfa0 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
2bfb0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2bfc0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2bfd0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2bfe0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2bff0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2c000 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
2c010 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
2c020 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
2c030 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
2c040 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
2c050 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
2c060 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
2c070 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
2c080 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
2c090 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
2c0a0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2c0b0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
2c0c0 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
2c0d0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2c0e0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
2c0f0 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  me = &aMem[pOp->
2c100 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2c110 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
2c120 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49  Rename );.  REGI
2c130 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2c140 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73  p1, pName);.  as
2c150 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61  sert( pName->fla
2c160 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a  gs & MEM_Str );.
2c170 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2c180 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
2c190 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2c1a0 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 56  isuse;.  rc = pV
2c1b0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2c1c0 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
2c1d0 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65  me->z);.  sqlite
2c1e0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
2c1f0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
2c200 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
2c210 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
2c220 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
2c230 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2c240 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
2c250 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2c260 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  se;..  break;.}.
2c270 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2c280 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c290 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2c2a0 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
2c2b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2c2c0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2c2d0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2c2e0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2c2f0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2c300 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
2c310 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2c320 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
2c330 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
2c340 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
2c350 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
2c360 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
2c370 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
2c380 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
2c390 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
2c3a0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2c3b0 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
2c3c0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2c3d0 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
2c3e0 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
2c3f0 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
2c400 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
2c410 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
2c420 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
2c430 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
2c440 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
2c450 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
2c460 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
2c470 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
2c480 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
2c490 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
2c4a0 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
2c4b0 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
2c4c0 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
2c4d0 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
2c4e0 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
2c4f0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2c500 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
2c510 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
2c520 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
2c530 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
2c540 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
2c550 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
2c560 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
2c570 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
2c580 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
2c590 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
2c5a0 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
2c5b0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
2c5c0 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
2c5d0 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
2c5e0 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
2c5f0 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
2c600 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
2c610 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
2c620 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
2c630 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
2c640 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
2c650 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
2c660 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
2c670 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
2c680 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
2c690 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
2c6a0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
2c6b0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
2c6c0 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
2c6d0 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63  t inserted..*/.c
2c6e0 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
2c6f0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2c700 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
2c710 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2c720 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
2c730 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
2c740 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
2c750 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
2c760 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 70 56 74 61  Mem *pX;..  pVta
2c770 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2c780 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  b->pVtab;.  pMod
2c790 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d  ule = (sqlite3_m
2c7a0 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70  odule *)pVtab->p
2c7b0 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
2c7c0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
2c7d0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2c7e0 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
2c7f0 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
2c800 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
2c810 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
2c820 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
2c830 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
2c840 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
2c850 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
2c860 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2c870 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20  eType(pX);.     
2c880 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a   apArg[i] = pX;.
2c890 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20        pX++;.    
2c8a0 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  }.    if( sqlite
2c8b0 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
2c8c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c8d0 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72  to_misuse;.    r
2c8e0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
2c8f0 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
2c900 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
2c910 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
2c920 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
2c930 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
2c940 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
2c950 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
2c960 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
2c970 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2c980 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
2c990 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
2c9a0 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20 72 63  suse;.    if( rc
2c9b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
2c9c0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20  Op->p1 ){.      
2c9d0 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
2c9e0 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
2c9f0 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
2ca00 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
2ca10 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
2ca20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
2ca30 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
2ca40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ca50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ca60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ca70 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
2ca80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2ca90 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
2caa0 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
2cab0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2cac0 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
2cad0 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
2cae0 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
2caf0 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
2cb00 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2cb10 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
2cb20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2cb30 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2cb40 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 6e 50  int p1;.  int nP
2cb50 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50  age;.  Pager *pP
2cb60 61 67 65 72 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  ager;..  p1 = pO
2cb70 70 2d 3e 70 31 3b 20 0a 20 20 70 50 61 67 65 72  p->p1; .  pPager
2cb80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2cb90 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d  ager(db->aDb[p1]
2cba0 2e 70 42 74 29 3b 0a 20 20 72 63 20 3d 20 73 71  .pBt);.  rc = sq
2cbb0 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f  lite3PagerPageco
2cbc0 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61  unt(pPager, &nPa
2cbd0 67 65 29 3b 0a 20 20 2f 2a 20 4f 50 5f 50 61 67  ge);.  /* OP_Pag
2cbe0 65 63 6f 75 6e 74 20 69 73 20 61 6c 77 61 79 73  ecount is always
2cbf0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
2cc00 68 69 6e 20 61 20 72 65 61 64 20 74 72 61 6e 73  hin a read trans
2cc10 61 63 74 69 6f 6e 2e 20 20 54 68 65 0a 20 20 2a  action.  The.  *
2cc20 2a 20 70 61 67 65 20 63 6f 75 6e 74 20 68 61 73  * page count has
2cc30 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 75   already been su
2cc40 63 63 65 73 73 66 75 6c 6c 79 20 72 65 61 64 20  ccessfully read 
2cc50 61 6e 64 20 63 61 63 68 65 64 2e 20 20 53 6f 20  and cached.  So 
2cc60 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
2cc70 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 29  PagerPagecount()
2cc80 20 63 61 6c 6c 20 61 62 6f 76 65 20 63 61 6e 6e   call above cann
2cc90 6f 74 20 66 61 69 6c 2e 20 2a 2f 0a 20 20 69 66  ot fail. */.  if
2cca0 28 20 41 4c 57 41 59 53 28 72 63 3d 3d 53 51 4c  ( ALWAYS(rc==SQL
2ccb0 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 70  ITE_OK) ){.    p
2ccc0 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67 65  Out->u.i = nPage
2ccd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2cce0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2ccf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
2cd00 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  CE./* Opcode: Tr
2cd10 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ace * * * P4 *.*
2cd20 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
2cd30 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
2cd40 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
2cd50 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
2cd60 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
2cd70 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
2cd80 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
2cd90 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
2cda0 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73  callback..*/.cas
2cdb0 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20  e OP_Trace: {.  
2cdc0 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 0a 20  char *zTrace;.. 
2cdd0 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e   zTrace = (pOp->
2cde0 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
2cdf0 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69   : p->zSql);.  i
2ce00 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20  f( zTrace ){.   
2ce10 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 20   if( db->xTrace 
2ce20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  ){.      char *z
2ce30 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78   = sqlite3VdbeEx
2ce40 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63  pandSql(p, zTrac
2ce50 65 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54  e);.      db->xT
2ce60 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
2ce70 72 67 2c 20 7a 29 3b 0a 20 20 20 20 20 20 73 71  rg, z);.      sq
2ce80 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
2ce90 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66  z);.    }.#ifdef
2cea0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2ceb0 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
2cec0 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
2ced0 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ce)!=0 ){.      
2cee0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
2cef0 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
2cf00 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
2cf10 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
2cf20 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
2cf30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2cf40 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
2cf50 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
2cf60 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
2cf70 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
2cf80 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
2cf90 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
2cfa0 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
2cfb0 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
2cfc0 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
2cfd0 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
2cfe0 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
2cff0 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
2d000 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
2d010 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
2d020 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
2d030 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
2d040 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
2d050 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
2d060 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
2d070 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
2d080 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
2d090 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
2d0a0 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
2d0b0 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
2d0c0 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
2d0d0 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
2d0e0 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
2d0f0 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
2d100 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
2d110 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  >opcode==OP_Noop
2d120 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2d130 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20  =OP_Explain );. 
2d140 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
2d150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d190 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
2d1a0 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
2d1b0 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
2d1c0 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
2d1d0 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
2d1e0 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
2d1f0 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
2d200 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
2d210 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
2d220 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
2d230 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
2d240 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
2d250 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
2d260 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
2d270 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
2d280 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
2d290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d2a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d2b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d2c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d2d0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
2d2e0 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2d2f0 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
2d300 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73   u64 elapsed = s
2d310 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d  qlite3Hwtime() -
2d320 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
2d330 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61  p->cycles += ela
2d340 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d  psed;.      pOp-
2d350 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20  >cnt++;.#if 0.  
2d360 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
2d370 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c  dout, "%10llu ",
2d380 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20   elapsed);.     
2d390 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
2d3a0 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72  intOp(stdout, or
2d3b0 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50  igPc, &aOp[origP
2d3c0 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  c]);.#endif.    
2d3d0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
2d3e0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
2d3f0 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
2d400 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
2d410 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
2d420 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
2d430 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
2d440 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
2d450 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
2d460 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
2d470 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
2d480 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
2d490 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
2d4a0 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
2d4b0 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
2d4c0 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
2d4d0 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
2d4e0 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
2d4f0 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
2d500 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
2d510 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70  ( pc>=-1 && pc<p
2d520 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66  ->nOp );..#ifdef
2d530 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2d540 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29    if( p->trace )
2d550 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  {.      if( rc!=
2d560 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74  0 ) fprintf(p->t
2d570 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72  race,"rc=%d\n",r
2d580 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
2d590 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50  p->opflags & (OP
2d5a0 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
2d5b0 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20  ASE|OPFLG_OUT2) 
2d5c0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
2d5d0 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
2d5e0 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  e, pOp->p2, &aMe
2d5f0 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
2d600 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
2d610 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
2d620 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
2d630 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2d640 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2d650 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
2d660 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
2d670 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
2d680 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
2d690 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
2d6a0 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
2d6b0 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
2d6c0 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
2d6d0 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
2d6e0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
2d6f0 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
2d700 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
2d710 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
2d720 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
2d730 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
2d740 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
2d750 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
2d760 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
2d770 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2d780 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
2d790 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2d7a0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2d7b0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2d7c0 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
2d7d0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66  LITE_ERROR;.  if
2d7e0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
2d7f0 61 75 6c 74 20 29 20 73 71 6c 69 74 65 33 52 65  ault ) sqlite3Re
2d800 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
2d810 61 28 64 62 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20  a(db, 0);..  /* 
2d820 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
2d830 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73   way out of this
2d840 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20   procedure.  We 
2d850 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c  have to.  ** rel
2d860 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73  ease the mutexes
2d870 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20   on btrees that 
2d880 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74  were acquired at
2d890 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a   the.  ** top. *
2d8a0 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20  /.vdbe_return:. 
2d8b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74   sqlite3BtreeMut
2d8c0 65 78 41 72 72 61 79 4c 65 61 76 65 28 26 70 2d  exArrayLeave(&p-
2d8d0 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  >aMutex);.  retu
2d8e0 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
2d8f0 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
2d900 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
2d910 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
2d920 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
2d930 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
2d940 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
2d950 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2d960 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2d970 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  b, "string or bl
2d980 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20  ob too big");.  
2d990 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
2d9a0 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  IG;.  goto vdbe_
2d9b0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
2d9c0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
2d9d0 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
2d9e0 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a  ls..  */.no_mem:
2d9f0 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  .  db->mallocFai
2da00 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  led = 1;.  sqlit
2da10 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2da20 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75  zErrMsg, db, "ou
2da30 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20  t of memory");. 
2da40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2da50 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  EM;.  goto vdbe_
2da60 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
2da70 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
2da80 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  or an SQLITE_MIS
2da90 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a  USE error..  */.
2daa0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2dab0 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51 4c 49  use:.  rc = SQLI
2dac0 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f 2a 20  TE_MISUSE;.  /* 
2dad0 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20 61  Fall thru into a
2dae0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2daf0 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  r */..  /* Jump 
2db00 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
2db10 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
2db20 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
2db30 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
2db40 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
2db50 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
2db60 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
2db70 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
2db80 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
2db90 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
2dba0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
2dbb0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2dbc0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
2dbd0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
2dbe0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2dbf0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2dc00 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2dc10 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
2dc20 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
2dc30 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2dc40 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2dc50 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
2dc60 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
2dc70 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
2dc80 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
2dc90 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
2dca0 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
2dcb0 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
2dcc0 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
2dcd0 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
2dce0 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
2dcf0 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
2dd00 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2dd10 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2dd20 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
2dd30 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2dd40 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.