/ Hex Artifact Content
Login

Artifact 95fa2b51a4e602f74594bd9a0f679b7eaf44f9c0:


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 65 6e  abase */.  u8 en
4570: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4580: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4590: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
45a0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
45b0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
45c0: 41 4c 4c 42 41 43 4b 0a 20 20 75 38 20 63 68 65  ALLBACK.  u8 che
45d0: 63 6b 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  ckProgress;     
45e0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
45f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4600: 6b 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 2a  ks are enabled *
4610: 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73  /.  int nProgres
4620: 73 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f  sOps = 0;      /
4630: 2a 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74  * Opcodes execut
4640: 65 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73  ed since progres
4650: 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  s callback. */.#
4660: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
4670: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
4680: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
4690: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
46a0: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
46b0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
46c0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
46d0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
46e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
46f0: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
4700: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
4710: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4720: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
4730: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4740: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
4750: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
4760: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  perand */.  int 
4770: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
4780: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
4790: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
47a0: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
47b0: 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65  .  int *aPermute
47c0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
47d0: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20   Permutation of 
47e0: 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43  columns for OP_C
47f0: 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66  ompare */.#ifdef
4800: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4810: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
4820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
4830: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
4840: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4850: 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63   */.  int origPc
4860: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4870: 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e   /* Program coun
4880: 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66 20  ter at start of 
4890: 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
48a0: 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53  .  /*** INSERT S
48b0: 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20  TACK UNION HERE 
48c0: 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  ***/..  assert( 
48d0: 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  p->magic==VDBE_M
48e0: 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20  AGIC_RUN );  /* 
48f0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76  sqlite3_step() v
4900: 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a  erifies this */.
4910: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61    assert( db->ma
4920: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
4930: 43 5f 42 55 53 59 20 29 3b 0a 20 20 73 71 6c 69  C_BUSY );.  sqli
4940: 74 65 33 56 64 62 65 4d 75 74 65 78 41 72 72 61  te3VdbeMutexArra
4950: 79 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28  yEnter(p);.  if(
4960: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e   p->rc==SQLITE_N
4970: 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54  OMEM ){.    /* T
4980: 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61  his happens if a
4990: 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65   malloc() inside
49a0: 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
49b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29  e3_column_text()
49c0: 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74   or.    ** sqlit
49d0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
49e0: 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20  () failed.  */. 
49f0: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
4a00: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d    }.  assert( p-
4a10: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c  >rc==SQLITE_OK |
4a20: 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  | p->rc==SQLITE_
4a30: 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20  BUSY );.  p->rc 
4a40: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61  = SQLITE_OK;.  a
4a50: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
4a60: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
4a70: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
4a80: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
4a90: 42 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45 43  Busy = 0;.  CHEC
4aa0: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b  K_FOR_INTERRUPT;
4ab0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  .  sqlite3VdbeIO
4ac0: 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66  TraceSql(p);.#if
4ad0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4ae0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4af0: 43 4b 0a 20 20 63 68 65 63 6b 50 72 6f 67 72 65  CK.  checkProgre
4b00: 73 73 20 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65  ss = db->xProgre
4b10: 73 73 21 3d 30 3b 0a 23 65 6e 64 69 66 0a 23 69  ss!=0;.#endif.#i
4b20: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4b30: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
4b40: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4b50: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20 0a    if( p->pc==0 .
4b60: 20 20 20 26 26 20 28 28 70 2d 3e 64 62 2d 3e 66     && ((p->db->f
4b70: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4b80: 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c 20 66 69  beListing) || fi
4b90: 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76 64  leExists(db, "vd
4ba0: 62 65 5f 65 78 70 6c 61 69 6e 22 29 29 0a 20 20  be_explain")).  
4bb0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
4bc0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4bd0: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4be0: 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n");.    sqlite3
4bf0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4c00: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4c10: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4c20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4c30: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4c40: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4c50: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65  }.  }.  if( file
4c60: 45 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65  Exists(db, "vdbe
4c70: 5f 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20  _trace") ){.    
4c80: 70 2d 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75  p->trace = stdou
4c90: 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t;.  }.  sqlite3
4ca0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4cb0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4cc0: 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51  pc=p->pc; rc==SQ
4cd0: 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a  LITE_OK; pc++){.
4ce0: 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
4cf0: 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  0 && pc<p->nOp )
4d00: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
4d10: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
4d20: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
4d30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4d40: 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20    origPc = pc;. 
4d50: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4d60: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4d70: 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  if.    pOp = &aO
4d80: 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f  p[pc];..    /* O
4d90: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
4da0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
4db0: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
4dc0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4dd0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
4de0: 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20   p->trace ){.   
4df0: 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a     if( pc==0 ){.
4e00: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
4e10: 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54  VDBE Execution T
4e20: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  race:\n");.     
4e30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4e40: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20  intSql(p);.     
4e50: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
4e60: 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74  VdbePrintOp(p->t
4e70: 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a  race, pc, pOp);.
4e80: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4e90: 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70 63 3d  >trace==0 && pc=
4ea0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
4eb0: 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
4ec0: 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20 69 66  lloc();.      if
4ed0: 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c  ( fileExists(db,
4ee0: 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63 65 22   "vdbe_sqltrace"
4ef0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
4f00: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4f10: 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (p);.      }.   
4f20: 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e     sqlite3EndBen
4f30: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20  ignMalloc();.   
4f40: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
4f50: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
4f60: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
4f70: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
4f80: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
4f90: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
4fa0: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
4fb0: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
4fc0: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
4fd0: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
4fe0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
4ff0: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
5000: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
5010: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5020: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
5030: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5040: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
5050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5060: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
5070: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
5080: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
5090: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
50a0: 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20  CALLBACK.    /* 
50b0: 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73  Call the progres
50c0: 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74  s callback if it
50d0: 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61   is configured a
50e0: 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20  nd the required 
50f0: 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66  number.    ** of
5100: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
5110: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
5120: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
5130: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
5140: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
5150: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
5160: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
5170: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5180: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20  was called)..   
5190: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
51a0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
51b0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
51c0: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
51d0: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20  machine with.   
51e0: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
51f0: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
5200: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 63      */.    if( c
5210: 68 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b 0a  heckProgress ){.
5220: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50        if( db->nP
5230: 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f  rogressOps==nPro
5240: 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20  gressOps ){.    
5250: 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20      int prc;.   
5260: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5270: 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
5280: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
5290: 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20 20  o_misuse;.      
52a0: 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67    prc =db->xProg
52b0: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
52c0: 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20  ssArg);.        
52d0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
52e0: 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
52f0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
5300: 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  se;.        if( 
5310: 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  prc!=0 ){.      
5320: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
5330: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20  INTERRUPT;.     
5340: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
5350: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20  rror_halt;.     
5360: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72     }.        nPr
5370: 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20  ogressOps = 0;. 
5380: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72       }.      nPr
5390: 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20  ogressOps++;.   
53a0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
53b0: 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20  * On any opcode 
53c0: 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70  with the "out2-p
53d0: 72 65 72 65 6c 61 73 65 22 20 74 61 67 2c 20 66  rerelase" tag, f
53e0: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
53f0: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
5400: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
5410: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
5420: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
5430: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
5440: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
5450: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
5460: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
5470: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
5480: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
5490: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
54a0: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
54b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
54c0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
54d0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
54e0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
54f0: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
5500: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
5510: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
5520: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5530: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5540: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5550: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f  nMem );.      pO
5560: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
5570: 70 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  p2];.      sqlit
5580: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
5590: 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a  External(pOut);.
55a0: 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
55b0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
55c0: 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74   }..    /* Sanit
55d0: 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74  y checking on ot
55e0: 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  her operands */.
55f0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
5600: 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70  BUG.    if( (pOp
5610: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5620: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5640: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p1>0 );.      as
5650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
5660: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5670: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5680: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5690: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
56a0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
56b0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
56c0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
56d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
56e0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
56f0: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5700: 6d 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  m );.      REGIS
5710: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5720: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5730: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5740: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5750: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
5760: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5770: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5780: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5790: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
57a0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
57b0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
57c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
57d0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
57e0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
57f0: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
5800: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5810: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5820: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5830: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5840: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
5850: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5860: 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT3)!=0 ){.    
5870: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5880: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  3>0 );.      ass
5890: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ert( pOp->p3<=p-
58a0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 7d 0a 23  >nMem );.    }.#
58b0: 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69  endif.  .    swi
58c0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
58d0: 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ){../**********
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c  ***.** What foll
5930: 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65  ows is a massive
5940: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5950: 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73  t where each cas
5960: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a  e implements a.*
5970: 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72  * separate instr
5980: 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69  uction in the vi
5990: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
59a0: 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65  If we follow the
59b0: 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74   usual.** indent
59c0: 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e  ation convention
59d0: 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f  s, each case sho
59e0: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
59f0: 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
5a00: 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c  t.** that is a l
5a10: 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61  ot of wasted spa
5a20: 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d  ce on the left m
5a30: 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63  argin.  So the c
5a40: 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68  ode within.** th
5a50: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
5a60: 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69  nt will break wi
5a70: 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e  th convention an
5a80: 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e  d be flush-left.
5a90: 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20   Another.** big 
5aa0: 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72  comment (similar
5ab0: 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69   to this one) wi
5ac0: 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e  ll mark the poin
5ad0: 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68  t in the code wh
5ae0: 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69  ere.** we transi
5af0: 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72  tion back to nor
5b00: 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e  mal indentation.
5b10: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61  .**.** The forma
5b20: 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61  tting of each ca
5b30: 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  se is important.
5b40: 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66    The makefile f
5b50: 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e  or SQLite.** gen
5b60: 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c  erates two C fil
5b70: 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61  es "opcodes.h" a
5b80: 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62  nd "opcodes.c" b
5b90: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a  y scanning this.
5ba0: 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20  ** file looking 
5bb0: 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62  for lines that b
5bc0: 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20  egin with "case 
5bd0: 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64  OP_".  The opcod
5be0: 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69  es.h files.** wi
5bf0: 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74  ll be filled wit
5c00: 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20  h #defines that 
5c10: 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65  give unique inte
5c20: 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61  ger values to ea
5c30: 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64  ch.** opcode and
5c40: 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66   the opcodes.c f
5c50: 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69  ile is filled wi
5c60: 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73  th an array of s
5c70: 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20  trings where.** 
5c80: 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74  each string is t
5c90: 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  he symbolic name
5ca0: 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70   for the corresp
5cb0: 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20  onding opcode.  
5cc0: 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73  If the.** case s
5cd0: 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c  tatement is foll
5ce0: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e  owed by a commen
5cf0: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f  t of the form "/
5d00: 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f  # same as ... #/
5d10: 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e  ".** that commen
5d20: 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  t is used to det
5d30: 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69  ermine the parti
5d40: 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74  cular value of t
5d50: 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  he opcode..**.**
5d60: 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20   Other keywords 
5d70: 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  in the comment t
5d80: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68  hat follows each
5d90: 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74   case are used t
5da0: 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74  o.** construct t
5db0: 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c  he OPFLG_INITIAL
5dc0: 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20  IZER value that 
5dd0: 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f  initializes opco
5de0: 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a  deProperty[]..**
5df0: 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64   Keywords includ
5e00: 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33  e: in1, in2, in3
5e10: 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73  , out2_prereleas
5e20: 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20  e, out2, out3.  
5e30: 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63  See.** the mkopc
5e40: 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20  odeh.awk script 
5e50: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
5e60: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
5e70: 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  * Documentation 
5e80: 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64  about VDBE opcod
5e90: 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  es is generated 
5ea0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
5eb0: 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e   file.** for lin
5ec0: 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61  es of that conta
5ed0: 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54  in "Opcode:".  T
5ee0: 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c  hat line and all
5ef0: 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63   subsequent.** c
5f00: 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65  omment lines are
5f10: 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
5f20: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  eration of the o
5f30: 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d  pcode.html docum
5f40: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65  entation.** file
5f50: 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a  ..**.** SUMMARY:
5f60: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61  .**.**     Forma
5f70: 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61  tting is importa
5f80: 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68  nt to scripts th
5f90: 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c  at scan this fil
5fa0: 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74  e..**     Do not
5fb0: 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68   deviate from th
5fc0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79  e formatting sty
5fd0: 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  le currently in 
5fe0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  use..**.********
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  *****/../* Opcod
6040: 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20  e:  Goto * P2 * 
6050: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63  * *.**.** An unc
6060: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20  onditional jump 
6070: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6080: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72  * The next instr
6090: 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20  uction executed 
60a0: 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20  will be .** the 
60b0: 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20  one at index P2 
60c0: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
60d0: 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f  ng of.** the pro
60e0: 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  gram..*/.case OP
60f0: 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20  _Goto: {        
6100: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6110: 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
6120: 52 52 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f  RRUPT;.  pc = pO
6130: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65  p->p2 - 1;.  bre
6140: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6150: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6160: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
6170: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
6180: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
6190: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
61a0: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
61b0: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
61c0: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
61d0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
61e0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
61f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6200: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6210: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
6220: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6230: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6240: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6250: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6260: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
6270: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
6280: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
6290: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
62a0: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
62b0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
62c0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
62d0: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
62e0: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
62f0: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
6300: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
6310: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
6320: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6330: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6340: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
6350: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d  EM_Int );.  pc =
6360: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6370: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6380: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
6390: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
63a0: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
63b0: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
63c0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
63d0: 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  ter P1..*/.case 
63e0: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
63f0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6400: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
6410: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6420: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6430: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6440: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6450: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6460: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
6470: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
6480: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
6490: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
64a0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
64b0: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
64c0: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
64d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
64e0: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
64f0: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  P3 P4 *.**.** Ch
6500: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
6510: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
6520: 66 20 69 73 20 69 73 20 4e 55 4c 4c 20 74 68 65  f is is NULL the
6530: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
6540: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
6550: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6560: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6570: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6580: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6590: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
65a0: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
65b0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
65c0: 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
65d0: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
65e0: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
65f0: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
6600: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
6610: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
6620: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
6630: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
6640: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
6650: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
6660: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
6670: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69  * P4 *.**.** Exi
6680: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
6690: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
66a0: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
66b0: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
66c0: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
66d0: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
66e0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
66f0: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
6700: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
6710: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
6720: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
6730: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
6740: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
6750: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
6760: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
6770: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
6780: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
6790: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
67a0: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
67b0: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
67c0: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
67d0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
67e0: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
67f0: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
6800: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
6810: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
6820: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
6830: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
6840: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
6850: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6860: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
6870: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
6880: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
6890: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
68a0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
68b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
68c0: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
68d0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
68e0: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
68f0: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
6900: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
6910: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
6920: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
6930: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
6940: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
6950: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
6960: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
6970: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
6980: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
6990: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
69a0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
69b0: 61 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70  alt: {.  if( pOp
69c0: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
69d0: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
69e0: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
69f0: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
6a00: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
6a10: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
6a20: 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d   */.    VdbeFram
6a30: 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  e *pFrame = p->p
6a40: 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46  Frame;.    p->pF
6a50: 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70  rame = pFrame->p
6a60: 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e  Parent;.    p->n
6a70: 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c  Frame--;.    sql
6a80: 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
6a90: 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
6aa0: 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71 6c  e);.    pc = sql
6ab0: 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73  ite3VdbeFrameRes
6ac0: 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20  tore(pFrame);.  
6ad0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
6ae0: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
6af0: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
6b00: 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72   pc is the OP_Pr
6b10: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
6b20: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
6b30: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
6b40: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
6b50: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
6b60: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
6b70: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
6b80: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
6b90: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
6ba0: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
6bb0: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
6bc0: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
6bd0: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
6be0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
6bf0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
6c00: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
6c10: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
6c20: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
6c30: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
6c40: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61  .      pc = p->a
6c50: 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20  Op[pc].p2-1;.   
6c60: 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e   }.    aOp = p->
6c70: 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20  aOp;.    aMem = 
6c80: 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65  p->aMem;.    bre
6c90: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63  ak;.  }..  p->rc
6ca0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
6cb0: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
6cc0: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
6cd0: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20  >pc = pc;.  if( 
6ce0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
6cf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
6d00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
6d10: 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  b, "%s", pOp->p4
6d20: 2e 7a 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  .z);.  }.  rc = 
6d30: 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
6d40: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  p);.  assert( rc
6d50: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
6d60: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
6d70: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  | rc==SQLITE_ERR
6d80: 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  OR );.  if( rc==
6d90: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
6da0: 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
6db0: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
6dc0: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
6dd0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6de0: 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  || p->rc==SQLITE
6df0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
6e00: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
6e10: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
6e20: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
6e30: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
6e40: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
6e50: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
6e60: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
6e70: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
6e80: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
6e90: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6ea0: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
6eb0: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
6ec0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
6ed0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
6ee0: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
6ef0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
6f00: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
6f10: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
6f20: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
6f30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
6f40: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a   * P2 * P4 *.**.
6f50: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
6f60: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
6f70: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
6f80: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
6f90: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
6fa0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
6fb0: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
6fc0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
6fd0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
6fe0: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
6ff0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
7000: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
7010: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7020: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
7030: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
7040: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
7050: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
7060: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
7070: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
7080: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
7090: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
70a0: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
70b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
70c0: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d   TK_FLOAT, out2-
70d0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
70e0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
70f0: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
7100: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
7110: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
7120: 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a  );.  pOut->r = *
7130: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20  pOp->p4.pReal;. 
7140: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7150: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
7160: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
7170: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
7180: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
7190: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
71a0: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
71b0: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
71c0: 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66  an OP_String bef
71d0: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
71e0: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
71f0: 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   time..*/.case O
7200: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
7210: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7220: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
7230: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7240: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7250: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
7260: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
7270: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
7280: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
7290: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
72a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
72b0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
72c0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
72d0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
72e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
72f0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7300: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
7310: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
7320: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
7330: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
7340: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7350: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
7360: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
7370: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
7380: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
7390: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
73a0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61  ssert( pOut->zMa
73b0: 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b  lloc==pOut->z );
73c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
73d0: 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
73e0: 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  yn );.    pOut->
73f0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7400: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
7410: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
7420: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pOut->flags &= ~
7430: 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28  MEM_Dyn;.    if(
7440: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
7450: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
7460: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
7470: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
7480: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
7490: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
74a0: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
74b0: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
74c0: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
74d0: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
74e0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
74f0: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
7500: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
7510: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
7520: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
7530: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
7540: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
7550: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
7560: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
7570: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
7580: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
7590: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
75a0: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
75b0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
75c0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P2..*/.case OP_S
75d0: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
75e0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
75f0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7600: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
7610: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
7620: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
7630: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
7640: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
7650: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
7660: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
7670: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
7680: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
7690: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
76a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
76b0: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32  pcode: Null * P2
76c0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
76d0: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
76e0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
76f0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
7700: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7710: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7720: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7730: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b  EM_Null;.  break
7740: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
7750: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
7760: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
7770: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
7780: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
7790: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
77a0: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
77b0: 72 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72  r P2. This instr
77c0: 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f  uction is not co
77d0: 64 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20  ded directly.** 
77e0: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e  by the compiler.
77f0: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f   Instead, the co
7800: 6d 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65  mpiler layer spe
7810: 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f  cifies.** an OP_
7820: 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20  HexBlob opcode, 
7830: 77 69 74 68 20 74 68 65 20 68 65 78 20 73 74 72  with the hex str
7840: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
7850: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f  on of.** the blo
7860: 62 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70  b as P4. This op
7870: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
7880: 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f  med to an OP_Blo
7890: 62 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74  b.** the first t
78a0: 69 6d 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ime it is execut
78b0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ed..*/.case OP_B
78c0: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
78d0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
78e0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
78f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
7900: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
7910: 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  TH );.  sqlite3V
7920: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
7930: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f  t, pOp->p4.z, pO
7940: 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20  p->p1, 0, 0);.  
7950: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
7960: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
7970: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7980: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
7990: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
79a0: 6c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  le P1 P2 P3 P4 *
79b0: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
79c0: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
79d0: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 50  und parameters P
79e0: 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f 20  1..P1+P3-1 into 
79f0: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32 2e  registers.** P2.
7a00: 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20  .P2+P3-1..**.** 
7a10: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
7a20: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
7a30: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
7a40: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
7a50: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
7a60: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
7a70: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
7a80: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
7a90: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
7aa0: 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
7ab0: 20 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62 6c        /* Variabl
7ac0: 65 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  e to copy from *
7ad0: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
7ae0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
7af0: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 20   to copy to */. 
7b00: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
7b10: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
7b20: 61 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63 6f  alues left to co
7b30: 70 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  py */.  Mem *pVa
7b40: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
7b50: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
7b60: 72 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20 70  red */..  p1 = p
7b70: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70 32  Op->p1 - 1;.  p2
7b80: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20   = pOp->p2;.  n 
7b90: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
7ba0: 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
7bb0: 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  +n<=p->nVar );. 
7bc0: 20 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20 26   assert( p2>=1 &
7bd0: 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65  & p2+n-1<=p->nMe
7be0: 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
7bf0: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
7c00: 4f 70 2d 3e 70 33 3d 3d 31 20 7c 7c 20 70 4f 70  Op->p3==1 || pOp
7c10: 2d 3e 70 33 3d 3d 30 20 29 3b 0a 0a 20 20 77 68  ->p3==0 );..  wh
7c20: 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b 0a  ile( n-- > 0 ){.
7c30: 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61      pVar = &p->a
7c40: 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20 69  Var[p1++];.    i
7c50: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
7c60: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
7c70: 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
7c80: 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  big;.    }.    p
7c90: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 2b 2b  Out = &aMem[p2++
7ca0: 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ];.    sqlite3Vd
7cb0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
7cc0: 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  rnal(pOut);.    
7cd0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7ce0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73 71 6c 69  M_Null;.    sqli
7cf0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
7d00: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72  wCopy(pOut, pVar
7d10: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
7d20: 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c     UPDATE_MAX_BL
7d30: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7d40: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
7d50: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
7d60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7d70: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
7d80: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
7d90: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
7da0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
7db0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
7dc0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
7dd0: 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  1-1 are.** left 
7de0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
7df0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
7e00: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
7e10: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
7e20: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
7e30: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a  -1 to overlap..*
7e40: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
7e50: 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f  {.  char *zMallo
7e60: 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20  c;   /* Holding 
7e70: 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c  variable for all
7e80: 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f  ocated memory */
7e90: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
7ea0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7eb0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
7ec0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
7ed0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
7ee0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7ef0: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
7f00: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
7f10: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7f20: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
7f30: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
7f40: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
7f50: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
7f60: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
7f70: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
7f80: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
7f90: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
7fa0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
7fb0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
7fc0: 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20  ];.  while( n-- 
7fd0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
7fe0: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  Out<=&aMem[p->nM
7ff0: 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em] );.    asser
8000: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70  t( pIn1<=&aMem[p
8010: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a  ->nMem] );.    z
8020: 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a  Malloc = pOut->z
8030: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74  Malloc;.    pOut
8040: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
8050: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8060: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
8070: 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61  );.    pIn1->zMa
8080: 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a  lloc = zMalloc;.
8090: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
80a0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
80b0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
80c0: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pOut++;.  }.  br
80d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
80e0: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20  e: Copy P1 P2 * 
80f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
8100: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8110: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
8120: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
8130: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8140: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
8150: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
8160: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
8170: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
8180: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
8190: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
81a0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
81b0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20  e OP_Copy: {    
81c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
81d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
81e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
81f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
8200: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
8210: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
8220: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
8230: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
8240: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
8250: 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d  phem);.  Deephem
8260: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
8270: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8280: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
8290: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
82a0: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
82b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
82c0: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
82d0: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
82e0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
82f0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
8300: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
8310: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
8320: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
8330: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
8340: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
8350: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
8360: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
8370: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
8380: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
8390: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
83a0: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
83b0: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
83c0: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
83d0: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
83e0: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
83f0: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
8400: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
8410: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
8420: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
8430: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
8440: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
8450: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
8460: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
8470: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
8480: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
8490: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
84a0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
84b0: 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  /* in1, out2 */.
84c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
84d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
84e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
84f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
8500: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
8510: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
8520: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
8530: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
8540: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8550: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
8560: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8570: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
8580: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
8590: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
85a0: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
85b0: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
85c0: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
85d0: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
85e0: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
85f0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
8600: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
8610: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
8620: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
8630: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
8640: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
8650: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
8660: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
8670: 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61  to the top P1 va
8680: 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75  lues as the resu
8690: 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61  lt.** row..*/.ca
86a0: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
86b0: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
86c0: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
86d0: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
86e0: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
86f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
8700: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
8710: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70  p->p1+pOp->p2<=p
8720: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f  ->nMem+1 );..  /
8730: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
8740: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
8750: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
8760: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
8770: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
8780: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
8790: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
87a0: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
87b0: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
87c0: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
87d0: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
87e0: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
87f0: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
8800: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
8810: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
8820: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
8830: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
8840: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
8850: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
8860: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
8870: 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b  nal );.    break
8880: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
8890: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
88a0: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
88b0: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
88c0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
88d0: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
88e0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
88f0: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
8900: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
8910: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
8920: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8930: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
8940: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
8950: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
8960: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
8970: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
8980: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
8990: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
89a0: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
89b0: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
89c0: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
89d0: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
89e0: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
89f0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
8a00: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
8a10: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
8a20: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
8a30: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
8a40: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
8a50: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
8a60: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
8a70: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
8a80: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
8a90: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
8aa0: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
8ab0: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
8ac0: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
8ad0: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
8ae0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8af0: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
8b00: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
8b10: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
8b20: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
8b30: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
8b40: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8b50: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
8b60: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
8b70: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
8b80: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
8b90: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
8ba0: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
8bb0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
8bc0: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
8bd0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
8be0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
8bf0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
8c00: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
8c10: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
8c20: 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  E);.  if( NEVER(
8c30: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
8c40: 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
8c50: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
8c60: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
8c70: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
8c80: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
8c90: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
8ca0: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
8cb0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
8cc0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
8cd0: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
8ce0: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
8cf0: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
8d00: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
8d10: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
8d20: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
8d30: 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65  s.  ** as side e
8d40: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
8d50: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
8d60: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
8d70: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
8d80: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
8d90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8da0: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
8db0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73  &pMem[i]);.    s
8dc0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
8dd0: 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29  reType(&pMem[i])
8de0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
8df0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
8e00: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
8e10: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
8e20: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
8e30: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
8e40: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
8e50: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
8e60: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
8e70: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
8e80: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
8e90: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
8ea0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
8eb0: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
8ec0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
8ed0: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
8ee0: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
8ef0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
8f00: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8f10: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
8f20: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
8f30: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
8f40: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
8f50: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
8f60: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
8f70: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
8f80: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
8f90: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
8fa0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
8fb0: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
8fc0: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
8fd0: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
8fe0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
8ff0: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
9000: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
9010: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
9020: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
9030: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
9040: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
9050: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
9060: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
9070: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9080: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
9090: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
90a0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
90b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
90c0: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
90d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
90e0: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
90f0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
9100: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
9110: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
9120: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
9130: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
9140: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
9150: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
9160: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
9170: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
9180: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
9190: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
91a0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
91b0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
91c0: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
91d0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
91e0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
91f0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
9200: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
9210: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
9220: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9230: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
9240: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
9250: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
9260: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
9270: 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  }.  if( pOut!=pI
9280: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
9290: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
92a0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
92b0: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
92c0: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
92d0: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
92e0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
92f0: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b   = 0;.  pOut->z[
9300: 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20  nByte+1] = 0;.  
9310: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9320: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
9330: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
9340: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9350: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9360: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9370: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9380: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
9390: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
93a0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
93b0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
93c0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
93d0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
93e0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
93f0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9400: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
9410: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9420: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9430: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9440: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
9450: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a  2 P3 * *.**.**.*
9460: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
9470: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9480: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9490: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
94a0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
94b0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
94c0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
94d0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
94e0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
94f0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9500: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
9510: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
9520: 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76  * Subtract the v
9530: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9540: 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P1 from the val
9550: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9560: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
9570: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
9580: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
9590: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
95a0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
95b0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
95c0: 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50  Opcode: Divide P
95d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
95e0: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
95f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9600: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9610: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9620: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9630: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9640: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
9650: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
9660: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
9670: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
9680: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9690: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
96a0: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
96b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
96c0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
96d0: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
96e0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
96f0: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
9700: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
9710: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
9720: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
9730: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
9740: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9750: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
9760: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
9770: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
9780: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9790: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
97a0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
97b0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
97c0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
97d0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
97e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9800: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9810: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
9820: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9830: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
9840: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9850: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
9860: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9870: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9890: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
98a0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
98b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
98c0: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
98d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
98e0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
98f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9900: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
9910: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9920: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
9930: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9940: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
9950: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
9960: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
9970: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36  h inputs */.  i6
9980: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
9990: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
99a0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
99b0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
99c0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
99d0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
99e0: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
99f0: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
9a00: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
9a10: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
9a20: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
9a30: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
9a40: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
9a50: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9a60: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c  pOp->p1];.  appl
9a70: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
9a80: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
9a90: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9aa0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
9ab0: 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20  ffinity(pIn2);. 
9ac0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9ad0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
9ae0: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
9af0: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
9b00: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
9b10: 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20  Null)!=0 ) goto 
9b20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9b30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28  t_is_null;.  if(
9b40: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
9b50: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
9b60: 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20  M_Int)==MEM_Int 
9b70: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
9b80: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
9b90: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73  pIn2->u.i;.    s
9ba0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
9bb0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
9bc0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
9bd0: 20 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20   iB += iA;      
9be0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9bf0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9c00: 20 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20     iB -= iA;    
9c10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9c20: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
9c30: 3a 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20  :    iB *= iA;  
9c40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9c50: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
9c60: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
9c70: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
9c80: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9c90: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
9ca0: 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20  /* Dividing the 
9cb0: 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
9cc0: 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74   negative 64-bit
9cd0: 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29   integer (1<<63)
9ce0: 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   by .        ** 
9cf0: 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e  -1 returns an in
9d00: 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20  teger too large 
9d10: 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34  to store in a 64
9d20: 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20  -bit data-type. 
9d30: 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f  On.        ** so
9d40: 6d 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73  me architectures
9d50: 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72  , the value over
9d60: 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29  flows to (1<<63)
9d70: 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20  . On others,.   
9d80: 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45       ** a SIGFPE
9d90: 20 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20   is issued. The 
9da0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
9db0: 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74  ent normalizes t
9dc0: 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62  his.        ** b
9dd0: 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20  ehavior so that 
9de0: 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65  all architecture
9df0: 73 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69  s behave as if i
9e00: 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20  nteger .        
9e10: 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75  ** overflow occu
9e20: 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  rred..        */
9e30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9e40: 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c  =-1 && iB==SMALL
9e50: 45 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d  EST_INT64 ) iA =
9e60: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f   1;.        iB /
9e70: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
9e80: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9e90: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
9ea0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
9eb0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
9ec0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9ed0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
9ee0: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
9ef0: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
9f00: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
9f10: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9f20: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
9f30: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
9f40: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
9f50: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
9f60: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
9f70: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
9f80: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
9f90: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
9fa0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
9fb0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
9fc0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
9fd0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
9fe0: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
9ff0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a000: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
a010: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
a020: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a030: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a040: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
a050: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a060: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
a070: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
a080: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
a090: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
a0a0: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
a0b0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
a0c0: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
a0d0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a0e0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a0f0: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
a100: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a110: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
a120: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
a130: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
a140: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
a150: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
a160: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a170: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a180: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a190: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a1a0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
a1b0: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
a1c0: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
a1d0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a1e0: 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  }.    if( sqlite
a1f0: 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20  3IsNaN(rB) ){.  
a200: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
a210: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a220: 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  ll;.    }.    pO
a230: 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ut->r = rB;.    
a240: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
a250: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
a260: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26      if( (flags &
a270: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
a280: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a290: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
a2a0: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20  y(pOut);.    }. 
a2b0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
a2c0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a2d0: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
a2e0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
a2f0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
a300: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a310: 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a  llSeq * * P4.**.
a320: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
a330: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
a340: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
a350: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
a360: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
a370: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
a380: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
a390: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
a3a0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
a3b0: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
a3c0: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
a3d0: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
a3e0: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
a3f0: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
a400: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
a410: 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
a420: 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70   used by the imp
a430: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
a440: 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65  he aforementione
a450: 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74  d functions.** t
a460: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63  o retrieve the c
a470: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a480: 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70  e set by this op
a490: 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69  code is not avai
a4a0: 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c  lable.** publicl
a4b0: 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20  y, only to user 
a4c0: 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65  functions define
a4d0: 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a  d in func.c..*/.
a4e0: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
a4f0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
a500: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
a510: 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b  LSEQ );.  break;
a520: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
a530: 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  unction P1 P2 P3
a540: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76   P4 P5.**.** Inv
a550: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
a560: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
a570: 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69  nter to a Functi
a580: 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61  on structure tha
a590: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
a5a0: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
a5b0: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
a5c0: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
a5d0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
a5e0: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
a5f0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
a600: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
a610: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
a620: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
a630: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
a640: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
a650: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
a660: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
a670: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
a680: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
a690: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
a6a0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
a6b0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
a6c0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
a6d0: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
a6e0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
a6f0: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
a700: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
a710: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
a720: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
a730: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
a740: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
a750: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
a760: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
a770: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
a780: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
a790: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
a7a0: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
a7b0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
a7c0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
a7d0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
a7e0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67  .** See also: Ag
a7f0: 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e  gStep and AggFin
a800: 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75  al.*/.case OP_Fu
a810: 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20  nction: {.  int 
a820: 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a  i;.  Mem *pArg;.
a830: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
a840: 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
a850: 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
a860: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
a870: 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c  pOp->p5;.  apVal
a880: 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
a890: 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
a8a0: 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65 72  n==0 );..  asser
a8b0: 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
a8c0: 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
a8d0: 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29  +n<=p->nMem+1) )
a8e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
a8f0: 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
a900: 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
a910: 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61  n );.  pArg = &a
a920: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a930: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
a940: 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20  +, pArg++){.    
a950: 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b  apVal[i] = pArg;
a960: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
a970: 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72  MemStoreType(pAr
a980: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
a990: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
a9a0: 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  pArg);.  }..  as
a9b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
a9c0: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c  e==P4_FUNCDEF ||
a9d0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
a9e0: 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69  _VDBEFUNC );.  i
a9f0: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
aa00: 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20  P4_FUNCDEF ){.  
aa10: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
aa20: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20  p->p4.pFunc;.   
aa30: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
aa40: 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
aa50: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
aa60: 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d   (VdbeFunc*)pOp-
aa70: 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20  >p4.pVdbeFunc;. 
aa80: 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63     ctx.pFunc = c
aa90: 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46  tx.pVdbeFunc->pF
aaa0: 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  unc;.  }..  asse
aab0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
aac0: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
aad0: 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  m );.  pOut = &a
aae0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
aaf0: 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
ab00: 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
ab10: 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73  db = db;.  ctx.s
ab20: 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78  .xDel = 0;.  ctx
ab30: 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
ab40: 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
ab50: 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
ab60: 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
ab70: 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
ab80: 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72    ** the pointer
ab90: 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20   to ctx.s so in 
aba0: 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
abb0: 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20  nction can use. 
abc0: 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20   ** the already 
abd0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
abe0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
abf0: 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65  cating a new one
ac00: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
ac10: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78  VdbeMemMove(&ctx
ac20: 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d  .s, pOut);.  Mem
ac30: 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78  SetTypeFlag(&ctx
ac40: 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
ac50: 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
ac60: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
ac70: 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
ac80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ac90: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
aca0: 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
acb0: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
acc0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
acd0: 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
ace0: 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
acf0: 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
ad00: 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
ad10: 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
ad20: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
ad30: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
ad40: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
ad50: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a  _to_misuse;.  (*
ad60: 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63  ctx.pFunc->xFunc
ad70: 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
ad80: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
ad90: 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a  SafetyOn(db) ){.
ada0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
adb0: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
adc0: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
add0: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
ade0: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
adf0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
ae00: 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67     /* Even thoug
ae10: 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  h a malloc() has
ae20: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70   failed, the imp
ae30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
ae40: 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66  he.    ** user f
ae50: 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  unction may have
ae60: 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74   called an sqlit
ae70: 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20  e3_result_XXX() 
ae80: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20  function.    ** 
ae90: 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  to return a valu
aea0: 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e. The following
aeb0: 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61   call releases a
aec0: 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20  ny resources.   
aed0: 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77   ** associated w
aee0: 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65  ith such a value
aef0: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
af00: 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52  Note: Maybe MemR
af10: 65 6c 65 61 73 65 28 29 20 73 68 6f 75 6c 64 20  elease() should 
af20: 62 65 20 63 61 6c 6c 65 64 20 69 66 20 73 71 6c  be called if sql
af30: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 29 0a 20  ite3SafetyOn(). 
af40: 20 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f     ** fails also
af50: 20 28 74 68 65 20 69 66 28 2e 2e 2e 29 20 73 74   (the if(...) st
af60: 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20  atement above). 
af70: 42 75 74 20 69 66 20 70 65 6f 70 6c 65 20 61 72  But if people ar
af80: 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e  e.    ** misusin
af90: 67 20 73 71 6c 69 74 65 2c 20 74 68 65 79 20 68  g sqlite, they h
afa0: 61 76 65 20 62 69 67 67 65 72 20 70 72 6f 62 6c  ave bigger probl
afb0: 65 6d 73 20 74 68 61 6e 20 61 20 6c 65 61 6b 65  ems than a leake
afc0: 64 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  d value..    */.
afd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
afe0: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
aff0: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
b000: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  em;.  }..  /* If
b010: 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20 64   any auxiliary d
b020: 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  ata functions ha
b030: 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 62  ve been called b
b040: 79 20 74 68 69 73 20 75 73 65 72 20 66 75 6e 63  y this user func
b050: 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64  tion,.  ** immed
b060: 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65 20  iately call the 
b070: 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61  destructor for a
b080: 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61  ny non-static va
b090: 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  lues..  */.  if(
b0a0: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 29   ctx.pVdbeFunc )
b0b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
b0c0: 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 63  eDeleteAuxData(c
b0d0: 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70 4f  tx.pVdbeFunc, pO
b0e0: 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d  p->p1);.    pOp-
b0f0: 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d 20  >p4.pVdbeFunc = 
b100: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20  ctx.pVdbeFunc;. 
b110: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
b120: 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20   P4_VDBEFUNC;.  
b130: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  }..  /* If the f
b140: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
b150: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
b160: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
b170: 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
b180: 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
b190: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
b1a0: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
b1b0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
b1c0: 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
b1d0: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
b1e0: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
b1f0: 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
b200: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
b210: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
b220: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
b230: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
b240: 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29  ctx.s, encoding)
b250: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
b260: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63 74  emMove(pOut, &ct
b270: 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  x.s);.  if( sqli
b280: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
b290: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f  (pOut) ){.    go
b2a0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b2b0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b2c0: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
b2d0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
b2e0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
b2f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b300: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
b310: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b320: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b330: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
b340: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
b350: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
b360: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b380: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b390: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b3a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b3b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
b3c0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
b3d0: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
b3e0: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
b3f0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
b400: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
b410: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
b420: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b430: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b440: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b450: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b460: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b470: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
b480: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b490: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
b4a0: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
b4b0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
b4c0: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
b4d0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
b4e0: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
b4f0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
b500: 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ser P1..** Store
b510: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b520: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b530: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b540: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b550: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b560: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
b570: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
b580: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
b590: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
b5a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
b5b0: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
b5c0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
b5d0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
b5e0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
b5f0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
b600: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
b610: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b620: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b630: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b640: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b650: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
b660: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
b670: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b680: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
b690: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b6a0: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b6c0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
b6d0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b6e0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
b6f0: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
b700: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b710: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
b720: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b730: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
b740: 7b 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 52 53 48 49 46 54  ame as TK_RSHIFT
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 20 20 69 36 34 20 61 3b 0a 20 20 69   */.  i64 a;.  i
b780: 36 34 20 62 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  64 b;..  pIn1 = 
b790: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b7a0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
b7b0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
b7c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b7d0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
b7e0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
b7f0: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
b800: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
b810: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
b820: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
b830: 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65 33 56  }.  a = sqlite3V
b840: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
b850: 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74 65 33  );.  b = sqlite3
b860: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
b870: 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70 4f  1);.  switch( pO
b880: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
b890: 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a   case OP_BitAnd:
b8a0: 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20 20 20        a &= b;   
b8b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
b8c0: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
b8d0: 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20 62 72    a |= b;     br
b8e0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
b8f0: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 61 20  _ShiftLeft:   a 
b900: 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61 6b 3b  <<= b;    break;
b910: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 61  .    default:  a
b920: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
b930: 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68  de==OP_ShiftRigh
b940: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t );.           
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
b960: 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61 6b 3b  >>= b;    break;
b970: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
b980: 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = a;.  MemSetTy
b990: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b9a0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
b9b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
b9c0: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
b9d0: 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65  *.** .** Add the
b9e0: 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20   constant P2 to 
b9f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ba00: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ister P1..** The
ba10: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
ba20: 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  s an integer..**
ba30: 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79  .** To force any
ba40: 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20   register to be 
ba50: 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74  an integer, just
ba60: 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20   add 0..*/.case 
ba70: 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20  OP_AddImm: {    
ba80: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
ba90: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
baa0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
bab0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
bac0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
bad0: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
bae0: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
baf0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
bb00: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
bb10: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
bb20: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bb30: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
bb40: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
bb50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
bb60: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
bb70: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
bb80: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
bb90: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
bba0: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
bbb0: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
bbc0: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
bbd0: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
bbe0: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
bbf0: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
bc00: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
bc10: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
bc20: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
bc30: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
bc40: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
bc50: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
bc60: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
bc70: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
bc80: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
bc90: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
bca0: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  =0 ){.    if( pO
bcb0: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
bcc0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
bcd0: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67 6f  SMATCH;.      go
bce0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
bcf0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
bd00: 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
bd10: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
bd20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d    }else{.    Mem
bd30: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
bd40: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
bd50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bd60: 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e  pcode: RealAffin
bd70: 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ity P1 * * * *.*
bd80: 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72  *.** If register
bd90: 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74   P1 holds an int
bda0: 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20  eger convert it 
bdb0: 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  to a real value.
bdc0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
bdd0: 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  de is used when 
bde0: 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72  extracting infor
bdf0: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f  mation from a co
be00: 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73  lumn that.** has
be10: 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20   REAL affinity. 
be20: 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c   Such column val
be30: 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ues may still be
be40: 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e   stored as.** in
be50: 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63  tegers, for spac
be60: 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75  e efficiency, bu
be70: 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69  t after extracti
be80: 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a  on we want them.
be90: 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20  ** to have only 
bea0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f  a real value..*/
beb0: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66  .case OP_RealAff
bec0: 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20  inity: {        
bed0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
bee0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
bef0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
bf00: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
bf10: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
bf20: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
bf30: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
bf40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
bf50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
bf60: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
bf70: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
bf80: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bf90: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bfa0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
bfb0: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
bfc0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
bfd0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
bfe0: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
bff0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
c000: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
c010: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
c020: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
c030: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
c040: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
c050: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
c060: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
c070: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
c080: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
c090: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
c0a0: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
c0b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c0c0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c0d0: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
c0e0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c0f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
c100: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c110: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
c120: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
c130: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
c140: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
c150: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
c160: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
c170: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
c180: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
c190: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
c1a0: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
c1b0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
c1c0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
c1d0: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
c1e0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
c1f0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c200: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
c210: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
c220: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
c230: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
c240: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
c250: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
c260: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
c270: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c280: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c290: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
c2a0: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
c2b0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
c2c0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
c2d0: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
c2e0: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
c2f0: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
c300: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
c310: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
c320: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
c330: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
c340: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c350: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c360: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c370: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c380: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c3b0: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
c3c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c3d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c3e0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c3f0: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
c400: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c410: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
c420: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
c430: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c440: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
c450: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
c460: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c470: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
c480: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
c490: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
c4a0: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pIn1, MEM_Blob
c4b0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
c4c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
c4d0: 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d  (MEM_TypeMask&~M
c4e0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20  EM_Blob);.  }.  
c4f0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
c500: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
c510: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c520: 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a  : ToNumeric P1 *
c530: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c540: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c550: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c560: 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65  e numeric (eithe
c570: 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20  r an.** integer 
c580: 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  or a floating-po
c590: 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20  int number.).** 
c5a0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c5b0: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c5c0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c5d0: 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a  to an using the.
c5e0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c5f0: 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28   atoi() or atof(
c600: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c610: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c620: 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69  ion .** is possi
c630: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
c640: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c650: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c660: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c670: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c680: 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20  e OP_ToNumeric: 
c690: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c6a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c6b0: 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31  _TO_NUMERIC, in1
c6c0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
c6d0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
c6e0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c6f0: 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  & (MEM_Null|MEM_
c700: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d  Int|MEM_Real))==
c710: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
c720: 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28  VdbeMemNumerify(
c730: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c740: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
c750: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c760: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
c770: 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ToInt P1 * * * *
c780: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c790: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c7a0: 65 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65  er P1 be an inte
c7b0: 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20  ger.  If.** The 
c7c0: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
c7d0: 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  ly a real number
c7e0: 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63 74  , drop its fract
c7f0: 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49  ional part..** I
c800: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
c810: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
c820: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
c830: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
c840: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c850: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
c860: 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f  nd store 0 if no
c870: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
c880: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
c890: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c8a0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c8b0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c8c0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c8d0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c8e0: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
c8f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c900: 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e  as TK_TO_INT, in
c910: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c920: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c930: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c940: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
c950: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
c960: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
c970: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c980: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
c990: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
c9a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61  /* Opcode: ToRea
c9b0: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  l P1 * * * *.**.
c9c0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
c9d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c9e0: 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69  1 to be a floati
c9f0: 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ng point number.
ca00: 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65  .** If The value
ca10: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e   is currently an
ca20: 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72   integer, conver
ca30: 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  t it..** If the 
ca40: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
ca50: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
ca60: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69  nvert it to an i
ca70: 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65  nteger using the
ca80: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
ca90: 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f  f atoi() and sto
caa0: 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63  re 0.0 if no suc
cab0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
cac0: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
cad0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
cae0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
caf0: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
cb00: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
cb10: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c  /.case OP_ToReal
cb20: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
cb30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb40: 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20  TK_TO_REAL, in1 
cb50: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
cb60: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
cb70: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
cb80: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
cb90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
cba0: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
cbb0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
cbc0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
cbd0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
cbe0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
cbf0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
cc00: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
cc10: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
cc20: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
cc30: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
cc40: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
cc50: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
cc60: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
cc70: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
cc80: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
cc90: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
cca0: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
ccb0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
ccc0: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
ccd0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
cce0: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
ccf0: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
cd00: 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72 20   thru if either 
cd10: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
cd20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
cd30: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
cd40: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
cd50: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
cd60: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
cd70: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
cd80: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
cd90: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
cda0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
cdb0: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
cdc0: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
cdd0: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
cde0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
cdf0: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
ce00: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
ce10: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ce20: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
ce30: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
ce40: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
ce50: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
ce60: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
ce70: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
ce80: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
ce90: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
cea0: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
ceb0: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
cec0: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
ced0: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
cee0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
cef0: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
cf00: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
cf10: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
cf20: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
cf30: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
cf40: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
cf50: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
cf60: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
cf70: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
cf80: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
cf90: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
cfa0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
cfb0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
cfc0: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
cfd0: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
cfe0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
cff0: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
d000: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
d010: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
d020: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
d030: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
d040: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
d050: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
d060: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
d070: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
d080: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
d090: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
d0a0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
d0b0: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
d0c0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
d0d0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
d0e0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
d0f0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
d100: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
d110: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
d120: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
d130: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
d140: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
d150: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
d160: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
d170: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
d180: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
d190: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
d1a0: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
d1b0: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
d1c0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a  gister P2..*/./*
d1d0: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
d1e0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d1f0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d200: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d210: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d220: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d230: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
d240: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
d250: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
d260: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
d270: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d280: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
d290: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
d2a0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
d2b0: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
d2c0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d2d0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
d2e0: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
d2f0: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
d300: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
d310: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
d320: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
d330: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
d340: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
d350: 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69  is false.  If ei
d360: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
d370: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
d380: 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a  sult is true..**
d390: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
d3a0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
d3b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
d3c0: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
d3d0: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
d3e0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
d3f0: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
d400: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
d410: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
d420: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
d430: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
d440: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
d450: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
d460: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
d470: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
d480: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
d490: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
d4a0: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
d4b0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
d4c0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
d4d0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
d4e0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
d4f0: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
d500: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
d510: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
d520: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
d530: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
d540: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
d550: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
d560: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
d570: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
d580: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
d590: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
d5a0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d5b0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
d5c0: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
d5d0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
d5e0: 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65 73  NULL the the res
d5f0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
d600: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
d610: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
d620: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
d630: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
d640: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d650: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
d660: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d670: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d680: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d690: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d6a0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d6b0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
d6c0: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
d6d0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
d6e0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
d6f0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
d700: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
d710: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
d720: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
d730: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
d740: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
d750: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d760: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d770: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d780: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d790: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d7a0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
d7b0: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
d7c0: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
d7d0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
d7e0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
d7f0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d800: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d810: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
d820: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
d830: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d840: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d850: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d860: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d870: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d880: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
d890: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
d8a0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
d8b0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
d8c0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
d8d0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
d8e0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d8f0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d900: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
d910: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
d920: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d930: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
d940: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
d950: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
d960: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d970: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
d980: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
d990: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
d9a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d9b0: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
d9c0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
d9d0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d9e0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
d9f0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
da00: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
da20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
da30: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
da40: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
da50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
da60: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
da70: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
da80: 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
da90: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
daa0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
dab0: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
dac0: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
dad0: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
dae0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
daf0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
db00: 6e 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  n */..  pIn1 = &
db10: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
db20: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
db30: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
db40: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
db50: 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d 5f 4e 75  3->flags)&MEM_Nu
db60: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
db70: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
db80: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
db90: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
dba0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
dbb0: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
dbc0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
dbd0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
dbe0: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
dbf0: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
dc00: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
dc10: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
dc20: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
dc30: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
dc40: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
dc50: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
dc60: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
dc70: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
dc80: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
dc90: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
dca0: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
dcb0: 20 20 20 20 20 20 72 65 73 20 3d 20 28 70 49 6e        res = (pIn
dcc0: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d  1->flags & pIn3-
dcd0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
dce0: 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73 65  l)==0;.    }else
dcf0: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
dd00: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
dd10: 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
dd20: 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
dd30: 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
dd40: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
dd50: 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
dd60: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
dd70: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
dd80: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
dd90: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
dda0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
ddb0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
ddc0: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
ddd0: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
dde0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
ddf0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
de00: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
de10: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
de20: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
de30: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
de40: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
de50: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
de60: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
de70: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
de80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
de90: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
dea0: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
deb0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
dec0: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
ded0: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
dee0: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
def0: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
df00: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
df10: 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
df20: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
df30: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
df40: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70  ding);.      app
df50: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  lyAffinity(pIn3,
df60: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
df70: 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ing);.      if( 
df80: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
df90: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
dfa0: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
dfb0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
dfc0: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
dfd0: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
dfe0: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
dff0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61  (pIn1);.    Expa
e000: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
e010: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
e020: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
e030: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
e040: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
e050: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
e060: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
e070: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
e080: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
e090: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
e0a0: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
e0b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
e0c0: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
e0d0: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
e0e0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e0f0: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
e100: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
e110: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
e120: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
e130: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
e140: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
e150: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
e160: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
e170: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
e180: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
e190: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
e1a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
e1b0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e1c0: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
e1d0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
e1e0: 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
e1f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
e200: 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20   pOut);.  }else 
e210: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
e220: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
e230: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
e240: 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
e250: 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
e260: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
e270: 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
e280: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
e290: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
e2a0: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
e2b0: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
e2c0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
e2d0: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
e2e0: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
e2f0: 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ext OP_Permutati
e300: 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a  on, OP_Compare,.
e310: 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f  ** OP_Halt, or O
e320: 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79  P_ResultRow.  Ty
e330: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
e340: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
e350: 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64  d occur.** immed
e360: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
e370: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
e380: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
e390: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
e3a0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
e3b0: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
e3c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e3d0: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
e3e0: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
e3f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e400: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
e410: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
e420: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76  .** Compare to v
e430: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
e440: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
e450: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c  reg(P1+P3-1) (al
e460: 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41  l this.** one "A
e470: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
e480: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
e490: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
e4a0: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
e4b0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
e4c0: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
e4d0: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
e4e0: 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  t..**.** P4 is a
e4f0: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
e500: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
e510: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
e520: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
e530: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
e540: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
e550: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
e560: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
e570: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
e580: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
e590: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
e5a0: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
e5b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e5c0: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
e5d0: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
e5e0: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
e5f0: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
e600: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
e610: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
e620: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
e630: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
e640: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
e650: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
e660: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
e670: 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
e680: 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
e690: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
e6a0: 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
e6b0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
e6c0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
e6d0: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
e6e0: 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
e6f0: 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
e700: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
e710: 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
e720: 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20  t order */..  n 
e730: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
e740: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
e750: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
e760: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
e770: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
e780: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
e790: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
e7a0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
e7b0: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
e7c0: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
e7d0: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
e7e0: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
e7f0: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
e800: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
e810: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
e820: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
e830: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
e840: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
e850: 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p2+mx<=p->nM
e860: 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  em+1 );.  }else{
e870: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
e880: 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d  0 && p1+n<=p->nM
e890: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
e8a0: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
e8b0: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
e8c0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
e8d0: 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
e8e0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
e8f0: 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
e900: 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
e910: 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45 47  [i] : i;.    REG
e920: 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69  ISTER_TRACE(p1+i
e930: 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78  dx, &aMem[p1+idx
e940: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
e950: 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26  _TRACE(p2+idx, &
e960: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20  aMem[p2+idx]);. 
e970: 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65     assert( i<pKe
e980: 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b  yInfo->nField );
e990: 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
e9a0: 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
e9b0: 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
e9c0: 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
e9d0: 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
e9e0: 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
e9f0: 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
ea00: 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
ea10: 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
ea20: 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
ea30: 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29        if( bRev )
ea40: 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f   iCompare = -iCo
ea50: 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65  mpare;.      bre
ea60: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
ea70: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
ea80: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ea90: 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20  ode: Jump P1 P2 
eaa0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
eab0: 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63  p to the instruc
eac0: 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20  tion at address 
ead0: 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65  P1, P2, or P3 de
eae0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
eaf0: 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73  er.** in the mos
eb00: 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70  t recent OP_Comp
eb10: 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  are instruction 
eb20: 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61  the P1 vector wa
eb30: 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65  s less than.** e
eb40: 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
eb50: 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20  ter than the P2 
eb60: 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69  vector, respecti
eb70: 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  vely..*/.case OP
eb80: 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20  _Jump: {        
eb90: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
eba0: 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30    if( iCompare<0
ebb0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
ebc0: 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p1 - 1;.  }els
ebd0: 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d  e if( iCompare==
ebe0: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
ebf0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
ec00: 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  se{.    pc = pOp
ec10: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p3 - 1;.  }.  
ec20: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ec30: 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
ec40: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
ec50: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
ec60: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
ec70: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
ec80: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
ec90: 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
eca0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
ecb0: 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
ecc0: 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
ecd0: 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
ece0: 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
ecf0: 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
ed00: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
ed10: 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
ed20: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
ed30: 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
ed40: 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
ed50: 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
ed60: 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  *.**.** Take the
ed70: 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
ed80: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
ed90: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
eda0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
edb0: 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
edc0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
edd0: 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
ede0: 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
edf0: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
ee00: 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
ee10: 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
ee20: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ee30: 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
ee40: 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
ee50: 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
ee60: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
ee70: 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
ee80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ee90: 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
eea0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
eeb0: 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
eec0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
eed0: 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
eee0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
eef0: 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
ef00: 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
ef10: 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
ef20: 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
ef30: 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
ef40: 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
ef50: 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
ef60: 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
ef70: 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
ef80: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
ef90: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
efa0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
efb0: 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
efc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
efd0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
efe0: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
eff0: 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
f000: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
f010: 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
f020: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f030: 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
f040: 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
f050: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
f060: 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
f070: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
f080: 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
f090: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
f0a0: 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
f0b0: 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
f0c0: 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
f0d0: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
f0e0: 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
f0f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
f100: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
f110: 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
f120: 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
f130: 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
f140: 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
f150: 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
f160: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
f170: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
f180: 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
f190: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f1a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
f1b0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
f1c0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
f1d0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
f1e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
f1f0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f200: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
f210: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
f220: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
f230: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
f240: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
f250: 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
f260: 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
f270: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
f280: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
f290: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
f2a0: 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
f2b0: 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
f2c0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
f2d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
f2e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f2f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f300: 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
f310: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
f320: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
f330: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
f340: 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
f350: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
f360: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
f370: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
f380: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
f390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f3a0: 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
f3b0: 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
f3c0: 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
f3d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f3e0: 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
f3f0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
f400: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
f410: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
f420: 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
f430: 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
f440: 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
f450: 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
f460: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
f470: 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
f480: 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
f490: 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
f4a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
f4b0: 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
f4c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f4d0: 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
f4e0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
f4f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f500: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
f510: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
f520: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f530: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
f540: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
f550: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
f560: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
f570: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
f580: 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64  pOut, ~sqlite3Vd
f590: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
f5a0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f5b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
f5c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f5d0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
f5e0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
f5f0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
f600: 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ue.  The value i
f610: 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  s.** is consider
f620: 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
f630: 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
f640: 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
f650: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
f660: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
f670: 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69  the jump if P3 i
f680: 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s true..*/./* Op
f690: 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
f6a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
f6b0: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
f6c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
f6d0: 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
f6e0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   The value is.**
f6f0: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
f700: 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20  rue if it has a 
f710: 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66  numeric value of
f720: 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76   zero.  If the v
f730: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
f740: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
f750: 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69  the jump if P3 i
f760: 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20  s true..*/.case 
f770: 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20  OP_If:          
f780: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
f790: 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in1 */.case OP_I
f7a0: 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fNot: {         
f7b0: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
f7c0: 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49  */.  int c;.  pI
f7d0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
f7e0: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
f7f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
f800: 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70  l ){.    c = pOp
f810: 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23  ->p3;.  }else{.#
f820: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
f830: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
f840: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
f850: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
f860: 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20  1)!=0;.#else.   
f870: 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
f880: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
f890: 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
f8a0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
f8b0: 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
f8c0: 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63   !c;.  }.  if( c
f8d0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
f8e0: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
f8f0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f900: 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
f910: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
f920: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
f930: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
f940: 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
f950: 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
f960: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f970: 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
f980: 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
f990: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
f9a0: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
f9b0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f9c0: 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
f9d0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
f9e0: 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
f9f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
fa00: 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
fa10: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
fa20: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
fa30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
fa40: 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f  s not NULL.  .*/
fa50: 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  .case OP_NotNull
fa60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
fa70: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
fa80: 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
fa90: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
faa0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
fab0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
fac0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
fad0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
fae0: 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
faf0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fb00: 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
fb10: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
fb20: 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
fb30: 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
fb40: 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
fb50: 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
fb60: 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
fb70: 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
fb80: 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
fb90: 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
fba0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
fbb0: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
fbc0: 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
fbd0: 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
fbe0: 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
fbf0: 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
fc00: 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
fc10: 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
fc20: 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
fc30: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
fc40: 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
fc50: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
fc60: 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
fc70: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
fc80: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
fc90: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
fca0: 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
fcb0: 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
fcc0: 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
fcd0: 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
fce0: 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
fcf0: 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
fd00: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
fd10: 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
fd20: 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
fd30: 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
fd40: 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
fd50: 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
fd60: 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
fd70: 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
fd80: 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
fd90: 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
fda0: 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
fdb0: 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
fdc0: 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
fdd0: 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
fde0: 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
fdf0: 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
fe00: 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
fe10: 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
fe20: 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
fe30: 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
fe40: 65 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  et..*/.case OP_C
fe50: 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70  olumn: {.  u32 p
fe60: 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a  ayloadSize;   /*
fe70: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
fe80: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
fe90: 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53  /.  i64 payloadS
fea0: 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72  ize64; /* Number
feb0: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
fec0: 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
fed0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   p1;            
fee0: 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74  /* P1 value of t
fef0: 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  he opcode */.  i
ff00: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
ff10: 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62    /* column numb
ff20: 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a  er to retrieve *
ff30: 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
ff40: 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
ff50: 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63  BE cursor */.  c
ff60: 68 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20  har *zRec;      
ff70: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ff80: 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d  complete record-
ff90: 64 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73  data */.  BtCurs
ffa0: 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
ffb0: 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
ffc0: 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65   */.  u32 *aType
ffd0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70  ;        /* aTyp
ffe0: 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e  e[i] holds the n
fff0: 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74  umeric type of t
10000 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  he i-th column *
10010 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
10020 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
10030 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
10040 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
10050 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
10060 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
10070 20 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65          /* numbe
10080 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
10090 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
100a0 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
100b0 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
100c0 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
100d0 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
100e0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
100f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10100 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
10110 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20  .  char *zData; 
10120 20 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66        /* Part of
10130 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
10140 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d  g decoded */.  M
10150 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
10160 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
10170 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
10180 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
10190 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
101a0 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
101b0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
101c0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  decoded */.  u8 
101d0 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  *zIdx;          
101e0 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65  /* Index into he
101f0 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45  ader */.  u8 *zE
10200 6e 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20  ndHdr;       /* 
10210 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
10220 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
10230 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20  header */.  u32 
10240 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f  offset;        /
10250 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
10260 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20  e data */.  u64 
10270 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
10280 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 2e  * 64-bit offset.
10290 20 20 36 34 20 62 69 74 73 20 6e 65 65 64 65 64    64 bits needed
102a0 20 74 6f 20 63 61 74 63 68 20 6f 76 65 72 66 6c   to catch overfl
102b0 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64  ow */.  int szHd
102c0 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  r;         /* Si
102d0 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
102e0 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73   size field at s
102f0 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a  tart of record *
10300 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20  /.  int avail;  
10310 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10320 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
10330 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
10340 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
10350 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
10360 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
10370 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f  r */...  p1 = pO
10380 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
10390 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b  p->p2;.  pC = 0;
103a0 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
103b0 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
103c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c  );.  assert( p1<
103d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
103e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
103f0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
10400 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
10410 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
10420 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  ];.  MemSetTypeF
10430 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
10440 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30  ull);.  zRec = 0
10450 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f  ;..  /* This blo
10460 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69  ck sets the vari
10470 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65  able payloadSize
10480 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c   to be the total
10490 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20   number of.  ** 
104a0 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
104b0 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a  ord..  **.  ** z
104c0 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65  Rec is set to be
104d0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65   the complete te
104e0 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  xt of the record
104f0 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61   if it is availa
10500 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f  ble..  ** The co
10510 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65  mplete record te
10520 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61  xt is always ava
10530 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64  ilable for pseud
10540 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66  o-tables.  ** If
10550 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73   the record is s
10560 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f  tored in a curso
10570 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  r, the complete 
10580 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a  record text.  **
10590 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61   might be availa
105a0 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e  ble in the  pC->
105b0 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20  aRow cache.  Or 
105c0 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e  it might not be.
105d0 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74  .  ** If the dat
105e0 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  a is unavailable
105f0 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74  ,  zRec is set t
10600 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a  o NULL..  **.  *
10610 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74  * We also comput
10620 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
10630 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
10640 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73  ecord.  For curs
10650 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75  ors,.  ** the nu
10660 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10670 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
10680 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65   VdbeCursor.nFie
10690 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f  ld element..  */
106a0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
106b0 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  [p1];.  assert( 
106c0 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  pC!=0 );.#ifndef
106d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
106e0 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65  TUALTABLE.  asse
106f0 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  rt( pC->pVtabCur
10700 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66  sor==0 );.#endif
10710 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
10720 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
10730 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
10740 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73   The record is s
10750 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65  tored in a B-Tre
10760 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  e */.    rc = sq
10770 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
10780 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
10790 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
107a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
107b0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
107c0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61  lRow ){.      pa
107d0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20  yloadSize = 0;. 
107e0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d     }else if( pC-
107f0 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d  >cacheStatus==p-
10800 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20  >cacheCtr ){.   
10810 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
10820 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
10830 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28  ;.      zRec = (
10840 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a  char*)pC->aRow;.
10850 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
10860 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
10870 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
10880 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
10890 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
108a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
108b0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
108c0 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
108d0 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65  e64);.      asse
108e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
108f0 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62  K );   /* True b
10900 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
10910 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
10920 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ove */.      /* 
10930 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
10940 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
10950 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
10960 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
10970 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
10980 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
10990 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
109a0 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
109b0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
109c0 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
109d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
109e0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20  payloadSize64 & 
109f0 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d  SQLITE_MAX_U32)=
10a00 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a  =(u64)payloadSiz
10a10 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79  e64 );.      pay
10a20 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
10a30 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
10a40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10a50 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
10a60 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
10a70 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
10a80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
10a90 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
10aa0 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29  r, &payloadSize)
10ab0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
10ac0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
10ad0 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
10ae0 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
10af0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
10b00 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
10b10 65 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70 52  eReg>0 ){.    pR
10b20 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70  eg = &aMem[pC->p
10b30 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
10b40 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
10b50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
10b60 6f 62 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61  ob );.    payloa
10b70 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b  dSize = pReg->n;
10b80 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67  .    zRec = pReg
10b90 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ->z;.    pC->cac
10ba0 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d  heStatus = (pOp-
10bb0 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52  >p5&OPFLAG_CLEAR
10bc0 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53  CACHE) ? CACHE_S
10bd0 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43  TALE : p->cacheC
10be0 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  tr;.    assert( 
10bf0 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
10c00 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d  | zRec!=0 );.  }
10c10 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e  else{.    /* Con
10c20 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f  sider the row to
10c30 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   be NULL */.    
10c40 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b  payloadSize = 0;
10c50 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10c60 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10c70 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
10c80 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
10c90 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
10ca0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
10cb0 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10cc0 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
10cd0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10ce0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
10cf0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10d00 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
10d10 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
10d20 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
10d30 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10d40 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10d50 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10d60 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
10d70 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61   pC->nField;.  a
10d80 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64  ssert( p2<nField
10d90 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61   );..  /* Read a
10da0 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62  nd parse the tab
10db0 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72  le header.  Stor
10dc0 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
10dd0 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20   the parse.  ** 
10de0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
10df0 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65  header cache fie
10e00 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f  lds of the curso
10e10 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20  r..  */.  aType 
10e20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69  = pC->aType;.  i
10e30 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10e40 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10e50 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d  ){.    aOffset =
10e60 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
10e70 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
10e80 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76  t(aType);.    av
10e90 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  ail = 0;.    pC-
10ea0 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73  >aOffset = aOffs
10eb0 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65  et = &aType[nFie
10ec0 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79  ld];.    pC->pay
10ed0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f  loadSize = paylo
10ee0 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e  adSize;.    pC->
10ef0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
10f00 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20  >cacheCtr;..    
10f10 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f  /* Figure out ho
10f20 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65  w many bytes are
10f30 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a   in the header *
10f40 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  /.    if( zRec )
10f50 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  {.      zData = 
10f60 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  zRec;.    }else{
10f70 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
10f80 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
10f90 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
10fa0 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79  )sqlite3BtreeKey
10fb0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
10fc0 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ail);.      }els
10fd0 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
10fe0 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
10ff0 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
11000 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
11010 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a        }.      /*
11020 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44   If KeyFetch()/D
11030 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67  ataFetch() manag
11040 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e  ed to get the en
11050 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20  tire payload,.  
11060 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20      ** save the 
11070 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70  payload in the p
11080 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
11090 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75  That will save u
110a0 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20  s from.      ** 
110b0 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61  having to make a
110c0 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20  dditional calls 
110d0 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e  to fetch the con
110e0 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a  tent portion of.
110f0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
11100 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
11110 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
11120 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  l>=0 );.      if
11130 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ( payloadSize <=
11140 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
11150 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44         zRec = zD
11160 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ata;.        pC-
11170 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61  >aRow = (u8*)zDa
11180 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ta;.      }else{
11190 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
111a0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  w = 0;.      }. 
111b0 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20     }.    /* The 
111c0 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
111d0 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20   is true in all 
111e0 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65  cases accept whe
111f0 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  n.    ** the dat
11200 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62  abase file has b
11210 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78  een corrupted ex
11220 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a  ternally..    **
11230 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63      assert( zRec
11240 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61  !=0 || avail>=pa
11250 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61  yloadSize || ava
11260 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20  il>=9 ); */.    
11270 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e  szHdr = getVarin
11280 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  t32((u8*)zData, 
11290 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a  offset);..    /*
112a0 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
112b0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
112c0 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
112d0 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
112e0 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
112f0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
11300 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
11310 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
11320 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
11330 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
11340 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
11350 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
11360 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
11370 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
11380 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
11390 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
113a0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
113b0 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
113c0 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
113d0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
113e0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
113f0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
11400 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
11410 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
11420 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
11430 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
11440 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
11450 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
11460 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
11470 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
11480 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
11490 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
114a0 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20  set > 98307 ){. 
114b0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
114c0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
114d0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
114e0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a  umn_out;.    }..
114f0 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69      /* Compute i
11500 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  n len the number
11510 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
11520 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61  a we need to rea
11530 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  d in order.    *
11540 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20  * to get nField 
11550 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66  type values.  of
11560 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72  fset is an upper
11570 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20   bound on this. 
11580 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65   But.    ** nFie
11590 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e  ld might be sign
115a0 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74  ificantly less t
115b0 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d  han the true num
115c0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20  ber of columns. 
115d0 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62     ** in the tab
115e0 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20  le, and in that 
115f0 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33  case, 5*nField+3
11600 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65   might be smalle
11610 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20  r than offset.. 
11620 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f     ** We want to
11630 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e   minimize len in
11640 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20   order to limit 
11650 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
11660 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c  memory.    ** al
11670 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69  location, especi
11680 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70  ally if a corrup
11690 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  t database file 
116a0 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65  has caused offse
116b0 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f  t.    ** to be o
116c0 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74  versized. Offset
116d0 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39   is limited to 9
116e0 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74  8307 above.  But
116f0 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20   98307 might.   
11700 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64   ** still exceed
11710 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
11720 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
11730 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75   on some configu
11740 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20  rations..    ** 
11750 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20  On systems that 
11760 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20  cannot tolerate 
11770 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
11780 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64  ocations, nField
11790 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c  *5+3.    ** will
117a0 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20   likely be much 
117b0 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46  smaller since nF
117c0 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  ield will likely
117d0 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20   be less than.  
117e0 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20    ** 20 or so.  
117f0 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61  This insures tha
11800 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  t Robson memory 
11810 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11820 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74  s are.    ** not
11830 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66   exceeded even f
11840 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62  or corrupt datab
11850 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a  ase files..    *
11860 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65  /.    len = nFie
11870 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66  ld*5 + 3;.    if
11880 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66  ( len > (int)off
11890 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74  set ) len = (int
118a0 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a  )offset;..    /*
118b0 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20   The KeyFetch() 
118c0 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61  or DataFetch() a
118d0 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e  bove are fast an
118e0 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65  d will get the e
118f0 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63  ntire.    ** rec
11900 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f  ord header in mo
11910 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74  st cases.  But t
11920 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f  hey will fail to
11930 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74   get the complet
11940 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
11950 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65  header if the re
11960 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73  cord header does
11970 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69   not fit on a si
11980 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a  ngle page.    **
11990 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20   in the B-Tree. 
119a0 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65   When that happe
119b0 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56  ns, use sqlite3V
119c0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
119d0 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75  ) to.    ** acqu
119e0 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ire the complete
119f0 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20   header text..  
11a00 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52    */.    if( !zR
11a10 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20  ec && avail<len 
11a20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
11a30 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
11a40 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
11a50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
11a60 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
11a70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43  Crsr, 0, len, pC
11a80 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d  ->isIndex, &sMem
11a90 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
11aa0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
11ab0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11ac0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
11ad0 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  }.      zData = 
11ae0 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20  sMem.z;.    }.  
11af0 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20    zEndHdr = (u8 
11b00 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20  *)&zData[len];. 
11b10 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29     zIdx = (u8 *)
11b20 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a  &zData[szHdr];..
11b30 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20      /* Scan the 
11b40 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69  header and use i
11b50 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65  t to fill in the
11b60 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66   aType[] and aOf
11b70 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72  fset[].    ** ar
11b80 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20  rays.  aType[i] 
11b90 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
11ba0 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f   type integer fo
11bb0 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a  r the i-th.    *
11bc0 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66  * column and aOf
11bd0 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  fset[i] will con
11be0 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20  tain the offset 
11bf0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
11c00 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ng.    ** of the
11c10 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73   record to the s
11c20 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61  tart of the data
11c30 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f   for the i-th co
11c40 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lumn.    */.    
11c50 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73 65  offset64 = offse
11c60 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  t;.    for(i=0; 
11c70 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
11c80 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
11c90 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
11ca0 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
11cb0 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20 20  u32)offset64;.  
11cc0 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65        zIdx += ge
11cd0 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
11ce0 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
11cf0 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
11d00 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11d10 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d  TypeLen(aType[i]
11d20 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
11d30 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20          /* If i 
11d40 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69  is less that nFi
11d50 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  eld, then there 
11d60 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20  are less fields 
11d70 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  in this.        
11d80 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53  ** record than S
11d90 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64  etNumColumns ind
11da0 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65  icated there are
11db0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
11dc0 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
11dd0 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74  . Set the offset
11de0 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63   for any extra c
11df0 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65  olumns not prese
11e00 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a  nt in.        **
11e10 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30   the record to 0
11e20 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64  . This tells cod
11e30 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65  e below to store
11e40 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20   a NULL.        
11e50 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  ** instead of de
11e60 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
11e70 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
11e80 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
11e90 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
11ea0 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
11eb0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
11ec0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
11ed0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
11ee0 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
11ef0 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
11f00 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
11f10 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
11f20 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
11f30 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
11f40 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
11f50 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
11f60 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
11f70 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
11f80 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
11f90 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
11fa0 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
11fb0 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
11fc0 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
11fd0 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
11fe0 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
11ff0 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
12000 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
12010 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
12020 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
12030 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
12040 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
12050 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f   > zEndHdr)|| (o
12060 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f 61  ffset64 > payloa
12070 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28  dSize).     || (
12080 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
12090 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34 29   offset64!=(u64)
120a0 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a  payloadSize) ){.
120b0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
120c0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
120d0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
120e0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
120f0 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
12100 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61  e column informa
12110 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74  tion. If aOffset
12120 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  [p2] is non-zero
12130 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73  , then .  ** des
12140 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c  erialize the val
12150 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
12160 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  rd. If aOffset[p
12170 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a  2] is zero,.  **
12180 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
12190 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64  not enough field
121a0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
121b0 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20  to satisfy the. 
121c0 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e   ** request.  In
121d0 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
121e0 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f  the value NULL o
121f0 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73  r to P4 if P4 is
12200 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  .  ** a pointer 
12210 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e  to a Mem object.
12220 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66  .  */.  if( aOff
12230 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61  set[p2] ){.    a
12240 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
12250 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
12260 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71  zRec ){.      sq
12270 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
12280 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73  aseExternal(pDes
12290 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
122a0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
122b0 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73  u8 *)&zRec[aOffs
122c0 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70  et[p2]], aType[p
122d0 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
122e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e  }else{.      len
122f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12300 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
12310 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71  e[p2]);.      sq
12320 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
12330 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a  (&sMem, pDest);.
12340 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12350 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12360 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
12370 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e  t[p2], len, pC->
12380 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
12390 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
123a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
123b0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
123c0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
123d0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
123e0 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  em.z;.      sqli
123f0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
12400 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79  ((u8*)zData, aTy
12410 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
12420 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d      }.    pDest-
12430 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
12440 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
12450 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
12460 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73  4_MEM ){.      s
12470 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
12480 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
12490 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
124a0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d  M_Static);.    }
124b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
124c0 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
124d0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
124e0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20   }.  }..  /* If 
124f0 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  we dynamically a
12500 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74  llocated space t
12510 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
12520 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  (in the.  ** sql
12530 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12540 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
12550 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
12560 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
12570 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c  .  ** dynamicall
12580 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
12590 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44  e over to the pD
125a0 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20  est structure.. 
125b0 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74   ** This prevent
125c0 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e  s a memory copy.
125d0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d  .  */.  if( sMem
125e0 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  .zMalloc ){.    
125f0 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
12600 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
12610 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
12620 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
12630 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73  _Dyn) );.    ass
12640 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
12650 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
12660 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
12670 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
12680 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
12690 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
126a0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
126b0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
126c0 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
126d0 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
126e0 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d  z;.    pDest->zM
126f0 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61  alloc = sMem.zMa
12700 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  lloc;.  }..  rc 
12710 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
12720 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
12730 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  est);..op_column
12740 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
12750 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
12760 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
12770 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
12780 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
12790 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
127a0 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
127b0 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61   *.**.** Apply a
127c0 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
127d0 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
127e0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
127f0 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
12800 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
12810 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
12820 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
12830 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12840 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12850 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12860 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12870 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
12880 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
12890 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
128a0 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
128b0 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
128c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69  onst char *zAffi
128d0 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61  nity;   /* The a
128e0 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70  ffinity to be ap
128f0 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  plied */.  char 
12900 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  cAff;           
12910 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20      /* A single 
12920 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66  character of aff
12930 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66  inity */..  zAff
12940 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
12950 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  z;.  assert( zAf
12960 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61  finity!=0 );.  a
12970 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
12980 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
12990 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
129a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65  Op->p1];.  while
129b0 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66  ( (cAff = *(zAff
129c0 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a  inity++))!=0 ){.
129d0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
129e0 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e   <= &p->aMem[p->
129f0 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 45 78 70  nMem] );.    Exp
12a00 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
12a10 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
12a20 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63  (pIn1, cAff, enc
12a30 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31  oding);.    pIn1
12a40 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
12a50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
12a60 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
12a70 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
12a80 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
12a90 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
12aa0 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e 67  h P1 into a sing
12ab0 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74  le entry.** suit
12ac0 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73 20  able for use as 
12ad0 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
12ae0 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
12af0 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
12b00 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
12b10 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
12b20 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72 72  e format are irr
12b30 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20  elevant as long 
12b40 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c  as.** the OP_Col
12b50 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
12b60 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
12b70 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72   later..** Refer
12b80 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20   to source code 
12b90 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  comments for the
12ba0 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
12bb0 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74  record.** format
12bc0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
12bd0 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
12be0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
12bf0 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
12c00 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12c10 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12c20 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12c30 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12c40 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
12c50 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
12c60 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
12c70 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
12c80 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
12c90 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
12ca0 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
12cb0 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
12cc0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
12cd0 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
12ce0 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
12cf0 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
12d00 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
12d10 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e  e affinity NONE.
12d20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
12d30 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a  Record: {.  u8 *
12d40 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20  zNewRecord;     
12d50 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74     /* A buffer t
12d60 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
12d70 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
12d80 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rd */.  Mem *pRe
12d90 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
12da0 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * The new record
12db0 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b   */.  u64 nData;
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12dd0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12de0 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
12df0 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20  .  int nHdr;    
12e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12e10 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
12e20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
12e30 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20    i64 nByte;    
12e40 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
12e50 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
12e60 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20  for this record 
12e70 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
12e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12e90 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
12ea0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
12eb0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
12ec0 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20    int nVarint;  
12ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12ee0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
12ef0 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32   varint */.  u32
12f00 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20   serial_type;   
12f10 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c      /* Type fiel
12f20 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74  d */.  Mem *pDat
12f30 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a0;           /*
12f40 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20   First field to 
12f50 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
12f60 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
12f70 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20   Mem *pLast;    
12f80 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
12f90 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63  field of the rec
12fa0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ord */.  int nFi
12fb0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eld;            
12fc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
12fd0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
12fe0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
12ff0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a  finity;       /*
13000 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74   The affinity st
13010 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63  ring for the rec
13020 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c  ord */.  int fil
13030 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20  e_format;       
13040 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74  /* File format t
13050 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69  o use for encodi
13060 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  ng */.  int i;  
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13080 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
13090 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a  zNewRecord[] */.
130a0 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
130b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
130c0 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
130d0 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
130e0 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
130f0 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
13100 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
13110 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
13120 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
13130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13170 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
13180 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
13190 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
131a0 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
131b0 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
131c0 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
131d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
131e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
131f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13210 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
13220 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
13230 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
13240 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
13250 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
13260 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
13270 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   froth..  **.  *
13280 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
13290 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
132a0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
132b0 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
132c0 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
132d0 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
132e0 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
132f0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
13300 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
13310 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
13320 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
13330 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
13340 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
13350 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
13360 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
13370 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
13380 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13390 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
133a0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
133b0 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
133c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
133d0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
133e0 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79 74 65 20  pace */.  nByte 
133f0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
13400 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
13410 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
13420 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ord */.  nZero =
13430 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
13440 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
13450 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
13460 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
13470 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
13480 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
13490 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
134a0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
134b0 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
134c0 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
134d0 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70  p->nMem+1 );.  p
134e0 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
134f0 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
13500 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
13510 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
13520 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
13530 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
13540 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
13550 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
13560 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
13570 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
13580 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
13590 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
135a0 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
135b0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
135c0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
135d0 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44  */.  for(pRec=pD
135e0 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
135f0 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  t; pRec++){.    
13600 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
13610 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
13620 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
13630 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
13640 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
13650 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
13660 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
13670 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
13680 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13690 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
136a0 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
136b0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
136c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
136d0 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
136e0 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
136f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
13700 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
13710 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
13720 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
13730 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
13740 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
13750 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
13760 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
13770 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
13780 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
13790 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
137a0 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
137b0 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
137c0 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
137d0 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
137e0 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
137f0 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
13800 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
13810 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
13820 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c  .    }else if( l
13830 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  en ){.      nZer
13840 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  o = 0;.    }.  }
13850 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
13860 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
13870 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
13880 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64  he size */.  nHd
13890 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73  r += nVarint = s
138a0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
138b0 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61  nHdr);.  if( nVa
138c0 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
138d0 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20  ntLen(nHdr) ){. 
138e0 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20     nHdr++;.  }. 
138f0 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
13900 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ata-nZero;.  if(
13910 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
13920 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
13930 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
13940 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
13950 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
13960 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
13970 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
13980 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
13990 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
139a0 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
139b0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
139c0 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
139d0 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
139e0 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
139f0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
13a00 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
13a10 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
13a20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
13a30 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
13a40 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
13a50 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
13a60 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ed)..  */.  asse
13a70 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
13a80 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
13a90 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
13aa0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
13ab0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
13ac0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
13ad0 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
13ae0 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20  nByte, 0) ){.   
13af0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
13b00 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
13b10 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
13b20 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
13b30 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
13b40 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
13b50 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
13b60 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
13b70 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
13b80 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69  Rec++){.    seri
13b90 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
13ba0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
13bb0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
13bc0 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74  t);.    i += put
13bd0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
13be0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
13bf0 74 79 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73  type);      /* s
13c00 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
13c10 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  }.  for(pRec=pDa
13c20 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
13c30 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73  ; pRec++){  /* s
13c40 65 72 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20  erial data */.  
13c50 20 20 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    i += sqlite3Vd
13c60 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
13c70 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74  wRecord[i], (int
13c80 29 28 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63  )(nByte-i), pRec
13c90 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20  ,file_format);. 
13ca0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d   }.  assert( i==
13cb0 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
13cc0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
13cd0 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
13ce0 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  m );.  pOut->n =
13cf0 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
13d00 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
13d10 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b  _Blob | MEM_Dyn;
13d20 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
13d30 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
13d40 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
13d50 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
13d60 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
13d70 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
13d80 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
13d90 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
13da0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
13db0 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
13dc0 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
13dd0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
13de0 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
13df0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
13e00 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
13e10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
13e20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
13e30 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
13e40 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
13e50 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
13e60 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
13e70 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
13e80 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
13e90 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
13ea0 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
13eb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
13ec0 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
13ed0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
13ee0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
13ef0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  e */.  i64 nEntr
13f00 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
13f10 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d  Crsr;..  pCrsr =
13f20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
13f30 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  1]->pCursor;.  i
13f40 66 28 20 70 43 72 73 72 20 29 7b 0a 20 20 20 20  f( pCrsr ){.    
13f50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
13f60 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
13f70 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65 7b  Entry);.  }else{
13f80 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  .    nEntry = 0;
13f90 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
13fa0 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
13fb0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
13fc0 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
13fd0 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
13fe0 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
13ff0 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
14000 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
14010 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
14020 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
14030 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
14040 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
14050 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
14060 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
14070 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
14080 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
14090 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
140a0 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
140b0 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
140c0 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
140d0 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
140e0 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
14110 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
14120 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
14130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14140 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
14150 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
14160 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
14170 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
14180 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
14190 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
141a0 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
141b0 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
141c0 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
141d0 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
141e0 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
141f0 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
14200 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
14210 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
14220 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
14230 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
14240 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
14250 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
14260 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
14270 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
14280 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
14290 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
142a0 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
142b0 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
142c0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
142d0 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
142e0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
142f0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
14300 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
14310 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
14320 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
14330 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
14340 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
14350 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
14360 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
14370 20 20 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56    if( db->writeV
14380 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
14390 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
143a0 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
143b0 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
143c0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
143d0 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
143e0 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
143f0 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
14400 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
14410 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
14420 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
14430 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14440 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
14450 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
14460 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
14470 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
14480 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
14490 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
144a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
144b0 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
144c0 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
144d0 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  );..      /* Cre
144e0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
144f0 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
14500 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
14510 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
14520 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  w(db, sizeof(Sav
14530 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
14540 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
14550 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
14560 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
14570 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
14580 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
14590 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
145a0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
145b0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
145c0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
145d0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
145e0 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
145f0 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
14600 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
14610 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
14620 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
14630 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
14640 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
14650 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
14660 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
14670 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
14680 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
14690 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
146a0 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
146b0 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20        }.    .   
146c0 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
146d0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
146e0 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
146f0 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
14700 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
14710 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
14720 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
14730 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
14740 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
14750 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
14760 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
14770 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  redCons;.      }
14780 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
14790 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
147a0 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
147b0 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
147c0 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
147d0 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
147e0 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
147f0 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
14800 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
14810 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
14820 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
14830 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
14840 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
14850 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
14860 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
14870 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
14880 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
14890 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
148a0 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
148b0 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
148c0 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
148d0 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
148e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
148f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
14900 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75  rMsg, db, "no su
14910 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73  ch savepoint: %s
14920 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  ", zName);.     
14930 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
14940 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OR;.    }else if
14950 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 77  ( .        db->w
14960 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c  riteVdbeCnt>0 ||
14970 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f   (p1==SAVEPOINT_
14980 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d 3e  ROLLBACK && db->
14990 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29  activeVdbeCnt>1)
149a0 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f   .    ){.      /
149b0 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
149c0 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
149d0 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
149e0 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
149f0 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
14a00 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
14a10 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  nts. It is not p
14a20 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c 62  ossible to rollb
14a30 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e 74 0a  ack a savepoint.
14a40 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68 65 72        ** if ther
14a50 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
14a60 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74 20 61   statements at a
14a70 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
14a80 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
14a90 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
14aa0 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63   db, .        "c
14ab0 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70 6f 69  annot %s savepoi
14ac0 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
14ad0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
14ae0 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d 3d 53  ,.        (p1==S
14af0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
14b00 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a 20  K ? "rollback": 
14b10 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20 20 20  "release").     
14b20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   );.      rc = S
14b30 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
14b40 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
14b50 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
14b60 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
14b70 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
14b80 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
14b90 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
14ba0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
14bb0 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
14bc0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
14bd0 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
14be0 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
14bf0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
14c00 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
14c10 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
14c20 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
14c30 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
14c40 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
14c50 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
14c60 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
14c70 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
14c80 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
14c90 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
14ca0 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
14cb0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
14cc0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
14cd0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
14ce0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
14cf0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
14d00 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
14d10 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
14d20 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
14d30 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
14d40 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14d50 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
14d60 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
14d70 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
14d80 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
14d90 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
14da0 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
14db0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
14dc0 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
14dd0 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
14de0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14df0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
14e00 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
14e10 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
14e20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  1;.        for(i
14e30 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
14e40 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
14e50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14e60 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
14e70 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
14e80 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
14e90 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
14ea0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
14eb0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
14ec0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14ed0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
14ee0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14ef0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
14f00 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28  NT_ROLLBACK && (
14f10 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
14f20 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21  _InternChanges)!
14f30 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
14f40 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
14f50 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
14f60 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  db);.          s
14f70 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
14f80 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29  nalSchema(db, 0)
14f90 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
14fa0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
14fb0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
14fc0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
14fd0 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
14fe0 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
14ff0 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
15000 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
15010 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
15020 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
15030 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
15040 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
15050 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
15060 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
15070 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
15080 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
15090 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
150a0 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
150b0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
150c0 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
150d0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
150e0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
150f0 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
15100 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
15110 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
15120 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
15130 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
15140 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
15150 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
15160 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
15170 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
15180 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
15190 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
151a0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
151b0 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
151c0 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
151d0 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
151e0 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
151f0 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
15200 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
15210 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
15220 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
15230 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
15240 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
15250 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
15260 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
15270 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
15280 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
15290 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
152a0 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
152b0 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
152c0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
152d0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
152e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
152f0 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
15300 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
15310 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
15320 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
15330 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
15340 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
15350 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
15360 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
15370 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
15380 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
15390 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
153a0 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
153b0 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
153c0 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
153d0 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
153e0 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
153f0 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
15400 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
15410 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
15420 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
15430 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
15440 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
15450 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
15460 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
15470 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
15480 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
15490 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
154a0 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
154b0 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
154c0 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
154d0 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
154e0 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
154f0 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74  ollback;.  int t
15500 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69  urnOnAC;..  desi
15510 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
15520 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
15530 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
15540 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73    turnOnAC = des
15550 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
15560 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
15570 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  t;.  assert( des
15580 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
15590 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
155a0 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
155b0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
155c0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
155d0 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
155e0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74   assert( db->act
155f0 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20  iveVdbeCnt>0 ); 
15600 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
15610 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
15620 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72  ve */..  if( tur
15630 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61  nOnAC && iRollba
15640 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  ck && db->active
15650 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
15660 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
15670 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
15680 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
15690 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
156a0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
156b0 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
156c0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
156d0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
156e0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
156f0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
15700 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
15710 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
15720 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
15730 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15740 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
15750 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
15760 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
15770 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15780 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15790 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
157a0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
157b0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
157c0 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64   !iRollback && d
157d0 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
157e0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
157f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
15800 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
15810 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
15820 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
15830 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
15840 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
15850 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
15860 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
15870 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
15880 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15890 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
158a0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
158b0 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
158c0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
158d0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
158e0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
158f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15900 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
15910 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
15920 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
15930 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
15940 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
15950 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
15960 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
15970 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
15980 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20  ackAll(db);.    
15990 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
159a0 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
159b0 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
159c0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
159d0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
159e0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
159f0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
15a00 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
15a10 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
15a20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15a30 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  t;.      if( sql
15a40 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
15a50 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
15a60 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
15a70 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  pc;.        db->
15a80 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
15a90 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
15aa0 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20  ommit);.        
15ab0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
15ac0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
15ad0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15ae0 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
15af0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  }.    assert( db
15b00 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
15b10 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
15b20 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
15b30 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
15b40 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
15b50 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15b60 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
15b70 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
15b80 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
15b90 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
15ba0 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
15bb0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15bc0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15bd0 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21  , db,.        (!
15be0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15bf0 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74  t)?"cannot start
15c00 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
15c10 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
15c20 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28  ion":(.        (
15c30 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  iRollback)?"cann
15c40 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
15c50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
15c60 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
15c70 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
15c80 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
15c90 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
15ca0 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
15cb0 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
15cc0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
15cd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15ce0 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
15cf0 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  n P1 P2 * * *.**
15d00 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
15d10 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72  saction.  The tr
15d20 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77  ansaction ends w
15d30 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20  hen a Commit or 
15d40 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f  Rollback.** opco
15d50 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  de is encountere
15d60 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e  d.  Depending on
15d70 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
15d80 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a   setting, the.**
15d90 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
15da0 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65  ht also be rolle
15db0 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72  d back if an err
15dc0 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
15dd0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
15de0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
15df0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
15e00 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
15e10 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
15e20 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
15e30 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
15e40 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
15e50 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
15e60 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
15e70 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
15e80 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
15e90 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
15ea0 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
15eb0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
15ec0 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
15ed0 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
15ee0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
15ef0 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52 56  arted.  A RESERV
15f00 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62  ED lock is.** ob
15f10 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
15f20 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
15f30 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
15f40 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
15f50 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72    No.** other pr
15f60 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74 20  ocess can start 
15f70 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74 72  another write tr
15f80 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20  ansaction while 
15f90 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
15fa0 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e   is.** underway.
15fb0 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69    Starting a wri
15fc0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
15fd0 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f  lso creates a ro
15fe0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
15ff0 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73  A.** write trans
16000 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
16010 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e  tarted before an
16020 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65  y changes can be
16030 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20   made to the.** 
16040 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50 32  database.  If P2
16050 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65 72   is 2 or greater
16060 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49   then an EXCLUSI
16070 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20  VE lock is also 
16080 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74  obtained.** on t
16090 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  he file..**.** I
160a0 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
160b0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
160c0 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
160d0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
160e0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
160f0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
16100 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
16110 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
16120 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
16130 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
16140 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
16150 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
16160 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
16170 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
16180 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
16190 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
161a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
161b0 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
161c0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
161d0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
161e0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
161f0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
16200 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
16210 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
16220 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
16230 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
16240 73 20 74 68 65 20 61 66 66 65 63 74 73 20 6f 66  s the affects of
16250 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
16260 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
16270 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
16280 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
16290 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
162a0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
162b0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
162c0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
162d0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
162e0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
162f0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
16300 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
16310 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
16320 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
16330 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
16340 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
16350 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
16360 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
16370 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
16380 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
16390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
163a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
163b0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
163c0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
163d0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
163e0 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
163f0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
16400 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
16410 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
16420 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
16430 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
16440 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
16450 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
16460 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
16470 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
16480 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16490 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
164a0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
164b0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
164c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
164d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
164e0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
164f0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
16500 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
16510 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
16520 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
16530 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  | db->activeVdbe
16540 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  Cnt>1) .    ){. 
16550 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
16560 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
16570 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
16580 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
16590 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
165a0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
165b0 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
165c0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
165d0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
165e0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
165f0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
16600 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
16610 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
16620 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20  ement;.      }. 
16630 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
16640 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
16650 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
16660 6e 74 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 53  nt);..      /* S
16670 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
16680 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
16690 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
166a0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
166b0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
166c0 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
166d0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
166e0 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
166f0 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
16700 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
16710 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
16720 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
16730 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
16740 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
16750 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16760 64 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  dCons;.    }.  }
16770 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16780 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
16790 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
167a0 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
167b0 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
167c0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
167d0 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
167e0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
167f0 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
16800 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
16810 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
16820 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
16830 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
16840 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
16850 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
16860 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
16870 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
16880 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
16890 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
168a0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
168b0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
168c0 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
168d0 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
168e0 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
168f0 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
16900 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
16910 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
16920 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
16930 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
16940 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
16950 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
16960 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
16970 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
16980 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
16990 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
169a0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
169b0 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
169c0 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
169d0 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
169e0 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
169f0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
16a00 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
16a10 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
16a20 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
16a30 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
16a40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
16a50 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
16a60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
16a70 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
16a80 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a  1<<iDb))!=0 );..
16a90 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
16aa0 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
16ab0 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
16ac0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
16ad0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
16ae0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
16af0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
16b00 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
16b10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
16b20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
16b30 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
16b40 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
16b50 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
16b60 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
16b70 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
16b80 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
16b90 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
16ba0 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
16bb0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
16bc0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
16bd0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
16be0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
16bf0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
16c00 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
16c10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
16c20 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
16c30 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
16c40 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
16c50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
16c60 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
16c70 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
16c80 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
16c90 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
16ca0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
16cb0 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
16cc0 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
16cd0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
16ce0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
16cf0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
16d00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
16d10 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
16d20 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
16d30 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
16d40 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
16d50 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
16d60 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
16d70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
16d80 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 70  b->pBt!=0 );.  p
16d90 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
16da0 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p3];.  sqlite3V
16db0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
16dc0 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
16dd0 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
16de0 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
16df0 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
16e00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16e10 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
16e20 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
16e30 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
16e40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
16e50 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
16e60 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
16e70 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
16e80 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
16e90 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
16ea0 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
16eb0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
16ec0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
16ed0 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
16ee0 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
16ef0 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
16f00 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
16f10 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
16f20 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
16f30 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
16f40 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
16f50 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
16f60 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
16f70 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
16f80 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
16f90 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
16fa0 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
16fb0 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
16fc0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
16fd0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
16fe0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
16ff0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
17000 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
17010 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
17020 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
17030 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
17040 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
17050 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
17060 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17070 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31   VerifyCookie P1
17080 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63   P2 *.**.** Chec
17090 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67  k the value of g
170a0 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70  lobal database p
170b0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
170c0 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  0 (the.** schema
170d0 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61   version) and ma
170e0 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71  ke sure it is eq
170f0 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20  ual to P2.  .** 
17100 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  P1 is the databa
17110 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  se number which 
17120 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69  is 0 for the mai
17130 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
17140 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65  ** and 1 for the
17150 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65   file holding te
17160 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
17170 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e  nd some higher n
17180 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78  umber.** for aux
17190 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
171a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b  ..**.** The cook
171b0 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
171c0 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
171d0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
171e0 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
171f0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
17200 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
17210 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
17220 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
17230 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
17240 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
17250 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
17260 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  the schema..**.*
17270 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73  * Either a trans
17280 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
17290 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65  have been starte
172a0 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20  d or an OP_Open 
172b0 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65  needs.** to be e
172c0 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61  xecuted (to esta
172d0 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63  blish a read loc
172e0 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f  k) before this o
172f0 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f  pcode is.** invo
17300 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ked..*/.case OP_
17310 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a  VerifyCookie: {.
17320 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42    int iMeta;.  B
17330 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73  tree *pBt;.  ass
17340 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
17350 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
17360 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
17370 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
17380 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
17390 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
173a0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
173b0 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ;.  if( pBt ){. 
173c0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
173d0 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
173e0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
173f0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
17400 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
17410 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Meta = 0;.  }.  
17420 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  if( iMeta!=pOp->
17430 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p2 ){.    sqlite
17440 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
17450 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
17460 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
17470 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
17480 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
17490 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
174a0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
174b0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
174c0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
174d0 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
174e0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
174f0 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
17500 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
17510 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
17520 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
17530 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
17540 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
17550 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
17560 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
17570 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
17580 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
17590 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
175a0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
175b0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
175c0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
175d0 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
175e0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
175f0 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
17600 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
17610 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
17620 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
17630 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
17640 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
17650 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
17660 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
17670 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
17680 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
17690 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
176a0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
176b0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
176c0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
176d0 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
176e0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
176f0 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
17700 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
17710 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
17720 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
17730 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
17740 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
17750 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
17760 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
17770 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
17780 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
17790 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
177a0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
177b0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
177c0 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
177d0 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
177e0 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  p1);.    }..    
177f0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
17800 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
17810 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  db);.    rc = SQ
17820 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
17830 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
17840 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
17850 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
17860 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
17870 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
17880 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
17890 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
178a0 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
178b0 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
178c0 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
178d0 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
178e0 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
178f0 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
17900 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
17910 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
17920 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
17930 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
17940 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
17950 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
17960 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
17970 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
17980 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
17990 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
179a0 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
179b0 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
179c0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
179d0 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
179e0 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
179f0 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
17a00 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
17a10 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
17a20 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
17a30 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
17a40 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
17a50 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
17a60 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
17a70 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
17a80 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
17a90 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
17aa0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
17ab0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
17ac0 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
17ad0 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
17ae0 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
17af0 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
17b00 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
17b10 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
17b20 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
17b30 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
17b40 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
17b50 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
17b60 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
17b70 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
17b80 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
17b90 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
17ba0 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
17bb0 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
17bc0 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
17bd0 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
17be0 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
17bf0 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
17c00 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
17c10 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
17c20 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
17c30 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
17c40 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
17c50 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
17c60 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
17c70 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
17c80 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
17c90 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
17ca0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
17cb0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
17cc0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
17cd0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
17ce0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
17cf0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
17d00 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
17d10 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
17d20 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
17d30 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
17d40 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
17d50 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
17d60 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
17d70 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
17d80 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
17d90 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
17da0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
17db0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
17dc0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
17dd0 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  he table..**.** 
17de0 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69  See also OpenWri
17df0 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  te..*/./* Opcode
17e00 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
17e10 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17e20 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
17e30 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
17e40 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
17e50 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
17e60 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
17e70 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
17e80 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
17e90 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
17ea0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
17eb0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
17ec0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
17ed0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
17ee0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
17ef0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
17f00 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
17f10 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
17f20 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
17f30 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
17f40 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
17f50 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
17f60 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
17f70 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
17f80 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
17f90 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
17fa0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
17fb0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
17fc0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
17fd0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
17fe0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
17ff0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
18000 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
18010 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
18020 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
18030 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
18040 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
18050 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
18060 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
18070 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
18080 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
18090 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
180a0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
180b0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
180c0 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
180d0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
180e0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
180f0 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
18100 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
18110 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
18120 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
18130 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
18140 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
18150 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
18160 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
18170 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
18180 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
18190 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
181a0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
181b0 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
181c0 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
181d0 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
181e0 44 62 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78  Db;..  if( p->ex
181f0 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
18200 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
18210 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
18220 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
18230 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
18240 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
18250 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
18260 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
18270 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
18280 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
18290 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
182a0 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  iDb))!=0 );.  pD
182b0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
182c0 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
182d0 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
182e0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
182f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
18300 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
18310 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66  Flag = 1;.    if
18320 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
18330 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
18340 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
18350 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
18360 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
18370 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
18380 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
18390 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
183a0 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
183b0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
183c0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
183d0 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
183e0 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  rt( p2<=p->nMem 
183f0 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
18400 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c  Mem[p2];.    sql
18410 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
18420 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
18430 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
18440 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
18450 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
18460 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
18470 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
18480 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
18490 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
184a0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
184b0 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
184c0 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
184d0 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
184e0 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
184f0 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
18500 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
18510 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
18520 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
18530 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
18540 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
18550 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32    if( NEVER(p2<2
18560 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ) ) {.      rc =
18570 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
18580 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
18590 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
185a0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
185b0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
185c0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
185d0 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
185e0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
185f0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  .    pKeyInfo->e
18600 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
18610 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
18620 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31  eyInfo->nField+1
18630 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
18640 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
18650 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
18660 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
18670 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
18680 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75  ->p1>=0 );.  pCu
18690 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
186a0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
186b0 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
186c0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
186d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
186e0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
186f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
18700 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
18710 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
18720 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72  Info, pCur->pCur
18730 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
18740 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
18750 6f 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69  o;..  /* Since i
18760 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65  t performs no me
18770 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
18780 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20  or IO, the only 
18790 76 61 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a  values that.  **
187a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
187b0 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e  sor() may return
187c0 20 61 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54   are SQLITE_EMPT
187d0 59 20 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e  Y and SQLITE_OK.
187e0 20 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d   .  ** SQLITE_EM
187f0 50 54 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75  PTY is only retu
18800 72 6e 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70  rned when attemp
18810 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65  ting to open the
18820 20 74 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74   table.  ** root
18830 65 64 20 61 74 20 70 61 67 65 20 31 20 6f 66 20  ed at page 1 of 
18840 61 20 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61  a zero-byte data
18850 62 61 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65  base.  */.  asse
18860 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45  rt( rc==SQLITE_E
18870 4d 50 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  MPTY || rc==SQLI
18880 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72  TE_OK );.  if( r
18890 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
188a0 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75  ){.    pCur->pCu
188b0 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63  rsor = 0;.    rc
188c0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
188d0 7d 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  }..  /* Set the 
188e0 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
188f0 6c 65 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76  le and isIndex v
18900 61 72 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f  ariables. Previo
18910 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
18920 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
18930 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
18940 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
18950 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
18960 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
18970 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
18980 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
18990 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
189a0 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
189b0 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
189c0 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
189d0 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
189e0 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
189f0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
18a00 4b 45 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d  KEYINFO;.  pCur-
18a10 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72  >isIndex = !pCur
18a20 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65  ->isTable;.  bre
18a30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18a40 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
18a50 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
18a60 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
18a70 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61  rsor P1 to a tra
18a80 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a  nsient table..**
18a90 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   The cursor is a
18aa0 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61  lways opened rea
18ab0 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20  d/write even if 
18ac0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
18ad0 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e  abase is read-on
18ae0 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73 69 65  ly.  The transie
18af0 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a 2a  nt or virtual.**
18b00 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65   table is delete
18b10 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
18b20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
18b30 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
18b40 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
18b50 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
18b60 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
18b70 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
18b80 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
18b90 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
18ba0 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
18bb0 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
18bc0 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
18bd0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
18be0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
18bf0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
18c00 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
18c10 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
18c20 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
18c30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
18c40 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65  e was once calle
18c50 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74  d OpenTemp.  But
18c60 20 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a   that created.**
18c70 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75   confusion becau
18c80 73 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d  se the term "tem
18c90 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20  p table", might 
18ca0 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20  refer either.** 
18cb0 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20  to a TEMP table 
18cc0 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
18cd0 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20  , or to a table 
18ce0 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69  opened by.** thi
18cf0 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20  s opcode.  Then 
18d00 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  this opcode was 
18d10 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c  call OpenVirtual
18d20 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63  .  But.** that c
18d30 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e  reated confusion
18d40 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20   with the whole 
18d50 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64  virtual-table id
18d60 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ea..*/.case OP_O
18d70 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a  penEphemeral: {.
18d80 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
18d90 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  x;.  static cons
18da0 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20  t int openFlags 
18db0 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
18dc0 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
18dd0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18de0 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
18df0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
18e00 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
18e10 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
18e20 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
18e30 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
18e40 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61  ANSIENT_DB;..  a
18e50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
18e60 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
18e70 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
18e80 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
18e90 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
18ea0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
18eb0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
18ec0 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
18ed0 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74  sqlite3BtreeFact
18ee0 6f 72 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51  ory(db, 0, 1, SQ
18ef0 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d  LITE_DEFAULT_TEM
18f00 50 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70  P_CACHE_SIZE, op
18f10 65 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20  enFlags,.       
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a      &pCx->pBt);.
18f40 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18f50 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
18f60 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
18f70 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
18f80 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
18f90 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
18fa0 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
18fb0 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
18fc0 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
18fd0 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
18fe0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
18ff0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
19000 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45  ith the BTREE_ZE
19010 52 4f 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f  RODATA flag befo
19020 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
19030 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
19040 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
19050 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
19060 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
19070 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
19080 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
19090 74 2d 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54  t-page 1 (an INT
190a0 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
190b0 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
190c0 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20  p4.pKeyInfo ){. 
190d0 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
190e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
190f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
19100 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
19110 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
19120 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
19130 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
19140 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20  E_ZERODATA); .  
19150 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
19160 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
19170 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
19180 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
19190 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
191a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
191b0 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
191c0 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  1, .            
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f      (KeyInfo*)pO
191f0 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43  p->p4.z, pCx->pC
19200 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
19210 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
19220 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
19230 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
19240 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45  KeyInfo->enc = E
19250 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20  NC(p->db);.     
19260 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73   }.      pCx->is
19270 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Table = 0;.    }
19280 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
19290 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
192a0 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41  sor(pCx->pBt, MA
192b0 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c  STER_ROOT, 1, 0,
192c0 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
192d0 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
192e0 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  le = 1;.    }.  
192f0 7d 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78  }.  pCx->isIndex
19300 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65   = !pCx->isTable
19310 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19320 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
19330 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
19340 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
19350 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
19360 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
19370 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
19380 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
19390 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
193a0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
193b0 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68 65 20   one row in the 
193c0 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
193d0 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
193e0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
193f0 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
19400 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
19410 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
19420 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
19430 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
19440 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65   P2..**.** A pse
19450 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
19460 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
19470 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64   is used to hold
19480 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a   the a single.**
19490 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
194a0 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
194b0 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
194c0 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
194d0 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
194e0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
194f0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
19500 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
19510 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
19520 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
19530 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
19540 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
19550 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
19560 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
19570 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
19580 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
19590 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
195a0 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
195b0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
195c0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
195d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
195e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
195f0 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p1>=0 );.  pCx =
19600 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
19610 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
19620 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69  >p3, -1, 0);.  i
19630 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
19640 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
19650 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
19660 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  Cx->pseudoTableR
19670 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  eg = pOp->p2;.  
19680 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
19690 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78  ;.  pCx->isIndex
196a0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
196b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
196c0 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
196d0 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
196e0 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
196f0 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
19700 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
19710 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
19720 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
19730 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
19740 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
19750 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
19760 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
19770 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
19780 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
19790 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
197a0 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
197b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
197c0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
197d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
197e0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
197f0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
19800 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
19810 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
19820 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
19830 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
19840 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
19850 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
19860 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
19870 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
19880 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
19890 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
198a0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
198b0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
198c0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
198d0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
198e0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
198f0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
19900 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
19910 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
19920 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
19930 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
19940 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
19950 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
19960 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
19970 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
19980 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
19990 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
199a0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
199b0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
199c0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
199d0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
199e0 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
199f0 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  nct, SeekLt, See
19a00 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
19a10 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74  * Opcode: SeekGt
19a20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
19a30 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
19a40 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
19a50 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
19a60 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
19a70 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
19a80 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
19a90 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
19aa0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
19ab0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
19ac0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
19ad0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
19ae0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
19af0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
19b00 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
19b10 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
19b20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
19b30 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
19b40 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
19b50 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
19b60 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
19b70 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
19b80 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
19b90 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
19ba0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
19bb0 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
19bc0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
19bd0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
19be0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
19bf0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19c00 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
19c10 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
19c20 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
19c30 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
19c40 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
19c50 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72   * .**.** If cur
19c60 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
19c70 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
19c80 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
19c90 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
19ca0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
19cb0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
19cc0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
19cd0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
19ce0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
19cf0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
19d00 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
19d10 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
19d20 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
19d30 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
19d40 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
19d50 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
19d60 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
19d70 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
19d80 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
19d90 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
19da0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
19db0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
19dc0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
19dd0 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
19de0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
19df0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
19e00 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
19e10 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
19e20 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
19e30 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53  tinct, SeekGt, S
19e40 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
19e50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19e60 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Le P1 P2 P3 P4 *
19e70 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
19e80 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
19e90 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
19ea0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
19eb0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
19ec0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
19ed0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
19ee0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
19ef0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
19f00 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
19f10 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
19f20 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
19f30 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
19f40 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
19f50 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
19f60 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
19f70 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
19f80 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
19f90 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
19fa0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
19fb0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
19fc0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
19fd0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
19fe0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
19ff0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1a000 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1a010 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1a020 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1a030 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1a040 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a050 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1a060 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
1a070 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1a080 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
1a090 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLt:         /* 
1a0a0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1a0b0 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20  e OP_SeekLe:    
1a0c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1a0d0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1a0e0 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGe:         /* 
1a0f0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1a100 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20  e OP_SeekGt: {  
1a110 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1a120 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a  3 */.  int res;.
1a130 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65    int oc;.  Vdbe
1a140 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e  Cursor *pC;.  Un
1a150 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1a160 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1a170 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f  i64 iKey;      /
1a180 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1a190 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1a1a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1a1b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1a1c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1a1d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a1e0 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1a1f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1a200 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1a210 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1a220 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1a230 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1a240 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f  ( OP_SeekLe == O
1a250 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20  P_SeekLt+1 );.  
1a260 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1a270 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32  e == OP_SeekLt+2
1a280 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1a290 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65  _SeekGt == OP_Se
1a2a0 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 69 66 28 20  ekLt+3 );.  if( 
1a2b0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1a2c0 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
1a2d0 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
1a2e0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1a2f0 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1a300 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
1a310 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1a320 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1a330 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1a340 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1a350 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
1a360 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1a370 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1a380 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1a390 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
1a3a0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1a3b0 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1a3c0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1a3d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61  Op->p3];.      a
1a3e0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1a3f0 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
1a400 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1a410 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1a420 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
1a430 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1a440 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1a450 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1a460 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1a470 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1a480 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
1a490 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1a4a0 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1a4b0 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1a4c0 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1a4d0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1a4e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1a4f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1a500 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1a510 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1a520 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1a530 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1a540 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1a550 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1a560 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1a570 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
1a580 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1a590 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1a5a0 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1a5b0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1a5c0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1a5d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1a5e0 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
1a5f0 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
1a600 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
1a610 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1a620 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
1a630 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
1a640 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
1a650 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1a660 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
1a670 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
1a680 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
1a690 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
1a6a0 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1a6b0 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
1a6c0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
1a6d0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
1a6e0 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e  oo large in magn
1a6f0 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72  itude to be expr
1a700 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20  essed as an.    
1a710 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72        ** integer
1a720 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  . */.          r
1a730 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
1a740 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20    if( pIn3->r<0 
1a750 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
1a760 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1a770 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1a780 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1a790 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1a7b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
1a7c0 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  rst(pC->pCursor,
1a7d0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1a7e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1a7f0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1a800 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a810 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1a820 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1a830 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1a840 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc<=OP_SeekLe 
1a850 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1a860 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1a870 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1a880 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1a890 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1a8a0 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1a8b0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1a8c0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a8d0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1a8e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1a900 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a910 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1a920 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1a930 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1a940 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a950 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1a960 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1a970 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1a980 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1a990 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1a9a0 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1a9b0 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1a9c0 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1a9d0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1a9e0 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1a9f0 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1aa00 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1aa10 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1aa20 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1aa30 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1aa40 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1aa50 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1aa60 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1aa70 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1aa80 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1aa90 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1aaa0 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1aab0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1aac0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1aad0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1aae0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1aaf0 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1ab00 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1ab10 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ab20 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1ab30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ab40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1ab50 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1ab60 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1ab70 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1ab80 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1ab90 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1aba0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1abb0 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1abc0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1abd0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1abe0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1abf0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1ac00 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1ac10 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1ac20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1ac30 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1ac40 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1ac50 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1ac60 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
1ac70 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
1ac80 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
1ac90 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63       **   if( oc
1aca0 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
1acb0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
1acc0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66        **     r.f
1acd0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1ace0 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a  INCRKEY;.      *
1acf0 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20  *   }else{.     
1ad00 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1ad10 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 0;.      **   
1ad20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  }.      */.     
1ad30 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1ad40 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31  KED_INCRKEY * (1
1ad50 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1ad60 4c 74 29 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Lt));.      asse
1ad70 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1ad80 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e  t || r.flags==UN
1ad90 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29  PACKED_INCRKEY )
1ada0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1adb0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c  oc!=OP_SeekLe ||
1adc0 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b   r.flags==UNPACK
1add0 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20  ED_INCRKEY );.  
1ade0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1adf0 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66  OP_SeekGe || r.f
1ae00 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  lags==0 );.     
1ae10 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1ae20 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67  SeekLt || r.flag
1ae30 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 72  s==0 );..      r
1ae40 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1ae50 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 45 78  p->p3];.      Ex
1ae60 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29  pandBlob(r.aMem)
1ae70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1ae80 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1ae90 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1aea0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
1aeb0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1aec0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1aed0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1aee0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1aef0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1af00 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1af10 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1af20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1af30 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1af40 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1af50 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1af60 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1af70 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1af80 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1af90 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  .    if( oc>=OP_
1afa0 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72  SeekGe ){  asser
1afb0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  t( oc==OP_SeekGe
1afc0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1afd0 74 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  t );.      if( r
1afe0 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1aff0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  && oc==OP_SeekGt
1b000 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
1b010 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1b020 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
1b030 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1b040 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1b050 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1b060 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b070 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1b080 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
1b090 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
1b0a0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  es = 0;.      }.
1b0b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b0c0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1b0d0 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1b0e0 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20  _SeekLe );.     
1b0f0 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
1b100 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1b110 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20  SeekLt) ){.     
1b120 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b130 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
1b140 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1b150 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1b160 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1b170 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b180 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43  rror;.        pC
1b190 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b1a0 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
1b1b0 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20  .        /* res 
1b1c0 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
1b1d0 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
1b1e0 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
1b1f0 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20  heck to.        
1b200 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1b210 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1b220 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
1b230 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
1b240 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72  eEof(pC->pCursor
1b250 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1b260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1b270 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66  ->p2>0 );.    if
1b280 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
1b290 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1b2a0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1b2b0 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
1b2c0 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74  ens when attempt
1b2d0 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  ing to open the 
1b2e0 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74  sqlite3_master t
1b2f0 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20  able.    ** for 
1b300 72 65 61 64 20 61 63 63 65 73 73 20 72 65 74 75  read access retu
1b310 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
1b320 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 61  . In this case a
1b330 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b  lways.    ** tak
1b340 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63  e the jump (sinc
1b350 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  e there are no r
1b360 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61  ecords in the ta
1b370 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1b380 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1b390 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1b3a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1b3b0 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ek P1 P2 * * *.*
1b3c0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
1b3d0 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  en table cursor 
1b3e0 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69  and P2 is a rowi
1b3f0 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61  d integer.  Arra
1b400 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f  nge.** for P1 to
1b410 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74   move so that it
1b420 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72   points to the r
1b430 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32  owid given by P2
1b440 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
1b450 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72  actually a defer
1b460 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
1b470 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
1b480 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
1b490 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1b4a0 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
1b4b0 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
1b4c0 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
1b4d0 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
1b4e0 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
1b4f0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20  /.case OP_Seek: 
1b500 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20  {    /* in2 */. 
1b510 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1b520 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1b530 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1b540 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1b550 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1b560 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1b570 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1b580 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1b590 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
1b5a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1b5b0 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e  able );.    pC->
1b5c0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1b5d0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
1b5e0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e  p->p2];.    pC->
1b5f0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
1b600 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1b610 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43  ue(pIn2);.    pC
1b620 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b630 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1b640 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1b650 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20    }.  break;.}. 
1b660 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f   ../* Opcode: Fo
1b670 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1b680 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  *.**.** If P4==0
1b690 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1b6a0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1b6b0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1b6c0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1b6d0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1b6e0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1b6f0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1b700 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1b710 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1b720 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
1b730 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1b740 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1b750 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1b760 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1b770 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
1b780 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1b790 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1b7a0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
1b7b0 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
1b7c0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1b7d0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1b7e0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1b7f0 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
1b800 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  P4 *.**.** If P4
1b810 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1b820 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1b830 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1b840 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1b850 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1b860 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1b870 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1b880 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1b890 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1b8a0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1b8b0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1b8c0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1b8d0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1b8e0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1b8f0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
1b900 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
1b910 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
1b920 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
1b930 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
1b940 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
1b950 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
1b960 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
1b970 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
1b980 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
1b990 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1b9a0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1b9b0 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
1b9c0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1b9d0 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
1b9e0 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65   entry..**.** Se
1b9f0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1ba00 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71  otExists, IsUniq
1ba10 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1ba20 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
1ba30 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1ba40 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
1ba50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1ba60 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
1ba70 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62  adyExists;.  Vdb
1ba80 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1ba90 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
1baa0 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1bab0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1bac0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1bad0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1bae0 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1baf0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1bb00 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*3 + 7];..#if
1bb10 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1bb20 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f    sqlite3_found_
1bb30 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1bb40 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
1bb50 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1bb60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1bb70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1bb80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1bb90 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1bba0 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1bbb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1bbc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1bbd0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1bbe0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
1bbf0 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1bc00 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20  ursor!=0) ){..  
1bc10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1bc20 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
1bc30 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
1bc40 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  ){.      r.pKeyI
1bc50 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1bc60 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
1bc70 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1bc80 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70        r.aMem = p
1bc90 49 6e 33 3b 0a 20 20 20 20 20 20 72 2e 66 6c 61  In3;.      r.fla
1bca0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1bcb0 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1bcc0 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1bcd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1bce0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1bcf0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1bd00 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  );.      ExpandB
1bd10 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  lob(pIn3);.     
1bd20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1bd30 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1bd40 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1bd50 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1bd60 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  z,.             
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70             aTemp
1bd90 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1bda0 70 52 65 63 29 29 3b 0a 20 20 20 20 20 20 69 66  pRec));.      if
1bdb0 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a  ( pIdxKey==0 ){.
1bdc0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f          goto no_
1bdd0 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  mem;.      }.   
1bde0 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67     pIdxKey->flag
1bdf0 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  s |= UNPACKED_PR
1be00 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1be10 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
1be20 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1be30 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1be40 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1be50 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1be60 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b   pOp->p4.i==0 ){
1be70 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
1be80 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64  beDeleteUnpacked
1be90 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b  Record(pIdxKey);
1bea0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1beb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1bec0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1bed0 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78   }.    alreadyEx
1bee0 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1bef0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1bf00 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1bf10 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1bf20 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1bf30 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
1bf40 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1bf50 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  ){.    if( alrea
1bf60 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1bf70 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1bf80 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61  else{.    if( !a
1bf90 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1bfa0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1bfb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1bfc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e  ./* Opcode: IsUn
1bfd0 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34  ique P1 P2 P3 P4
1bfe0 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20   *.**.** Cursor 
1bff0 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e  P1 is open on an
1c000 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20   index b-tree - 
1c010 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20  that is to say, 
1c020 61 20 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a  a btree which.**
1c030 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65   no data and whe
1c040 72 65 20 74 68 65 20 6b 65 79 20 61 72 65 20 72  re the key are r
1c050 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64  ecords generated
1c060 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1c070 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69  d with.** the li
1c080 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74  st field being t
1c090 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
1c0a0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1c0b0 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  at the index.** 
1c0c0 65 6e 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e  entry refers to.
1c0d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
1c0e0 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1c0f0 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
1c100 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74  d number. Call t
1c110 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e  his record .** n
1c120 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74 65  umber R. Registe
1c130 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72 73  r P4 is the firs
1c140 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20  t in a set of N 
1c150 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73  contiguous regis
1c160 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b  ters.** that mak
1c170 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64  e up an unpacked
1c180 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20   index key that 
1c190 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74 68  can be used with
1c1a0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
1c1b0 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61  he value of N ca
1c1c0 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66 72  n be inferred fr
1c1d0 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e  om the cursor. N
1c1e0 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f   includes the ro
1c1f0 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70  wid.** value app
1c200 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  ended to the end
1c210 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72 65   of the index re
1c220 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64  cord. This rowid
1c230 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72   value may.** or
1c240 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20   may not be the 
1c250 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a  same as R..**.**
1c260 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e   If any of the N
1c270 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
1c280 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73 74  ning with regist
1c290 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  er P4 contains a
1c2a0 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20   NULL.** value, 
1c2b0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1c2c0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74   to P2..**.** Ot
1c2d0 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e  herwise, this in
1c2e0 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73  struction checks
1c2f0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f   if cursor P1 co
1c300 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a  ntains an entry.
1c310 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69 72  ** where the fir
1c320 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20  st (N-1) fields 
1c330 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72 6f  match but the ro
1c340 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68 65  wid value at the
1c350 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69   end.** of the i
1c360 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f  ndex entry is no
1c370 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69 73  t R. If there is
1c380 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20   no such entry, 
1c390 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a  control jumps.**
1c3a0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
1c3b0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74  P2. Otherwise, t
1c3c0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
1c3d0 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65  conflicting inde
1c3e0 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f  x.** entry is co
1c3f0 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65 72  pied to register
1c400 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20   P3 and control 
1c410 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1c420 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
1c430 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1c440 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1c450 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46  nd, NotExists, F
1c460 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ound.*/.case OP_
1c470 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20  IsUnique: {     
1c480 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1c490 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56  */.  u16 ii;.  V
1c4a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c4b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1c4c0 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  r;.  u16 nField;
1c4d0 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55  .  Mem *aMx;.  U
1c4e0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65    /* B-Tree inde
1c510 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a  x search key */.
1c520 20 20 69 36 34 20 52 3b 20 20 20 20 20 20 20 20    i64 R;        
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74       /* Rowid st
1c550 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1c560 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d   P3 */..  pIn3 =
1c570 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1c580 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70  .  aMx = &aMem[p
1c590 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20  Op->p4.i];.  /* 
1c5a0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1c5b0 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65  values of parame
1c5c0 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20 61  ters P1 and P4 a
1c5d0 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a  re in range. */.
1c5e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c5f0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1c600 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c610 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
1c620 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
1c630 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c640 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c650 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c660 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69  .  /* Find the i
1c670 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a  ndex cursor. */.
1c680 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1c690 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c6a0 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72  ert( pCx->deferr
1c6b0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1c6c0 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
1c6d0 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63   = 0;.  pCx->cac
1c6e0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1c6f0 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20  _STALE;.  pCrsr 
1c700 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
1c710 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20  .  /* If any of 
1c720 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e  the values are N
1c730 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ULL, take the ju
1c740 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  mp. */.  nField 
1c750 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  = pCx->pKeyInfo-
1c760 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69  >nField;.  for(i
1c770 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20  i=0; ii<nField; 
1c780 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61  ii++){.    if( a
1c790 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mx[ii].flags & M
1c7a0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
1c7b0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c7c0 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  1;.      pCrsr =
1c7d0 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
1c7e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1c7f0 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64  ert( (aMx[nField
1c800 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1c810 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  ll)==0 );..  if(
1c820 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
1c830 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65   /* Populate the
1c840 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1c850 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79  y. */.    r.pKey
1c860 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79  Info = pCx->pKey
1c870 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1c880 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b  ld = nField + 1;
1c890 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
1c8a0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
1c8b0 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65  EARCH;.    r.aMe
1c8c0 6d 20 3d 20 61 4d 78 3b 0a 0a 20 20 20 20 2f 2a  m = aMx;..    /*
1c8d0 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61 6c   Extract the val
1c8e0 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67  ue of R from reg
1c8f0 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20  ister P3. */.   
1c900 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1c910 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b  ntegerify(pIn3);
1c920 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75  .    R = pIn3->u
1c930 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72  .i;..    /* Sear
1c940 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e  ch the B-Tree in
1c950 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c  dex. If no confl
1c960 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73  icting record is
1c970 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20   found, jump.   
1c980 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72   ** to P2. Other
1c990 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72  wise, copy the r
1c9a0 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66  owid of the conf
1c9b0 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74  licting record t
1c9c0 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65  o.    ** registe
1c9d0 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68  r P3 and fall th
1c9e0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1c9f0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
1ca00 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
1ca10 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1ca20 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
1ca30 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65  , 0, 0, &pCx->se
1ca40 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69  ekResult);.    i
1ca50 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e  f( (r.flags & UN
1ca60 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
1ca70 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64  ARCH) || r.rowid
1ca80 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20  ==R ){.      pc 
1ca90 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1caa0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1cab0 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f  pIn3->u.i = r.ro
1cac0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  wid;.    }.  }. 
1cad0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1cae0 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
1caf0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1cb00 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65  ** Use the conte
1cb10 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1cb20 33 20 61 73 20 61 20 69 6e 74 65 67 65 72 20 6b  3 as a integer k
1cb30 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64  ey.  If a record
1cb40 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b   .** with that k
1cb50 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  ey does not exis
1cb60 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31  t in table of P1
1cb70 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1cb80 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  2. .** If the re
1cb90 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c  cord does exist,
1cba0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e   then fall thru.
1cbb0 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1cbc0 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e  left .** pointin
1cbd0 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  g to the record 
1cbe0 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1cbf0 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
1cc00 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  ce between this 
1cc10 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f  operation and No
1cc20 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74  tFound is that t
1cc30 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1cc40 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79   assumes the key
1cc50 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61   is an integer a
1cc60 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20  nd that P1 is a 
1cc70 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a  table whereas.**
1cc80 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65   NotFound assume
1cc90 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20  s key is a blob 
1cca0 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
1ccb0 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a   MakeRecord and.
1ccc0 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
1ccd0 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  x..**.** See als
1cce0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1ccf0 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a  nd, IsUnique.*/.
1cd00 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1cd10 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1cd20 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
1cd30 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1cd40 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1cd50 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1cd60 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
1cd70 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1cd80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
1cd90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1cda0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
1cdb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1cdc0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1cdd0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1cde0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1cdf0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ce00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1ce10 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1ce20 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1ce30 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1ce40 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1ce50 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
1ce60 30 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  0 ){.    res = 0
1ce70 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e  ;.    iKey = pIn
1ce80 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d  3->u.i;.    rc =
1ce90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1cea0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1ceb0 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1cec0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61  res);.    pC->la
1ced0 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1cee0 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  u.i;.    pC->row
1cef0 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d  idIsValid = res=
1cf00 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
1cf10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1cf20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1cf30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1cf40 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1cf50 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1cf60 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
1cf70 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1cf80 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  2 - 1;.      ass
1cf90 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1cfa0 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1cfb0 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  }.    pC->seekRe
1cfc0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65  sult = res;.  }e
1cfd0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1cfe0 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e   happens when an
1cff0 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   attempt to open
1d000 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f   a read cursor o
1d010 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71  n the .    ** sq
1d020 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
1d030 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
1d040 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20  _EMPTY..    */. 
1d050 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d060 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  - 1;.    assert(
1d070 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d080 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  d==0 );.    pC->
1d090 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1d0a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d0b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1d0c0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1d0d0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1d0e0 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1d0f0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1d100 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1d110 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1d120 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1d130 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1d140 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1d150 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1d160 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1d170 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1d180 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1d190 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1d1a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1d1b0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1d1c0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1d1d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1d1e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1d1f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1d200 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
1d210 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1d220 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d230 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
1d240 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1d250 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1d260 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1d270 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1d280 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1d290 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1d2a0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1d2b0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1d2c0 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1d2d0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1d2e0 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1d2f0 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1d300 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1d310 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1d320 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1d330 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1d340 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1d350 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1d360 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1d370 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1d380 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1d390 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1d3a0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1d3b0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1d3c0 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1d3d0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1d3e0 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1d3f0 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1d400 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1d410 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1d420 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1d430 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1d440 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1d450 2a 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20  * a SQLITE_FULL 
1d460 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1d470 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1d480 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1d490 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1d4a0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1d4b0 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1d4c0 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1d4d0 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1d4e0 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1d4f0 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1d500 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1d510 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1d520 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1d530 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1d560 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1d570 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1d580 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1d590 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1d5a0 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1d5b0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1d5c0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1d5d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1d5e0 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1d5f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d600 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1d610 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1d620 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1d630 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1d640 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1d650 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1d660 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1d670 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1d680 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1d690 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1d6a0 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1d6b0 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1d6c0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1d6d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d6e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d6f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d700 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1d710 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d720 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1d730 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1d740 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1d750 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1d760 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1d770 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1d780 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1d790 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1d7a0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1d7b0 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1d7c0 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1d7d0 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1d7e0 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1d7f0 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1d800 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1d810 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1d820 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1d830 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1d840 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1d850 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1d860 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1d870 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1d880 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1d890 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1d8a0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1d8b0 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1d8c0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1d8d0 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1d8e0 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1d8f0 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1d900 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1d910 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1d920 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1d930 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1d940 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1d950 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1d960 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1d970 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1d980 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1d990 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1d9a0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1d9b0 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1d9c0 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1d9d0 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1d9e0 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1d9f0 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1da00 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1da10 62 6c 65 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d  ble );.    cnt =
1da20 20 30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   0;..#ifdef SQLI
1da30 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
1da40 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1da50 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
1da60 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
1da70 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
1da80 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
1da90 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
1daa0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
1dab0 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
1dac0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1dad0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1dae0 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
1daf0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
1db00 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
1db10 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
1db20 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
1db30 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
1db40 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
1db50 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1db60 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
1db70 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
1db80 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
1db90 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
1dba0 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
1dbb0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1dbc0 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
1dbd0 65 47 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eGetCachedRowid(
1dbe0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1dbf0 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a      if( v==0 ){.
1dc00 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1dc10 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1dc20 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1dc30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1dc40 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1dc50 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1dc60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1dc70 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1dc80 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1dc90 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a           v = 1;.
1dca0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1dcb0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1dcc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dcd0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70  sorIsValid(pC->p
1dce0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
1dcf0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1dd00 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
1dd10 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
1dd20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1dd30 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1dd40 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66  );   /* Cannot f
1dd50 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74  ail following Bt
1dd60 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20  reeLast() */.   
1dd70 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41         if( v==MA
1dd80 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
1dd90 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
1dda0 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
1ddb0 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b              v++;
1ddd0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1dde0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1ddf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1de00 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1de10 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  T.      if( pOp-
1de20 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  >p3 ){.        /
1de30 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1de40 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1de50 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1de60 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1de70 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
1de80 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
1de90 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
1dea0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
1deb0 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
1dec0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
1ded0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
1dee0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1def0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1df00 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1df10 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1df20 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
1df30 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
1df40 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1df50 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
1df60 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
1df70 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1df80 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1df90 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1dfa0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1dfb0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1dfc0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
1dfd0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65  );.          pMe
1dfe0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
1dff0 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  3];.        }.. 
1e000 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
1e010 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1e020 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Mem);.        sq
1e030 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1e040 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
1e050 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1e060 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
1e070 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
1e080 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
1e090 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
1e0a0 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
1e0b0 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
1e0c0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1e0d0 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  id ){.          
1e0e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
1e0f0 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
1e100 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e110 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1e120 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1e130 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1e140 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1e150 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1e160 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1e170 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1e180 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1e190 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1e1a0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1e1b0 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1e1c0 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1e1d0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1e1e0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1e1f0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1e200 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
1e210 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
1e220 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
1e230 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
1e240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
1e260 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
1e270 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
1e280 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f    v = db->lastRo
1e290 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20 3d  wid;.      cnt =
1e2a0 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
1e2b0 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 30        if( cnt==0
1e2c0 20 26 26 20 28 76 26 30 78 66 66 66 66 66 66 29   && (v&0xffffff)
1e2d0 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==v ){.         
1e2e0 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65   v++;.        }e
1e2f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
1e300 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
1e310 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
1e320 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1e330 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78 66  cnt<5 ) v &= 0xf
1e340 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
1e350 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1e360 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1e370 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1e380 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
1e390 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1e3a0 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
1e3b0 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20  }while( cnt<100 
1e3c0 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
1e3d0 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   && res==0 );.  
1e3e0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1e3f0 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
1e400 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1e410 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20  SQLITE_FULL;.   
1e420 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1e430 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1e440 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1e450 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e460 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1e470 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1e480 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1e490 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1e4a0 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
1e4b0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
1e4c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e4d0 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
1e4e0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69   P4 P5.**.** Wri
1e4f0 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
1e500 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
1e510 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
1e520 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
1e530 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
1e540 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
1e550 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
1e560 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
1e570 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
1e580 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
1e590 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
1e5a0 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
1e5b0 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
1e5c0 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
1e5d0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1e5e0 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
1e5f0 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
1e600 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
1e610 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1e620 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
1e630 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1e640 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1e650 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1e660 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1e670 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
1e680 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
1e690 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
1e6a0 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
1e6b0 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
1e6c0 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
1e6d0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
1e6e0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
1e6f0 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
1e700 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
1e710 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
1e720 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
1e730 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
1e740 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
1e750 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
1e760 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
1e770 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
1e780 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
1e790 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
1e7a0 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
1e7b0 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
1e7c0 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
1e7d0 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
1e7e0 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
1e7f0 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
1e800 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
1e810 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
1e820 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
1e830 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
1e840 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
1e850 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
1e860 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
1e870 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
1e880 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
1e890 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
1e8a0 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
1e8b0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
1e8c0 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
1e8d0 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
1e8e0 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
1e8f0 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
1e900 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
1e910 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
1e920 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
1e930 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
1e940 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
1e950 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
1e960 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
1e970 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
1e980 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
1e990 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
1e9a0 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
1e9b0 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
1e9c0 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
1e9d0 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
1e9e0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
1e9f0 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
1ea00 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
1ea10 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
1ea20 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
1ea30 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
1ea40 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
1ea50 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
1ea60 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
1ea70 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
1ea80 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
1ea90 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
1eaa0 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
1eab0 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
1eac0 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
1ead0 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
1eae0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
1eaf0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
1eb00 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
1eb10 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
1eb20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
1eb30 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
1eb40 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
1eb50 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
1eb60 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
1eb70 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
1eb80 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
1eb90 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
1eba0 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
1ebb0 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
1ebc0 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
1ebd0 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
1ebe0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
1ebf0 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
1ec00 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
1ec10 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
1ec20 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
1ec30 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
1ec40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
1ec50 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
1ec60 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
1ec70 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
1ec80 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
1ec90 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
1eca0 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
1ecb0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
1ecc0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1ecd0 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
1ece0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
1ecf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
1ed00 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
1ed10 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
1ed20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
1ed30 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
1ed40 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
1ed50 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
1ed60 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
1ed70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
1ed80 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
1ed90 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
1eda0 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
1edb0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
1edc0 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
1edd0 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
1ede0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
1edf0 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
1ee00 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
1ee10 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
1ee20 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
1ee30 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
1ee40 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
1ee50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ee60 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
1ee70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
1ee80 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
1ee90 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
1eea0 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
1eeb0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
1eec0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
1eed0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
1eee0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
1eef0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
1ef00 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
1ef10 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
1ef20 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
1ef30 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
1ef40 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
1ef50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
1ef60 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
1ef70 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
1ef80 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
1ef90 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
1efa0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
1efb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1efc0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1efd0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1efe0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1eff0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f000 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1f010 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1f020 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1f030 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1f040 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1f050 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f060 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
1f070 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
1f080 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f  Data);..  if( pO
1f090 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
1f0a0 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79  sert ){.    pKey
1f0b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1f0c0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
1f0d0 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
1f0e0 5f 49 6e 74 20 29 3b 0a 20 20 20 20 52 45 47 49  _Int );.    REGI
1f0f0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1f100 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69  p3, pKey);.    i
1f110 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
1f120 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1f130 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1f140 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
1f150 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f  );.    iKey = pO
1f160 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
1f170 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1f180 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
1f190 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
1f1a0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1f1b0 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
1f1c0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
1f1d0 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
1f1e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
1f1f0 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
1f200 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
1f210 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
1f220 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
1f230 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
1f240 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
1f250 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73  );.  }.  seekRes
1f260 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
1f270 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
1f280 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
1f290 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
1f2a0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
1f2b0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
1f2c0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
1f2d0 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
1f2e0 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  lse{.    nZero =
1f2f0 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
1f300 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
1f310 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
1f320 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
1f330 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
1f340 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1f350 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f370 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
1f380 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f       pOp->p5 & O
1f3b0 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65  PFLAG_APPEND, se
1f3c0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
1f3d0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1f3e0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
1f3f0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1f400 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1f410 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1f420 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
1f430 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
1f440 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
1f450 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1f460 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
1f470 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
1f480 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62  >p4.z ){.    zDb
1f490 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
1f4a0 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a  Db].zName;.    z
1f4b0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1f4c0 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
1f4d0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
1f4e0 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
1f4f0 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
1f500 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
1f510 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f520 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
1f530 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1f540 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
1f550 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
1f560 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1f570 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
1f580 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f590 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
1f5a0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1f5b0 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
1f5c0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
1f5d0 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
1f5e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
1f5f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
1f600 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
1f610 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
1f620 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
1f630 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
1f640 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
1f650 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
1f660 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1f670 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
1f680 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
1f690 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
1f6a0 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
1f6b0 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
1f6c0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
1f6d0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
1f6e0 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
1f6f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1f700 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
1f710 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
1f720 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
1f730 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
1f740 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
1f750 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
1f760 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
1f770 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
1f780 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
1f790 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
1f7a0 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
1f7b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
1f7c0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
1f7d0 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
1f7e0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1f7f0 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
1f800 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
1f810 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
1f820 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
1f830 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
1f840 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
1f850 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
1f860 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
1f870 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
1f880 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
1f890 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
1f8a0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1f8b0 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
1f8c0 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  {.  i64 iKey;.  
1f8d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1f8e0 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61  .  iKey = 0;.  a
1f8f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f900 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f910 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1f920 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f930 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1f940 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1f950 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1f960 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
1f970 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
1f980 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
1f990 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  les */..  /* If 
1f9a0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1f9b0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
1f9c0 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65   set iKey to the
1f9d0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20   rowid of the.  
1f9e0 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c  ** row being del
1f9f0 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  eted..  */.  if(
1fa00 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
1fa10 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
1fa20 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  z ){.    assert(
1fa30 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1fa40 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1fa50 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20  rowidIsValid ); 
1fa60 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65   /* lastRowid se
1fa70 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50  t by previous OP
1fa80 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20  _NotFound */.   
1fa90 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74   iKey = pC->last
1faa0 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Rowid;.  }..  /*
1fab0 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f   The OP_Delete o
1fac0 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c  pcode always fol
1fad0 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78  lows an OP_NotEx
1fae0 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20  ists or OP_Last 
1faf0 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d  or.  ** OP_Colum
1fb00 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61  n on the same ta
1fb10 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20  ble without any 
1fb20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72  intervening oper
1fb30 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a  ations that.  **
1fb40 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69   might move or i
1fb50 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
1fb60 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72  rsor.  Hence cur
1fb70 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73  sor pC is always
1fb80 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74   pointing.  ** t
1fb90 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  o the row to be 
1fba0 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
1fbb0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1fbc0 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74  rMoveto() operat
1fbd0 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69  ion.  ** below i
1fbe0 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70  s always a no-op
1fbf0 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c   and cannot fail
1fc00 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69  .  We will run i
1fc10 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68  t anyhow, though
1fc20 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20  ,.  ** to guard 
1fc30 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63  against future c
1fc40 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f  hanges to the co
1fc50 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20  de generator..  
1fc60 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43  **/.  assert( pC
1fc70 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1fc80 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
1fc90 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1fca0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
1fcb0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
1fcc0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
1fcd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1fce0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1fcf0 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1fd00 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
1fd10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1fd20 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
1fd30 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
1fd40 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1fd50 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1fd60 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1fd70 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1fd80 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1fd90 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1fda0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1fdb0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1fdc0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1fdd0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1fde0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1fdf0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1fe00 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1fe10 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1fe20 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1fe30 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
1fe40 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
1fe50 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1fe60 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1fe70 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1fe80 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
1fe90 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1fea0 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
1feb0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
1fec0 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
1fed0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
1fee0 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
1fef0 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
1ff00 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
1ff10 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
1ff20 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
1ff30 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
1ff40 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
1ff50 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
1ff60 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
1ff70 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
1ff80 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
1ff90 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
1ffa0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
1ffb0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
1ffc0 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
1ffd0 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
1ffe0 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
1fff0 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
20000 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
20010 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20020 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
20030 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
20040 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
20050 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
20060 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
20070 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
20080 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
20090 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
200a0 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
200b0 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
200c0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
200d0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
200e0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
200f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
20100 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
20110 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
20120 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
20130 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
20140 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
20150 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
20160 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
20170 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
20180 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
20190 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
201a0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
201b0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
201c0 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72  w key for cursor
201d0 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
201e0 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
201f0 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
20200 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20   .** The key is 
20210 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
20220 50 33 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P3 register exac
20230 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
20240 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
20250 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
20260 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
20270 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
20280 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
20290 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
202a0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
202b0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
202c0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
202d0 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a  case OP_RowKey:.
202e0 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
202f0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
20300 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
20310 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
20320 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70  .  i64 n64;..  p
20330 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
20340 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  >p2];..  /* Note
20350 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
20360 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
20370 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
20380 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
20390 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
203a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
203b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
203c0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
203d0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
203e0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
203f0 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
20400 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20  ==OP_RowKey );. 
20410 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
20420 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
20430 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
20440 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
20450 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20460 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
20470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20480 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
20490 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
204a0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
204b0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
204c0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
204d0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
204e0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
204f0 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  r) );..  /* The 
20500 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
20510 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
20520 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
20530 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
20540 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
20550 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
20560 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
20570 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
20580 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
20590 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  * the cursor.  H
205a0 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ence the followi
205b0 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ng sqlite3VdbeCu
205c0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
205d0 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a  l is always.  **
205e0 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
205f0 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75   never fail.  Bu
20600 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e  t we leave it in
20610 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65   place as a safe
20620 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ty..  */.  asser
20630 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
20640 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
20650 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
20660 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
20670 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
20680 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
20690 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
206a0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d  rror;..  if( pC-
206b0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
206c0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
206d0 61 62 6c 65 20 29 3b 0a 20 20 20 20 72 63 20 3d  able );.    rc =
206e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
206f0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
20700 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
20710 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
20720 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
20730 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
20740 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
20750 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
20760 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
20770 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
20780 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
20790 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
207a0 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
207b0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
207c0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
207d0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b  Size(pCrsr, &n);
207e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
207f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
20800 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
20810 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
20820 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d    if( n>(u32)db-
20830 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
20840 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
20850 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
20860 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ig;.    }.  }.  
20870 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
20880 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20  emGrow(pOut, n, 
20890 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
208a0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
208b0 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
208c0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
208d0 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
208e0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
208f0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20900 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
20910 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
20920 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
20930 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
20940 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
20950 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
20960 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
20970 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
20980 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
20990 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
209a0 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
209b0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
209c0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
209d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
209e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
209f0 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
20a00 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
20a10 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
20a20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
20a30 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50   entry that.** P
20a40 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
20a50 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50  oint to..**.** P
20a60 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  1 can be either 
20a70 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
20a80 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74  e or a virtual t
20a90 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65  able.  There use
20aa0 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70  d to.** be a sep
20ab0 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20  arate OP_VRowid 
20ac0 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77  opcode for use w
20ad0 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ith virtual tabl
20ae0 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20  es, but this.** 
20af0 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77  one opcode now w
20b00 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61  orks for both ta
20b10 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61  ble types..*/.ca
20b20 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20  se OP_Rowid: {  
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20b40 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
20b50 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
20b60 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
20b70 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
20b80 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
20b90 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
20ba0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
20bb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20bc0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20bd0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
20be0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20bf0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20c00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20c10 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
20c20 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  ==0 );.  if( pC-
20c30 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
20c40 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
20c50 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
20c60 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
20c70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20c80 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
20c90 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
20ca0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20cb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20cc0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
20cd0 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20  pVtabCursor ){. 
20ce0 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70     pVtab = pC->p
20cf0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
20d00 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
20d10 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
20d20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
20d30 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
20d40 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
20d50 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
20d60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20d70 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20  _misuse;.    rc 
20d80 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
20d90 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
20da0 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
20db0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
20dc0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
20dd0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
20de0 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  b->zErrMsg;.    
20df0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
20e00 20 30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   0;.    if( sqli
20e10 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
20e20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
20e30 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64  _to_misuse;.#end
20e40 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
20e50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
20e60 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
20e70 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
20e80 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
20e90 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
20ea0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
20eb0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
20ec0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20ed0 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
20ee0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
20ef0 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
20f00 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
20f10 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
20f20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
20f30 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
20f40 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65   &v);.      asse
20f50 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
20f60 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
20f70 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
20f80 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f  rsorMoveto() abo
20f90 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a  ve */.    }.  }.
20fa0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
20fb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20fc0 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
20fd0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
20fe0 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
20ff0 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
21000 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
21010 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
21020 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
21030 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
21040 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
21050 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
21060 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
21070 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
21080 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
21090 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
210a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
210b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
210c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
210d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
210e0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
210f0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
21100 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
21110 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28  Valid = 0;.  if(
21120 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
21130 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
21140 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
21150 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
21160 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21170 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
21180 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
21190 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
211a0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
211b0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
211c0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
211d0 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
211e0 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
211f0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
21200 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
21210 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
21220 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
21230 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
21240 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
21250 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
21260 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
21270 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
21280 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
21290 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
212a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
212b0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
212c0 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
212d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
212e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
212f0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
21300 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
21310 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21320 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21330 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
21340 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21350 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21360 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
21370 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
21380 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29    if( pCrsr==0 )
21390 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20  {.    res = 1;. 
213a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
213b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
213c0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
213d0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
213e0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
213f0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21400 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77  o = 0;.  pC->row
21410 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
21420 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21430 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21440 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
21450 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  && res ){.    pc
21460 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
21470 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
21490 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
214a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
214b0 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
214c0 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
214d0 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
214e0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
214f0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
21500 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
21510 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
21520 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
21530 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
21540 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
21550 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
21560 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
21570 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
21580 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
21590 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
215a0 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
215b0 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
215c0 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
215d0 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
215e0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
215f0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
21600 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
21610 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
21620 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
21630 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
21640 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
21650 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
21660 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
21670 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
21680 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
21690 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
216a0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
216b0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
216c0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
216d0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
216e0 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
216f0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
21700 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
21710 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
21720 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31  TMTSTATUS_SORT-1
21730 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
21740 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
21750 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
21760 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
21770 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
21780 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
21790 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
217a0 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
217b0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
217c0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
217d0 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
217e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
217f0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
21800 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
21810 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
21820 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
21830 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21840 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
21850 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
21860 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
21870 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
21880 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
21890 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
218a0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
218b0 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
218c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
218d0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
218e0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
218f0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
21900 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
21910 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21920 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21930 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21940 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21950 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21960 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70 43   if( (pCrsr = pC
21970 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
21980 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21990 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
219a0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
219b0 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d  ->atFirst = res=
219c0 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d  =0 ?1:0;.    pC-
219d0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
219e0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
219f0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21a00 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
21a10 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21a20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
21a30 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  es = 1;.  }.  pC
21a40 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21a50 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
21a60 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
21a70 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
21a80 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
21a90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
21aa0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21ab0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
21ac0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21ad0 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
21ae0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
21af0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
21b00 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
21b10 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
21b20 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
21b30 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
21b40 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
21b50 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
21b60 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
21b70 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
21b80 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
21b90 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
21ba0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
21bb0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
21bc0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
21bd0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
21be0 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
21bf0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
21c00 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
21c10 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
21c20 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
21c30 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  rev P1 P2 * * *.
21c40 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
21c50 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
21c60 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
21c70 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
21c80 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
21c90 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
21ca0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
21cb0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
21cc0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
21cd0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
21ce0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
21cf0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
21d00 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
21d10 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
21d20 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
21d30 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21d40 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
21d50 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
21d60 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
21d70 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
21d80 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
21d90 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
21da0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
21db0 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20  P_Next: {       
21dc0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
21dd0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
21de0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
21df0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43  .  int res;..  C
21e00 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
21e10 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  PT;.  assert( pO
21e20 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21e30 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21e40 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21e50 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
21e60 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62  ( pC==0 ){.    b
21e70 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69  reak;  /* See ti
21e80 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20 20  cket #2273 */.  
21e90 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  }.  pCrsr = pC->
21ea0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
21eb0 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 70  Crsr==0 ){.    p
21ec0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
21ed0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
21ee0 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65   res = 1;.  asse
21ef0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
21f00 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
21f10 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  c = pOp->opcode=
21f20 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74  =OP_Next ? sqlit
21f30 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73  e3BtreeNext(pCrs
21f40 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20  r, &res) :.     
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f60 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
21f70 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
21f80 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
21f90 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21fa0 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
21fb0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21fc0 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
21fd0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
21fe0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
21ff0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
22000 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
22010 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
22020 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
22030 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
22040 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
22050 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
22060 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
22070 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22080 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
22090 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
220a0 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
220b0 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79   a SQL index key
220c0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
220d0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
220e0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
220f0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
22100 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
22110 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
22120 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
22130 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
22140 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
22150 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
22160 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
22170 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
22180 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
22190 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
221a0 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pend..**.** This
221b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
221c0 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
221d0 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
221e0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
221f0 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
22200 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
22210 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
22220 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
22230 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
22240 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
22250 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
22260 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
22270 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
22280 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22290 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
222a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
222b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
222c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
222d0 21 3d 30 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  !=0 );.  pIn2 = 
222e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
222f0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
22300 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
22310 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22320 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
22330 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30   ALWAYS(pCrsr!=0
22340 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
22350 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
22360 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
22370 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
22380 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22390 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 6e 4b 65  _OK ){.      nKe
223a0 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
223b0 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
223c0 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
223d0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
223e0 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
223f0 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
22400 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20  p->p3, .        
22410 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
22420 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
22430 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
22440 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
22450 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
22460 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22470 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
22480 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22490 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
224a0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
224b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
224c0 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
224d0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
224e0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
224f0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
22500 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
22510 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
22520 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
22530 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
22540 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
22550 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
22560 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
22570 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
22580 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
22590 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
225a0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
225b0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
225c0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
225d0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
225e0 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
225f0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
22600 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
22610 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  3<=p->nMem+1 );.
22620 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22630 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22640 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22650 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22660 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22670 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
22680 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
22690 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
226a0 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  Crsr!=0) ){.    
226b0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
226c0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
226d0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
226e0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c  Op->p3;.    r.fl
226f0 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61  ags = 0;.    r.a
22700 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
22710 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73  >p2];.    rc = s
22720 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
22730 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
22740 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
22750 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
22760 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
22770 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
22780 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
22790 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d  te(pCrsr);.    }
227a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
227b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
227c0 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61  =0 );.    pC->ca
227d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
227e0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62  E_STALE;.  }.  b
227f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22800 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
22810 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
22820 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
22830 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
22840 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
22850 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
22860 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
22870 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
22880 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
22890 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
228a0 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
228b0 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
228c0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
228d0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
228e0 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
228f0 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
22900 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
22910 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
22920 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
22930 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
22940 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
22950 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  se */.  BtCursor
22960 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43   *pCrsr;.  VdbeC
22970 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
22980 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72   rowid;..  asser
22990 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
229a0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
229b0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
229c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
229d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
229e0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
229f0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75  ->pCursor;.  pOu
22a00 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
22a10 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  ull;.  if( ALWAY
22a20 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
22a30 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
22a40 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22a50 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56  pC);.    if( NEV
22a60 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
22a70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22a80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
22a90 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22aa0 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
22ab0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
22ac0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43  0 );.    if( !pC
22ad0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
22ae0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
22af0 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
22b00 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
22b10 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
22b20 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
22b30 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
22b40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
22b50 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e    }.      pOut->
22b60 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
22b70 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
22b80 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
22b90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22ba0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
22bb0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
22bc0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
22bd0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
22be0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
22bf0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
22c00 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
22c10 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
22c20 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
22c30 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
22c40 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
22c50 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
22c60 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
22c70 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
22c80 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
22c90 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
22ca0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
22cb0 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
22cc0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
22cd0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
22ce0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
22cf0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
22d00 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22d10 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
22d20 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
22d30 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
22d40 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
22d50 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
22d60 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69   epsilon .** pri
22d70 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  or to the compar
22d80 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
22d90 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
22da0 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65   like IdxGT exce
22db0 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68  pt.** that if th
22dc0 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73  e key from regis
22dd0 74 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66  ter P3 is a pref
22de0 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e  ix of the key in
22df0 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20   the cursor,.** 
22e00 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
22e10 6c 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77  lse whereas it w
22e20 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74  ould be true wit
22e30 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f  h IdxGT..*/./* O
22e40 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
22e50 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
22e60 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
22e70 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
22e80 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
22e90 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
22ea0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
22eb0 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
22ec0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
22ed0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
22ee0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
22ef0 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
22f00 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
22f10 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
22f20 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
22f30 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
22f40 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
22f50 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
22f60 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
22f70 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
22f80 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
22f90 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
22fa0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
22fb0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
22fc0 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
22fd0 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
22fe0 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
22ff0 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f  lon prior .** to
23000 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
23010 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65    This makes the
23020 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
23030 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65  e IdxLE..*/.case
23040 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20   OP_IdxLT:      
23050 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
23060 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20  ase OP_IdxGE: { 
23070 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23080 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
23090 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
230a0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
230b0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
230c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
230d0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
230e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
230f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23100 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23110 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
23120 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20  pCursor!=0) ){. 
23130 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
23140 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
23150 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23160 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
23170 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
23180 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
23190 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
231a0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
231b0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
231c0 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
231d0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
231e0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
231f0 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  {.      r.flags 
23200 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  = UNPACKED_INCRK
23210 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47  EY | UNPACKED_IG
23220 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20  NORE_ROWID;.    
23230 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66  }else{.      r.f
23240 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
23250 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20  IGNORE_ROWID;.  
23260 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d    }.    r.aMem =
23270 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23280 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23290 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
232a0 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
232b0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
232c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
232d0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
232e0 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
232f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23300 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
23310 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
23320 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
23330 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
23340 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
23350 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
23360 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23370 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
23380 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
23390 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
233a0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
233b0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
233c0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
233d0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
233e0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
233f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
23400 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
23410 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
23420 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
23430 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
23440 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
23450 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
23460 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
23470 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
23480 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
23490 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
234a0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
234b0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
234c0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
234d0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
234e0 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
234f0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
23500 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
23510 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
23520 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
23530 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
23540 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
23550 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
23560 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
23570 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
23580 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
23590 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
235a0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
235b0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
235c0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
235d0 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
235e0 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
235f0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
23600 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
23610 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
23620 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
23630 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
23640 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
23650 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
23660 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
23670 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
23680 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
23690 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
236a0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
236b0 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
236c0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
236d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
236e0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
236f0 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
23700 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
23710 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
23720 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
23730 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
23740 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
23750 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
23760 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23770 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23780 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
23790 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
237a0 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
237b0 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
237c0 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
237d0 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
237e0 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
237f0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
23800 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
23810 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
23820 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
23830 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
23840 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
23850 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
23860 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
23870 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
23880 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
23890 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
238a0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
238b0 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
238c0 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
238d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
238e0 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
238f0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
23900 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
23910 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
23920 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
23930 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
23940 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
23950 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
23960 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
23970 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
23980 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
23990 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
239a0 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
239b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
239c0 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
239d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
239e0 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d  otPageMoved(&db-
239f0 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65  >aDb[iDb], iMove
23a00 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
23a10 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
23a20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23a30 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
23a40 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
23a50 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
23a60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
23a70 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
23a80 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
23a90 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
23aa0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
23ab0 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
23ac0 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
23ad0 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
23ae0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
23af0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
23b00 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
23b10 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
23b20 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
23b30 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
23b40 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
23b50 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
23b60 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
23b70 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
23b80 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
23b90 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
23ba0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
23bb0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
23bc0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
23bd0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
23be0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
23bf0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
23c00 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
23c10 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
23c20 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
23c30 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
23c40 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
23c50 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
23c60 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
23c70 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
23c80 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
23c90 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
23ca0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
23cb0 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
23cc0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
23cd0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
23ce0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
23cf0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
23d00 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
23d10 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
23d20 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
23d30 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
23d40 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
23d50 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
23d60 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
23d70 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
23d80 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
23d90 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
23da0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
23db0 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20  Op->p2))!=0 );. 
23dc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23dd0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
23de0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
23df0 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
23e00 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
23e10 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
23e20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
23e30 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
23e40 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
23e50 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
23e60 7b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70  {.      aMem[pOp
23e70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
23e80 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
23e90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23ea0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
23eb0 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
23ec0 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
23ed0 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
23ee0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
23ef0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
23f00 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
23f10 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
23f20 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
23f30 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
23f40 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
23f50 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
23f60 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
23f70 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
23f80 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
23f90 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
23fa0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
23fb0 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
23fc0 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
23fd0 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
23fe0 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
23ff0 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
24000 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
24010 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
24020 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
24030 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
24040 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
24050 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
24060 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
24070 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
24080 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
24090 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
240a0 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
240b0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
240c0 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
240d0 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
240e0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
240f0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
24100 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
24110 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
24120 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
24130 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
24140 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
24150 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
24160 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
24170 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
24180 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
24190 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
241a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
241b0 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
241c0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
241d0 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20  release */.case 
241e0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
241f0 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
24200 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
24210 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
24220 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
24230 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30  pDb;..  pgno = 0
24240 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24250 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24260 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
24270 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
24280 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
24290 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  p1))!=0 );.  pDb
242a0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
242b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
242c0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
242d0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
242e0 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
242f0 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
24300 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
24310 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
24320 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42  BTREE_LEAFDATA|B
24330 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
24340 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
24350 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  = BTREE_ZERODATA
24360 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
24370 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
24380 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
24390 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
243a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
243b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
243c0 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
243d0 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34 20  hema P1 P2 * P4 
243e0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
243f0 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
24400 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
24410 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
24420 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
24430 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
24440 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
24450 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66 6f  .  P2 is the "fo
24460 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c 77  rce" flag.   Alw
24470 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61  ays do.** the pa
24480 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20 74  rsing if P2 is t
24490 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20 66  rue.  If P2 is f
244a0 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20  alse, then this 
244b0 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20  routine is a.** 
244c0 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63 68  no-op if the sch
244d0 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72 65  ema is not curre
244e0 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e  ntly loaded.  In
244f0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
24500 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c   P2.** is false,
24510 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
24520 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79  ER table is only
24530 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20 72   parsed if the r
24540 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  est of the.** sc
24550 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20  hema is already 
24560 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65 20  loaded into the 
24570 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a  symbol table..**
24580 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
24590 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
245a0 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
245b0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
245c0 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
245d0 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
245e0 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
245f0 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
24600 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
24610 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
24620 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
24630 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
24640 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
24650 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
24660 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69 44 62  initData;..  iDb
24670 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
24680 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
24690 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a  iDb<db->nDb );..
246a0 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32 20    /* If pOp->p2 
246b0 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69 73 20  is 0, then this 
246c0 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67 20  opcode is being 
246d0 65 78 65 63 75 74 65 64 20 74 6f 20 72 65 61 64  executed to read
246e0 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 72   a.  ** single r
246f0 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20  ow, for example 
24700 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73 70 6f  the row correspo
24710 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77 20 69  nding to a new i
24720 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61 74 65  ndex.  ** create
24730 64 20 62 79 20 74 68 69 73 20 56 44 42 45 2c 20  d by this VDBE, 
24740 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
24750 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 49 74  master table. It
24760 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73 20   only.  ** does 
24770 74 68 69 73 20 69 66 20 74 68 65 20 63 6f 72 72  this if the corr
24780 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65 6d  esponding in-mem
24790 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20 63 75  ory schema is cu
247a0 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f 61  rrently.  ** loa
247b0 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ded. Otherwise, 
247c0 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20 64 65  the new index de
247d0 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65 20  finition can be 
247e0 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20 2a  loaded along.  *
247f0 2a 20 77 69 74 68 20 74 68 65 20 72 65 73 74 20  * with the rest 
24800 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  of the schema wh
24810 65 6e 20 69 74 20 69 73 20 72 65 71 75 69 72 65  en it is require
24820 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c 74  d..  **.  ** Alt
24830 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65 78 20  hough the mutex 
24840 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65 64 20  on the BtShared 
24850 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 72 72  object that corr
24860 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a 20  esponds to.  ** 
24870 64 61 74 61 62 61 73 65 20 69 44 62 20 28 74 68  database iDb (th
24880 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61  e database conta
24890 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  ining the sqlite
248a0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
248b0 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69 73 20  ** read by this 
248c0 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69 73 20  instruction) is 
248d0 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c 20  currently held, 
248e0 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  it is necessary 
248f0 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20 74  to.  ** obtain t
24900 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 61 6c  he mutexes on al
24910 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
24920 61 73 65 73 20 62 65 66 6f 72 65 20 63 68 65 63  ases before chec
24930 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68 65  king if.  ** the
24940 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62 20 69   schema of iDb i
24950 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73 20 69  s loaded. This i
24960 73 20 62 65 63 61 75 73 65 2c 20 61 74 20 74 68  s because, at th
24970 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a 20  e start of.  ** 
24980 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63  the sqlite3_exec
24990 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20 53  () call below, S
249a0 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f 6b  QLite will invok
249b0 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  e .  ** sqlite3B
249c0 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e 20  treeEnterAll(). 
249d0 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73 20 61  If all mutexes a
249e0 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 68  re not already h
249f0 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69 44  eld, the.  ** iD
24a00 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65 20 74  b mutex may be t
24a10 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c 65 61  emporarily relea
24a20 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64 65 61  sed to avoid dea
24a30 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a 20  dlock. If .  ** 
24a40 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20 74 68  this happens, th
24a50 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 68  en some other th
24a60 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74 65 20  read may delete 
24a70 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a 20  the in-memory . 
24a80 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20 64 61   ** schema of da
24a90 74 61 62 61 73 65 20 69 44 62 20 62 65 66 6f 72  tabase iDb befor
24aa0 65 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  e the SQL statem
24ab0 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20 73 63  ent runs. The sc
24ac0 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e  hema.  ** will n
24ad0 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64 20 62  ot be reloaded b
24ae0 65 63 75 61 73 65 20 74 68 65 20 64 62 2d 3e 69  ecuase the db->i
24af0 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20 69 73  nit.busy flag is
24b00 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a 20   set. This.  ** 
24b10 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20  can result in a 
24b20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
24b30 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 6f  sqlite_master" o
24b40 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20 2a  r "malformed.  *
24b50 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
24b60 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20 72  a" error being r
24b70 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
24b80 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ser..  */.  asse
24b90 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
24ba0 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
24bb0 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
24bc0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e    sqlite3BtreeEn
24bd0 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66  terAll(db);.  if
24be0 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62 48  ( pOp->p2 || DbH
24bf0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
24c00 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
24c10 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61 73  ded) ){.    zMas
24c20 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
24c30 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
24c40 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
24c50 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
24c60 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
24c70 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
24c80 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
24c90 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
24ca0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
24cb0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
24cc0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
24cd0 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
24ce0 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20 20 20  ERE %s",.       
24cf0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
24d00 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
24d10 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
24d20 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
24d30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
24d40 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
24d50 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69        (void)sqli
24d60 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
24d70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
24d80 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
24d90 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
24da0 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
24db0 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
24dc0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
24dd0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
24de0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
24df0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24e00 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
24e10 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
24e20 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
24e30 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
24e40 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
24e50 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
24e60 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
24e70 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
24e80 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
24e90 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 28  usy = 0;.      (
24ea0 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65  void)sqlite3Safe
24eb0 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d 0a  tyOn(db);.    }.
24ec0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72    }.  sqlite3Btr
24ed0 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a  eeLeaveAll(db);.
24ee0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
24ef0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f  _NOMEM ){.    go
24f00 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
24f10 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
24f20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24f30 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
24f40 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
24f50 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
24f60 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
24f70 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
24f80 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
24f90 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
24fa0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
24fb0 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
24fc0 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
24fd0 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
24fe0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
24ff0 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
25000 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
25010 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
25020 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
25030 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
25040 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
25050 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25060 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
25070 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
25080 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
25090 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
250a0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
250b0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
250c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
250d0 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
250e0 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
250f0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
25100 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
25110 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
25120 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
25130 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
25140 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
25150 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
25160 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
25170 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
25180 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
25190 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
251a0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
251b0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
251c0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
251d0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
251e0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
251f0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
25200 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
25210 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
25220 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
25230 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
25240 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25250 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
25260 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
25270 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
25280 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
25290 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
252a0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
252b0 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
252c0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
252d0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
252e0 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
252f0 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
25300 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
25310 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
25320 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
25330 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
25340 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
25350 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
25360 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
25370 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
25380 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
25390 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
253a0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
253b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
253c0 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
253d0 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
253e0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
253f0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
25400 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
25410 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
25420 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
25430 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
25440 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
25450 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
25460 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
25470 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
25480 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
25490 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
254a0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
254b0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
254c0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
254d0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
254e0 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
254f0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
25500 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
25510 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
25520 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
25530 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
25540 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
25550 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
25560 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
25570 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
25580 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
25590 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
255a0 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
255b0 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
255c0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
255d0 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
255e0 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
255f0 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
25600 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
25610 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
25620 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
25630 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
25640 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
25650 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
25660 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
25670 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
25680 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
25690 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
256a0 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
256b0 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
256c0 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
256d0 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
256e0 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
256f0 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
25700 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
25710 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
25720 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
25730 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
25740 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
25750 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
25760 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
25770 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
25780 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
25790 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
257a0 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
257b0 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
257c0 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
257d0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
257e0 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
257f0 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
25800 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
25810 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
25820 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
25830 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
25840 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
25850 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
25860 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
25870 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
25880 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
25890 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
258a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
258b0 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
258c0 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
258d0 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
258e0 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
258f0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
25900 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
25910 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
25920 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
25930 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
25940 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
25950 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
25960 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
25970 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
25980 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
25990 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
259a0 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
259b0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
259c0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
259d0 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
259e0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
259f0 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74  ng */.  .  nRoot
25a00 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
25a10 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
25a20 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
25a30 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
25a40 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
25a50 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
25a60 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
25a70 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
25a80 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
25a90 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
25aa0 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
25ab0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
25ac0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
25ad0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
25ae0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25af0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
25b00 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
25b10 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
25b20 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
25b30 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
25b40 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
25b50 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
25b60 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
25b70 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
25b80 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
25b90 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
25ba0 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
25bb0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
25bc0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
25bd0 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a  pOp->p5))!=0 );.
25be0 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72    z = sqlite3Btr
25bf0 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b  eeIntegrityCheck
25c00 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35  (db->aDb[pOp->p5
25c10 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52  ].pBt, aRoot, nR
25c20 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c40 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72        (int)pnErr
25c50 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20  ->u.i, &nErr);. 
25c60 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
25c70 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45  b, aRoot);.  pnE
25c80 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b  rr->u.i -= nErr;
25c90 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
25ca0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
25cb0 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b    if( nErr==0 ){
25cc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d  .    assert( z==
25cd0 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  0 );.  }else if(
25ce0 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74   z==0 ){.    got
25cf0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73  o no_mem;.  }els
25d00 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
25d10 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31  beMemSetStr(pIn1
25d20 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  , z, -1, SQLITE_
25d30 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72  UTF8, sqlite3_fr
25d40 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ee);.  }.  UPDAT
25d50 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
25d60 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
25d70 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
25d80 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  g(pIn1, encoding
25d90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
25da0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
25db0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
25dc0 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ECK */../* Opcod
25dd0 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20  e: RowSetAdd P1 
25de0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
25df0 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
25e00 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
25e10 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
25e20 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
25e30 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
25e40 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
25e50 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
25e60 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
25e70 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
25e80 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
25e90 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
25ea0 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
25eb0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
25ec0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
25ed0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
25ee0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
25ef0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
25f00 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
25f10 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
25f20 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
25f30 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
25f40 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
25f50 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
25f60 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
25f70 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
25f80 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
25f90 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
25fa0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
25fb0 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
25fc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
25fd0 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
25fe0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74  P3 * *.**.** Ext
25ff0 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
26000 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
26010 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
26020 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
26030 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
26040 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
26050 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
26060 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
26070 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
26080 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
26090 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
260a0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
260b0 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
260c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
260d0 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
260e0 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52  val;.  CHECK_FOR
260f0 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49  _INTERRUPT;.  pI
26100 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
26110 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
26120 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
26130 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
26140 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
26150 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
26160 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
26170 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
26180 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
26190 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
261a0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
261b0 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIn1);.    pc = 
261c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
261d0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
261e0 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
261f0 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
26200 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
26210 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
26220 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
26230 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
26240 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
26250 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
26260 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  3 P4.**.** Regis
26270 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
26280 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
26290 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
262a0 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
262b0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
262c0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
262d0 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
262e0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
262f0 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
26300 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
26310 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
26320 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
26330 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
26340 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
26350 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
26360 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
26370 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
26380 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
26390 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
263a0 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
263b0 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
263c0 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
263d0 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
263e0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
263f0 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
26400 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
26410 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
26420 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
26430 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
26440 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
26450 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
26460 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
26470 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
26480 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
26490 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
264a0 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
264b0 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
264c0 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
264d0 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
264e0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
264f0 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
26500 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
26510 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
26520 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
26530 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
26540 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
26550 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
26560 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
26570 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
26580 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
26590 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
265a0 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
265b0 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
265c0 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
265d0 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
265e0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
265f0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
26600 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
26610 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
26620 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
26630 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
26640 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
26650 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
26660 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
26670 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
26680 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
26690 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
266a0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
266b0 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266d0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
266e0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
266f0 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
26700 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
26710 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
26720 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
26730 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
26740 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
26750 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
26760 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
26770 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
26780 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
26790 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
267a0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
267b0 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
267c0 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
267d0 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
267e0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
267f0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
26800 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
26810 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
26820 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
26830 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
26840 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
26850 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
26860 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
26870 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
26880 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
26890 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
268a0 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
268b0 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
268c0 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
268d0 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
268e0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
268f0 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Set, .          
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26910 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d       (u8)(iSet>=
26920 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a  0 ? iSet & 0xf :
26930 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20   0xff),.        
26940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26950 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69         pIn3->u.i
26960 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
26970 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
26980 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
26990 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
269a0 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
269b0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
269c0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
269d0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
269e0 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
269f0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
26a00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
26a10 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
26a20 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
26a30 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45   P3 P4 *.**.** E
26a40 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
26a50 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
26a60 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
26a70 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
26a80 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
26a90 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
26aa0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
26ab0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
26ac0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
26ad0 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
26ae0 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
26af0 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
26b00 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
26b10 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
26b20 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
26b30 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
26b40 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
26b50 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
26b60 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
26b70 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
26b80 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
26b90 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
26ba0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
26bb0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
26bc0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
26bd0 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
26be0 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
26bf0 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
26c00 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
26c10 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
26c20 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
26c30 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
26c40 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
26c50 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
26c60 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  am..*/.case OP_P
26c70 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
26c80 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
26c90 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
26ca0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
26cb0 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
26cc0 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
26cd0 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
26ce0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
26cf0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
26d00 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
26d10 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
26d20 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
26d30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26d40 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
26d50 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
26d60 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
26d70 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
26d80 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
26d90 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
26da0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
26db0 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
26dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
26dd0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
26de0 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
26df0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
26e00 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
26e10 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
26e20 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
26e30 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
26e40 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
26e50 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
26e60 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
26e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
26e80 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
26e90 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
26ea0 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
26eb0 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
26ec0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
26ed0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
26ee0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
26ef0 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
26f00 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
26f10 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
26f20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
26f30 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
26f40 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
26f50 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
26f60 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
26f70 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
26f80 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
26f90 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
26fa0 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
26fb0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
26fc0 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
26fd0 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
26fe0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
26ff0 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
27000 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
27010 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
27020 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
27030 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
27040 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
27050 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
27060 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
27070 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
27080 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
27090 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
270a0 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
270b0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
270c0 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
270d0 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
270e0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
270f0 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
27100 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
27110 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
27120 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
27130 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
27140 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
27150 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
27160 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
27170 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
27180 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
27190 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
271a0 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
271b0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
271c0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
271d0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
271e0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
271f0 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
27200 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
27210 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
27220 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
27230 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
27240 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
27250 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
27260 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
27270 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
27280 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
27290 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
272a0 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
272b0 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
272c0 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62  cursion");.    b
272d0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
272e0 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
272f0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
27300 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
27310 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
27320 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
27330 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
27340 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
27350 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
27360 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
27370 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
27380 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
27390 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
273a0 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
273b0 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
273c0 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
273d0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
273e0 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
273f0 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
27400 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
27410 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
27420 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
27430 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
27440 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
27450 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
27460 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
27470 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
27480 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
27490 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
274a0 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
274b0 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
274c0 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
274d0 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
274e0 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
274f0 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
27500 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
27510 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
27520 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
27530 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
27540 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
27550 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
27560 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
27570 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
27580 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
27590 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
275a0 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
275b0 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
275c0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
275d0 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
275e0 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20  beCursor *);.   
275f0 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
27600 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
27610 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
27620 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
27630 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
27640 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
27650 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
27660 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
27670 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65  lags = MEM_Frame
27680 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72  ;.    pRt->u.pFr
27690 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20  ame = pFrame;.. 
276a0 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70     pFrame->v = p
276b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
276c0 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a  hildMem = nMem;.
276d0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
276e0 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d  ldCsr = pProgram
276f0 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61  ->nCsr;.    pFra
27700 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20  me->pc = pc;.   
27710 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
27720 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
27730 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
27740 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
27750 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
27760 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
27770 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
27780 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
27790 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
277a0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
277b0 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
277c0 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
277d0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20  ogram->token;.. 
277e0 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
277f0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
27800 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
27810 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
27820 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
27830 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
27840 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
27850 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
27860 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
27870 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
27880 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
27890 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
278a0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
278b0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
278c0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
278d0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
278e0 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
278f0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
27900 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
27910 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
27920 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d  ssert( pc==pFram
27930 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
27940 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
27950 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
27960 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
27970 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
27980 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
27990 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
279a0 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
279b0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
279c0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
279d0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
279e0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62  em = aMem = &Vdb
279f0 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
27a00 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  )[-1];.  p->nMem
27a10 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
27a20 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
27a30 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
27a40 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
27a50 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
27a60 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
27a70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
27a80 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
27a90 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
27aa0 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
27ab0 6e 4f 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a  nOp;.  pc = -1;.
27ac0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27ad0 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
27ae0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
27af0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
27b00 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
27b10 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
27b20 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
27b30 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
27b40 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
27b50 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
27b60 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
27b70 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
27b80 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
27b90 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
27ba0 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
27bb0 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
27bc0 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
27bd0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
27be0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
27bf0 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
27c00 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
27c10 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
27c20 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
27c30 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
27c40 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
27c50 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
27c60 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
27c70 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
27c80 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
27c90 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
27ca0 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
27cb0 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
27cc0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
27cd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
27ce0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
27cf0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
27d00 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
27d10 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
27d20 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  pIn;.  pFrame = 
27d30 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
27d40 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
27d50 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
27d60 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
27d70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
27d80 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
27d90 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
27da0 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
27db0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
27dc0 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
27dd0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
27de0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
27df0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
27e00 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
27e10 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
27e20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65   * *.**.** Incre
27e30 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
27e40 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
27e50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
27e60 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
27e70 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
27e80 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
27e90 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
27ea0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
27eb0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
27ec0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
27ed0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
27ee0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
27ef0 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
27f00 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
27f10 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
27f20 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
27f30 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
27f40 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
27f50 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
27f60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
27f70 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
27f80 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
27f90 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
27fa0 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
27fb0 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
27fc0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27fd0 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
27fe0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
27ff0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28000 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
28010 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
28020 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
28030 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
28040 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
28050 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
28060 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
28070 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
28080 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
28090 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
280a0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
280b0 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
280c0 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
280d0 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
280e0 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
280f0 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
28100 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
28110 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
28120 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
28130 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
28140 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
28150 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
28160 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
28170 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
28180 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
28190 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
281a0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
281b0 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
281c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
281d0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
281e0 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  1 ){.    if( db-
281f0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
28200 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
28210 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
28220 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
28230 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20  raint==0 ) pc = 
28240 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
28250 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
28260 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
28270 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
28280 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
28290 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
282a0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
282b0 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
282c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
282d0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
282e0 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
282f0 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
28300 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
28310 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
28320 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
28330 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
28340 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
28350 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
28360 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
28370 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
28380 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
28390 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
283a0 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
283b0 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
283c0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
283d0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
283e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
283f0 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
28400 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
28410 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
28420 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
28430 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
28440 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
28450 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  n2 */.  Mem *pIn
28460 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  1;.  VdbeFrame *
28470 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
28480 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
28490 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
284a0 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
284b0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
284c0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
284d0 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
284e0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
284f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
28500 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
28510 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  >p1];.  }.  sqli
28520 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
28530 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
28540 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
28550 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
28560 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
28570 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
28580 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
28590 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
285a0 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
285b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
285c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
285d0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
285e0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
285f0 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
28600 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
28610 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
28620 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
28630 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
28640 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
28650 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
28660 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
28670 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
28680 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
28690 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
286a0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
286b0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
286c0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
286d0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
286e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
286f0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
28700 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28710 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
28720 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
28730 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
28740 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
28750 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
28760 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28770 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
28780 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28790 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
287a0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
287b0 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a  ess than zero, j
287c0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
287d0 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
287e0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
287f0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
28800 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
28810 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
28820 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
28830 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
28840 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
28850 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
28860 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
28870 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
28880 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
28890 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
288a0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
288b0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
288c0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
288d0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
288e0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
288f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28900 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
28910 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
28920 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
28930 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
28940 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
28950 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
28960 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
28970 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
28980 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
28990 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
289a0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
289b0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
289c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
289d0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
289e0 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
289f0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
28a00 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
28a10 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
28a20 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
28a30 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
28a40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
28a50 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
28a60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28a70 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
28a80 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
28a90 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
28aa0 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70  pOp->p3;.  if( p
28ab0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
28ac0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
28ad0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
28ae0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28af0 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
28b00 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
28b10 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
28b20 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
28b30 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
28b40 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
28b50 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
28b60 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
28b70 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
28b80 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
28b90 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
28ba0 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
28bb0 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
28bc0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
28bd0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
28be0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
28bf0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
28c00 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
28c10 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
28c20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
28c30 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
28c40 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
28c50 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  em *pRec;.  sqli
28c60 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
28c70 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
28c80 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
28c90 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
28ca0 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
28cb0 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
28cc0 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
28cd0 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
28ce0 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
28cf0 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
28d00 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
28d10 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  {.    apVal[i] =
28d20 20 70 52 65 63 3b 0a 20 20 20 20 73 71 6c 69 74   pRec;.    sqlit
28d30 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
28d40 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  pe(pRec);.  }.  
28d50 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
28d60 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
28d70 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
28d80 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
28d90 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  em );.  ctx.pMem
28da0 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
28db0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
28dc0 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
28dd0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
28de0 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
28df0 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
28e00 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
28e10 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
28e20 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
28e30 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
28e40 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66  .pColl = 0;.  if
28e50 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61  ( ctx.pFunc->fla
28e60 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
28e70 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20  _NEEDCOLL ){.   
28e80 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e   assert( pOp>p->
28e90 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
28ea0 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
28eb0 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
28ec0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
28ed0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
28ee0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
28ef0 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
28f00 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
28f10 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
28f20 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
28f30 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 63 74 78  pVal);.  if( ctx
28f40 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
28f50 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
28f60 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
28f70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
28f80 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
28f90 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
28fa0 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  x.isError;.  }. 
28fb0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
28fc0 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
28fd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28fe0 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20  pcode: AggFinal 
28ff0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
29000 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66  ** Execute the f
29010 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
29020 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
29030 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68  te.  P1 is.** th
29040 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
29050 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
29060 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68  cumulator for th
29070 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a  e aggregate..**.
29080 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
29090 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
290a0 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66   that the step f
290b0 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e  unction takes an
290c0 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  d.** P4 is a poi
290d0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
290e0 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e  Def for this fun
290f0 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a  ction.  The P2.*
29100 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  * argument is no
29110 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f  t used by this o
29120 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e  pcode.  It is on
29130 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61  ly there to disa
29140 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63  mbiguate.** func
29150 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74  tions that can t
29160 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62  ake varying numb
29170 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ers of arguments
29180 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67  .  The.** P4 arg
29190 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65  ument is only ne
291a0 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67  eded for the deg
291b0 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65  enerate case whe
291c0 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
291d0 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
291e0 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
291f0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
29200 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
29210 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
29220 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
29230 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
29240 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
29250 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29260 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
29270 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
29280 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
29290 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
292a0 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
292b0 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
292c0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
292d0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
292e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
292f0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
29300 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
29310 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
29320 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
29330 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
29340 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
29350 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
29360 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
29370 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
29380 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
29390 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
293a0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21  break;.}...#if !
293b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
293c0 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
293d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
293e0 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
293f0 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
29400 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
29410 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
29420 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
29430 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
29440 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
29450 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
29460 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
29470 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
29480 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
29490 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
294a0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
294b0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66  P_Vacuum: {.  if
294c0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
294d0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
294e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
294f0 65 3b 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e; .  rc = sqlit
29500 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
29510 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
29520 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
29530 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
29540 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
29550 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  se;.  break;.}.#
29560 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
29570 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29580 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
29590 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
295a0 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
295b0 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
295c0 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
295d0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
295e0 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
295f0 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
29600 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
29610 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
29620 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
29630 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
29640 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
29650 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
29660 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
29670 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
29680 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
29690 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
296a0 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
296b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
296c0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
296d0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
296e0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
296f0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
29700 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
29710 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
29720 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
29730 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
29740 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
29750 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
29760 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
29770 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
29780 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
29790 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
297a0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
297b0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
297c0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
297d0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
297e0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
297f0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
29800 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
29810 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
29820 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
29830 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
29840 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
29850 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
29860 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
29870 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
29880 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
29890 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
298a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
298b0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
298c0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
298d0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
298e0 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
298f0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
29900 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
29910 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
29920 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
29930 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
29940 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
29950 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
29960 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
29970 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
29980 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
29990 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
299a0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
299b0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
299c0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
299d0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
299e0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
299f0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
29a00 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
29a10 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
29a20 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
29a30 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
29a40 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
29a50 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
29a60 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
29a70 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
29a80 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
29a90 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
29aa0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
29ab0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
29ac0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
29ad0 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
29ae0 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
29af0 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
29b00 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
29b10 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
29b20 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
29b30 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
29b40 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
29b50 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
29b60 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
29b70 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
29b80 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
29b90 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
29ba0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
29bb0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
29bc0 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
29bd0 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
29be0 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
29bf0 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
29c00 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
29c10 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
29c20 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
29c30 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
29c40 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
29c50 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
29c60 20 26 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29   & (1<<p1))!=0 )
29c70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
29c80 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
29c90 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
29ca0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
29cb0 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
29cc0 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
29cd0 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
29ce0 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
29cf0 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
29d00 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
29d10 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
29d20 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
29d30 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
29d40 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
29d50 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  , db, "database 
29d60 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
29d70 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a   %s", z);.    }.
29d80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
29d90 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
29da0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
29db0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
29dc0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29dd0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
29de0 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
29df0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
29e00 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
29e10 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
29e20 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
29e30 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
29e40 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
29e50 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
29e60 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
29e70 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
29e80 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
29e90 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
29ea0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
29eb0 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
29ec0 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
29ed0 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
29ee0 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
29ef0 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
29f00 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
29f10 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
29f20 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
29f30 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
29f40 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
29f50 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
29f60 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
29f70 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
29f80 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 7b  ;.  if( pVTab ){
29f90 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
29fa0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
29fb0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
29fc0 73 67 20 3d 20 70 56 54 61 62 2d 3e 70 56 74 61  sg = pVTab->pVta
29fd0 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  b->zErrMsg;.    
29fe0 70 56 54 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45  pVTab->pVtab->zE
29ff0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rrMsg = 0;.  }. 
2a000 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2a010 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2a020 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2a030 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a040 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a050 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72  E./* Opcode: VCr
2a060 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  eate P1 * * P4 *
2a070 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
2a080 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
2a090 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
2a0a0 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68  base P1. Call th
2a0b0 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
2a0c0 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62  .** for that tab
2a0d0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
2a0e0 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d  Create: {.  rc =
2a0f0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2a100 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
2a110 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26  p1, pOp->p4.z, &
2a120 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62  p->zErrMsg);.  b
2a130 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2a140 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2a150 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2a160 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a170 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2a180 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
2a190 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
2a1a0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2a1b0 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2a1c0 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2a1d0 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
2a1e0 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
2a1f0 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
2a200 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
2a210 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e  Destroy: {.  p->
2a220 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32  inVtabMethod = 2
2a230 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2a240 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
2a250 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2a260 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e  ->p4.z);.  p->in
2a270 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2a280 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2a290 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2a2a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2a2b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2a2c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2a2d0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f  LE./* Opcode: VO
2a2e0 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  pen P1 * * P4 *.
2a2f0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2a300 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2a310 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2a320 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2a330 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50   structure..** P
2a340 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75  1 is a cursor nu
2a350 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f  mber.  This opco
2a360 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f  de opens a curso
2a370 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  r to the virtual
2a380 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74  .** table and st
2a390 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72  ores that cursor
2a3a0 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20   in P1..*/.case 
2a3b0 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  OP_VOpen: {.  Vd
2a3c0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
2a3d0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
2a3e0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
2a3f0 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  or;.  sqlite3_vt
2a400 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
2a410 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2a420 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20  dule;..  pCur = 
2a430 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
2a440 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
2a450 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2a460 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2a470 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2a480 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2a490 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74  le;.  assert(pVt
2a4a0 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a  ab && pModule);.
2a4b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2a4c0 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
2a4d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2a4e0 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d  isuse;.  rc = pM
2a4f0 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
2a500 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72  ab, &pVtabCursor
2a510 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
2a520 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2a530 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
2a540 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
2a550 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
2a560 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73  Msg = 0;.  if( s
2a570 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
2a580 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2a590 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
2a5a0 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
2a5b0 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69  rc ){.    /* Ini
2a5c0 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f  tialize sqlite3_
2a5d0 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65  vtab_cursor base
2a5e0 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56   class */.    pV
2a5f0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2a600 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f   = pVtab;..    /
2a610 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76 64 62  * Initialise vdb
2a620 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
2a630 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c  */.    pCur = al
2a640 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
2a650 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
2a660 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72  0);.    if( pCur
2a670 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e   ){.      pCur->
2a680 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56  pVtabCursor = pV
2a690 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20  tabCursor;.     
2a6a0 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d   pCur->pModule =
2a6b0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2a6c0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2a6d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2a6e0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2a6f0 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  = 1;.      pModu
2a700 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
2a710 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2a720 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2a730 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2a740 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a750 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2a760 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a770 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2a780 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
2a790 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20  3 P4 *.**.** P1 
2a7a0 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
2a7b0 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
2a7c0 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
2a7d0 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
2a7e0 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
2a7f0 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
2a800 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
2a810 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
2a820 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
2a830 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
2a840 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
2a850 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
2a860 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
2a870 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
2a880 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
2a890 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
2a8a0 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
2a8b0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
2a8c0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2a8d0 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
2a8e0 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
2a8f0 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
2a900 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
2a910 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
2a920 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
2a930 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
2a940 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
2a950 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
2a960 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
2a970 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
2a980 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
2a990 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
2a9a0 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
2a9b0 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
2a9c0 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
2a9d0 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
2a9e0 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
2a9f0 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
2aa00 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
2aa10 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
2aa20 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
2aa30 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
2aa40 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
2aa50 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
2aa60 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
2aa70 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
2aa80 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
2aa90 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
2aaa0 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
2aab0 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
2aac0 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
2aad0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2aae0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2aaf0 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
2ab00 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
2ab10 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2ab20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
2ab30 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2ab40 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
2ab50 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
2ab60 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
2ab70 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
2ab80 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
2ab90 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
2aba0 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
2abb0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
2abc0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45 47 49  pOp->p1];.  REGI
2abd0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2abe0 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
2abf0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2ac00 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
2ac10 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
2ac20 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
2ac30 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
2ac40 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2ac50 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2ac60 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
2ac70 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
2ac80 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
2ac90 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
2aca0 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
2acb0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
2acc0 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
2acd0 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
2ace0 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
2acf0 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
2ad00 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
2ad10 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
2ad20 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2ad30 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  hod */.  {.    r
2ad40 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72  es = 0;.    apAr
2ad50 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
2ad60 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
2ad70 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
2ad80 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
2ad90 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73  gc[i+1];.      s
2ada0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2adb0 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d 29  reType(apArg[i])
2adc0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
2add0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
2ade0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
2adf0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2ae00 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
2ae10 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72  ethod = 1;.    r
2ae20 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
2ae30 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72  lter(pVtabCursor
2ae40 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
2ae50 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
2ae60 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  );.    p->inVtab
2ae70 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20  Method = 0;.    
2ae80 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2ae90 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2aea0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
2aeb0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2aec0 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
2aed0 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
2aee0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2aef0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
2af00 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
2af10 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2af20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
2af30 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
2af40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2af50 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20  isuse;..    if( 
2af60 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
2af70 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2af80 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
2af90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
2afa0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2afb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2afc0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2afd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2afe0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2aff0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
2b000 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
2b010 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
2b020 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2b030 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
2b040 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
2b050 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
2b060 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
2b070 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
2b080 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
2b090 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
2b0a0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
2b0b0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2b0c0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2b0d0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2b0e0 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
2b0f0 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
2b100 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
2b110 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2b120 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2b130 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2b140 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2b150 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
2b160 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2b170 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
2b180 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
2b190 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
2b1a0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
2b1b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2b1c0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
2b1d0 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
2b1e0 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
2b1f0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
2b200 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2b210 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2b220 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
2b230 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
2b240 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
2b250 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
2b260 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f  sContext));..  /
2b270 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
2b280 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
2b290 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
2b2a0 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
2b2b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
2b2c0 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78  tents to sContex
2b2d0 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  t.s so in case t
2b2e0 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
2b2f0 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74   .  ** can use t
2b300 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
2b310 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
2b320 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
2b330 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e  g a .  ** new on
2b340 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
2b350 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43  3VdbeMemMove(&sC
2b360 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29  ontext.s, pDest)
2b370 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
2b380 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ag(&sContext.s, 
2b390 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66  MEM_Null);..  if
2b3a0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2b3b0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
2b3c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2b3d0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
2b3e0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
2b3f0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
2b400 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
2b410 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
2b420 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2b430 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
2b440 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
2b450 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
2b460 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73  Msg = 0;.  if( s
2b470 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
2b480 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
2b490 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
2b4a0 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
2b4b0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
2b4c0 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50  unction to the P
2b4d0 33 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20  3 register. We. 
2b4e0 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61   ** do this rega
2b4f0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
2b500 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f  r or not an erro
2b510 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e  r occurred to en
2b520 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79  sure any.  ** dy
2b530 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e  namic allocation
2b540 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28   in sContext.s (
2b550 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73  a Mem struct) is
2b560 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f    released..  */
2b570 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2b580 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43  angeEncoding(&sC
2b590 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69  ontext.s, encodi
2b5a0 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ng);.  REGISTER_
2b5b0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
2b5c0 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74 65 33  Dest);.  sqlite3
2b5d0 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73  VdbeMemMove(pDes
2b5e0 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b  t, &sContext.s);
2b5f0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2b600 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a  OBSIZE(pDest);..
2b610 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2b620 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
2b630 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b640 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20  to_misuse;.  }. 
2b650 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2b660 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
2b670 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2b680 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2b690 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2b6a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2b6b0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2b6c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b6d0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2b6e0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
2b6f0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2b700 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
2b710 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
2b720 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
2b730 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
2b740 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
2b750 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
2b760 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
2b770 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
2b780 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
2b790 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
2b7a0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
2b7b0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2b7c0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2b7d0 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
2b7e0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
2b7f0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2b800 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2b810 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2b820 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
2b830 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2b840 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
2b850 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2b860 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b870 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2b880 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
2b890 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2b8a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2b8b0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2b8c0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2b8d0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2b8e0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2b8f0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2b900 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
2b910 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
2b920 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
2b930 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
2b940 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
2b950 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
2b960 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2b970 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
2b980 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
2b990 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
2b9a0 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
2b9b0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
2b9c0 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
2b9d0 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
2b9e0 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
2b9f0 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
2ba00 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
2ba10 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
2ba20 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
2ba30 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
2ba40 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
2ba50 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
2ba60 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
2ba70 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  r..  */.  if( sq
2ba80 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
2ba90 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2baa0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
2bab0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2bac0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f   = 1;.  rc = pMo
2bad0 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
2bae0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
2baf0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2bb00 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  d = 0;.  sqlite3
2bb10 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
2bb20 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
2bb30 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
2bb40 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e  rrMsg;.  pVtab->
2bb50 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69  zErrMsg = 0;.  i
2bb60 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2bb70 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
2bb80 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
2bb90 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
2bba0 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
2bbb0 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
2bbc0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2bbd0 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66 28  o_misuse;..  if(
2bbe0 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
2bbf0 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
2bc00 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
2bc10 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2bc20 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2bc30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2bc40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bc50 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2bc60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bc70 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2bc80 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20  Opcode: VRename 
2bc90 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2bca0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2bcb0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2bcc0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2bcd0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2bce0 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
2bcf0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2bd00 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2bd10 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
2bd20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   The value.** in
2bd30 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2bd40 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e  passed as the zN
2bd50 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ame argument to 
2bd60 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  the xRename meth
2bd70 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  od..*/.case OP_V
2bd80 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69  Rename: {.  sqli
2bd90 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2bda0 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a  .  Mem *pName;..
2bdb0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2bdc0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2bdd0 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b    pName = &aMem[
2bde0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2bdf0 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  rt( pVtab->pModu
2be00 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20  le->xRename );. 
2be10 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2be20 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
2be30 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
2be40 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2be50 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  r );.  if( sqlit
2be60 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
2be70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2be80 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63  _to_misuse;.  rc
2be90 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2bea0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
2beb0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73  , pName->z);.  s
2bec0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2bed0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2bee0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
2bef0 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
2bf00 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
2bf10 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
2bf20 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
2bf30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2bf40 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61  _misuse;..  brea
2bf50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2bf60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bf70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2bf80 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65   Opcode: VUpdate
2bf90 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2bfa0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2bfb0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2bfc0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2bfd0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2bfe0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2bff0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2c000 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2c010 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
2c020 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
2c030 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
2c040 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
2c050 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
2c060 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
2c070 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
2c080 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
2c090 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
2c0a0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
2c0b0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
2c0c0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
2c0d0 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
2c0e0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
2c0f0 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
2c100 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
2c110 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
2c120 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
2c130 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
2c140 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
2c150 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
2c160 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
2c170 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
2c180 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
2c190 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
2c1a0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
2c1b0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
2c1c0 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
2c1d0 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
2c1e0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
2c1f0 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
2c200 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
2c210 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2c220 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
2c230 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
2c240 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
2c250 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
2c260 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
2c270 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
2c280 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
2c290 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
2c2a0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
2c2b0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
2c2c0 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
2c2d0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
2c2e0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
2c2f0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
2c300 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
2c310 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
2c320 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
2c330 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
2c340 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
2c350 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
2c360 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
2c370 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
2c380 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
2c390 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2c3a0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
2c3b0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
2c3c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
2c3d0 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
2c3e0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2c3f0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2c400 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
2c410 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Arg;.  int i;.  
2c420 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
2c430 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72  id;.  Mem **apAr
2c440 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20  g;.  Mem *pX;.. 
2c450 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
2c460 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
2c470 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
2c480 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
2c490 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
2c4a0 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
2c4b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2c4c0 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
2c4d0 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
2c4e0 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
2c4f0 29 7b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  ){.    apArg = p
2c500 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20  ->apArg;.    pX 
2c510 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2c520 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
2c530 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2c540 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c550 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b 0a  mStoreType(pX);.
2c560 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
2c570 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b   pX;.      pX++;
2c580 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
2c590 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
2c5a0 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
2c5b0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
2c5c0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
2c5d0 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
2c5e0 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
2c5f0 6f 77 69 64 29 3b 0a 20 20 20 20 73 71 6c 69 74  owid);.    sqlit
2c600 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
2c610 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
2c620 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2c630 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
2c640 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
2c650 30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  0;.    if( sqlit
2c660 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
2c670 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c680 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 69  to_misuse;.    i
2c690 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2c6a0 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20   && pOp->p1 ){. 
2c6b0 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
2c6c0 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
2c6d0 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
2c6e0 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
2c6f0 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
2c700 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
2c710 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e    }.    p->nChan
2c720 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ge++;.  }.  brea
2c730 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2c740 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c750 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2c760 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
2c770 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
2c780 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
2c790 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
2c7a0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
2c7b0 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
2c7c0 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
2c7d0 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
2c7e0 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
2c7f0 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
2c800 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
2c810 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2c820 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  */.  int p1;.  i
2c830 6e 74 20 6e 50 61 67 65 3b 0a 20 20 50 61 67 65  nt nPage;.  Page
2c840 72 20 2a 70 50 61 67 65 72 3b 0a 0a 20 20 70 31  r *pPager;..  p1
2c850 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 70   = pOp->p1; .  p
2c860 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
2c870 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
2c880 62 5b 70 31 5d 2e 70 42 74 29 3b 0a 20 20 72 63  b[p1].pBt);.  rc
2c890 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 50   = sqlite3PagerP
2c8a0 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72 2c  agecount(pPager,
2c8b0 20 26 6e 50 61 67 65 29 3b 0a 20 20 2f 2a 20 4f   &nPage);.  /* O
2c8c0 50 5f 50 61 67 65 63 6f 75 6e 74 20 69 73 20 61  P_Pagecount is a
2c8d0 6c 77 61 79 73 20 63 61 6c 6c 65 64 20 66 72 6f  lways called fro
2c8e0 6d 20 77 69 74 68 69 6e 20 61 20 72 65 61 64 20  m within a read 
2c8f0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
2c900 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 6f 75 6e  e.  ** page coun
2c910 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
2c920 65 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  en successfully 
2c930 72 65 61 64 20 61 6e 64 20 63 61 63 68 65 64 2e  read and cached.
2c940 20 20 53 6f 20 74 68 65 0a 20 20 2a 2a 20 73 71    So the.  ** sq
2c950 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f  lite3PagerPageco
2c960 75 6e 74 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  unt() call above
2c970 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 2a 2f   cannot fail. */
2c980 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 72 63  .  if( ALWAYS(rc
2c990 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  ==SQLITE_OK) ){.
2c9a0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2c9b0 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62 72 65  nPage;.  }.  bre
2c9c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2c9d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c9e0 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64  T_TRACE./* Opcod
2c9f0 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50  e: Trace * * * P
2ca00 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61  4 *.**.** If tra
2ca10 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20  cing is enabled 
2ca20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f  (by the sqlite3_
2ca30 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61  trace()) interfa
2ca40 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ce, then.** the 
2ca50 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e  UTF-8 string con
2ca60 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20  tained in P4 is 
2ca70 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74  emitted on the t
2ca80 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  race callback..*
2ca90 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a  /.case OP_Trace:
2caa0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63   {.  char *zTrac
2cab0 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20 28  e;..  zTrace = (
2cac0 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
2cad0 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
2cae0 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29  ;.  if( zTrace )
2caf0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54  {.    if( db->xT
2cb00 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64 62  race ){.      db
2cb10 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
2cb20 61 63 65 41 72 67 2c 20 7a 54 72 61 63 65 29 3b  aceArg, zTrace);
2cb30 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
2cb40 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
2cb50 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
2cb60 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
2cb70 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
2cb80 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
2cb90 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
2cba0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  ", zTrace);.    
2cbb0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2cbc0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a  TE_DEBUG */.  }.
2cbd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2cbe0 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  f.../* Opcode: N
2cbf0 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
2cc00 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
2cc10 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2cc20 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
2cc30 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
2cc40 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
2cc50 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
2cc60 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
2cc70 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
2cc80 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
2cc90 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
2cca0 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
2ccb0 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
2ccc0 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
2ccd0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2cce0 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
2ccf0 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
2cd00 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
2cd10 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
2cd20 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
2cd30 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
2cd40 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
2cd50 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
2cd60 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
2cd70 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
2cd80 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
2cd90 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
2cda0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a   break;.}../****
2cdb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cdd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cde0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cdf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
2ce00 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77   cases of the sw
2ce10 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61  itch statement a
2ce20 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73  bove this line s
2ce30 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64  hould all be ind
2ce40 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70  ented.** by 6 sp
2ce50 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c  aces.  But the l
2ce60 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65  eft-most 6 space
2ce70 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f  s have been remo
2ce80 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74  ved to improve t
2ce90 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74  he.** readabilit
2cea0 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f  y.  From this po
2ceb0 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65  int on down, the
2cec0 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
2ced0 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a  ion rules are.**
2cee0 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a   restored..*****
2cef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2cf30 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a  ********/.    }.
2cf40 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2cf50 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20  FILE.    {.     
2cf60 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73   u64 elapsed = s
2cf70 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d  qlite3Hwtime() -
2cf80 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
2cf90 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61  p->cycles += ela
2cfa0 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d  psed;.      pOp-
2cfb0 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20  >cnt++;.#if 0.  
2cfc0 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
2cfd0 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c  dout, "%10llu ",
2cfe0 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20   elapsed);.     
2cff0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
2d000 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72  intOp(stdout, or
2d010 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50  igPc, &aOp[origP
2d020 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  c]);.#endif.    
2d030 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
2d040 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
2d050 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
2d060 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
2d070 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
2d080 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
2d090 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
2d0a0 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
2d0b0 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
2d0c0 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
2d0d0 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
2d0e0 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
2d0f0 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
2d100 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
2d110 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
2d120 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
2d130 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
2d140 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
2d150 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
2d160 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
2d170 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70  ( pc>=-1 && pc<p
2d180 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66  ->nOp );..#ifdef
2d190 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2d1a0 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29    if( p->trace )
2d1b0 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  {.      if( rc!=
2d1c0 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74  0 ) fprintf(p->t
2d1d0 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72  race,"rc=%d\n",r
2d1e0 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
2d1f0 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50  p->opflags & (OP
2d200 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
2d210 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20  ASE|OPFLG_OUT2) 
2d220 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
2d230 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
2d240 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  e, pOp->p2, &aMe
2d250 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
2d260 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
2d270 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
2d280 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
2d290 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2d2a0 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2d2b0 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
2d2c0 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
2d2d0 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
2d2e0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
2d2f0 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
2d300 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
2d310 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
2d320 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
2d330 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
2d340 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
2d350 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
2d360 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
2d370 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
2d380 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
2d390 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
2d3a0 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
2d3b0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
2d3c0 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
2d3d0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2d3e0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
2d3f0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2d400 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2d410 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2d420 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
2d430 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f  LITE_ERROR;..  /
2d440 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
2d450 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
2d460 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
2d470 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
2d480 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
2d490 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
2d4a0 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
2d4b0 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
2d4c0 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
2d4d0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  .  sqlite3BtreeM
2d4e0 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26  utexArrayLeave(&
2d4f0 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65  p->aMutex);.  re
2d500 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
2d510 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
2d520 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
2d530 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
2d540 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
2d550 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
2d560 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
2d570 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2d580 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2d590 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
2d5a0 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
2d5b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
2d5c0 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
2d5d0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2d5e0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2d5f0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
2d600 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
2d610 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
2d620 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
2d630 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2d640 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2d650 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
2d660 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
2d670 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
2d680 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2d690 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2d6a0 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d   for an SQLITE_M
2d6b0 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a  ISUSE error..  *
2d6c0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  /.abort_due_to_m
2d6d0 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51  isuse:.  rc = SQ
2d6e0 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f  LITE_MISUSE;.  /
2d6f0 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f  * Fall thru into
2d700 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d710 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d  ror */..  /* Jum
2d720 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
2d730 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
2d740 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
2d750 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
2d760 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
2d770 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
2d780 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
2d790 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
2d7a0 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
2d7b0 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
2d7c0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
2d7d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2d7e0 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
2d7f0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
2d800 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2d810 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2d820 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2d830 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
2d840 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
2d850 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2d860 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2d870 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
2d880 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
2d890 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
2d8a0 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
2d8b0 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
2d8c0 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
2d8d0 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
2d8e0 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
2d8f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
2d900 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
2d910 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65   rc;.  sqlite3Se
2d920 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2d930 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2d940 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
2d950 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  );.  goto vdbe_e
2d960 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a           rror_halt;.}.