/ Hex Artifact Content
Login

Artifact fccdf72a632fa8ce968677481f4fe5b1181a792a:


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 75 38 20 65 6e 63 20 3d  um;.    u8 enc =
2200: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20   pRec->enc;.    
2210: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2220: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2230: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2240: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
2250: 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62  && sqlite3IsNumb
2260: 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61  er(pRec->z, &rea
2270: 6c 6e 75 6d 2c 20 65 6e 63 29 20 29 7b 0a 20 20  lnum, enc) ){.  
2280: 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20      i64 value;. 
2290: 20 20 20 20 20 63 68 61 72 20 2a 7a 55 74 66 38       char *zUtf8
22a0: 20 3d 20 70 52 65 63 2d 3e 7a 3b 0a 23 69 66 6e   = pRec->z;.#ifn
22b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22c0: 55 54 46 31 36 0a 20 20 20 20 20 20 69 66 28 20  UTF16.      if( 
22d0: 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc!=SQLITE_UTF8
22e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
22f0: 72 74 28 20 70 52 65 63 2d 3e 64 62 20 29 3b 0a  rt( pRec->db );.
2300: 20 20 20 20 20 20 20 20 7a 55 74 66 38 20 3d 20          zUtf8 = 
2310: 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
2320: 70 52 65 63 2d 3e 64 62 2c 20 70 52 65 63 2d 3e  pRec->db, pRec->
2330: 7a 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  z, pRec->n, enc)
2340: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 7a  ;.        if( !z
2350: 55 74 66 38 20 29 20 72 65 74 75 72 6e 3b 0a 20  Utf8 ) return;. 
2360: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20       }.#endif.  
2370: 20 20 20 20 69 66 28 20 21 72 65 61 6c 6e 75 6d      if( !realnum
2380: 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f 69 36   && sqlite3Atoi6
2390: 34 28 7a 55 74 66 38 2c 20 26 76 61 6c 75 65 29  4(zUtf8, &value)
23a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63   ){.        pRec
23b0: 2d 3e 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20  ->u.i = value;. 
23c0: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
23d0: 65 46 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f  eFlag(pRec, MEM_
23e0: 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Int);.      }els
23f0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2400: 65 33 41 74 6f 46 28 7a 55 74 66 38 2c 20 26 70  e3AtoF(zUtf8, &p
2410: 52 65 63 2d 3e 72 29 3b 0a 20 20 20 20 20 20 20  Rec->r);.       
2420: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2430: 70 52 65 63 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pRec, MEM_Real);
2440: 0a 20 20 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  .      }.#ifndef
2450: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2460: 31 36 0a 20 20 20 20 20 20 69 66 28 20 65 6e 63  16.      if( enc
2470: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
2480: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2490: 44 62 46 72 65 65 28 70 52 65 63 2d 3e 64 62 2c  DbFree(pRec->db,
24a0: 20 7a 55 74 66 38 29 3b 0a 20 20 20 20 20 20 7d   zUtf8);.      }
24b0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
24c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
24d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
24e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
24f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2500: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2510: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2520: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2530: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2540: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2550: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2560: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2570: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2580: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2590: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
25a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
25b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
25d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
25e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
25f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2600: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2610: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2620: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2630: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2640: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2650: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2660: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2670: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2680: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2690: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
26a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
26b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
26c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
26d0: 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20  _AFF_NONE:.**   
26e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
26f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2700: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2710: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2720: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2730: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2740: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2750: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2760: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2770: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2780: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2790: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
27a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
27b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
27c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
27d0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
27e0: 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  T ){.    /* Only
27f0: 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e   attempt the con
2800: 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20  version to TEXT 
2810: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  if there is an i
2820: 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20  nteger or real. 
2830: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
2840: 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e  tion (blob and N
2850: 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63  ULL do not get c
2860: 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f  onverted) but no
2870: 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72   string.    ** r
2880: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20  epresentation.. 
2890: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d     */.    if( 0=
28a0: 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  =(pRec->flags&ME
28b0: 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d  M_Str) && (pRec-
28c0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c  >flags&(MEM_Real
28d0: 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20  |MEM_Int)) ){.  
28e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28f0: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63  emStringify(pRec
2900: 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20  , enc);.    }.  
2910: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d    pRec->flags &=
2920: 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f   ~(MEM_Real|MEM_
2930: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Int);.  }else if
2940: 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49  ( affinity!=SQLI
2950: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20  TE_AFF_NONE ){. 
2960: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2970: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2980: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2990: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
29a0: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
29b0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
29c0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
29d0: 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  C );.    applyNu
29e0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52  mericAffinity(pR
29f0: 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  ec);.    if( pRe
2a00: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2a10: 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eal ){.      sql
2a20: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2a30: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2a40: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
2a50: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2a60: 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66   the type of a f
2a70: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
2a80: 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c   or a result col
2a90: 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75  umn.** into a nu
2aa0: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
2ab0: 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65  tion.  Use eithe
2ac0: 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  r INTEGER or REA
2ad0: 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69  L whichever.** i
2ae0: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20  s appropriate.  
2af0: 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20  But only do the 
2b00: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74  conversion if it
2b10: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74   is possible wit
2b20: 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20  hout.** loss of 
2b30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
2b40: 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73  return the revis
2b50: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61  ed type of the a
2b60: 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  rgument..**.** T
2b70: 68 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49  his is an EXPERI
2b80: 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69  MENTAL api and i
2b90: 73 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61  s subject to cha
2ba0: 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a  nge or removal..
2bb0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  */.int sqlite3_v
2bc0: 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70  alue_numeric_typ
2bd0: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  e(sqlite3_value 
2be0: 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70  *pVal){.  Mem *p
2bf0: 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c  Mem = (Mem*)pVal
2c00: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
2c10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2c20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c30: 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d 29 3b  StoreType(pMem);
2c40: 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e  .  return pMem->
2c50: 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  type;.}../*.** E
2c60: 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20  xported version 
2c70: 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  of applyAffinity
2c80: 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72  (). This one wor
2c90: 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61  ks on sqlite3_va
2ca0: 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68  lue*, .** not th
2cb0: 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20  e internal Mem* 
2cc0: 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  type..*/.void sq
2cd0: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2ce0: 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74  ffinity(.  sqlit
2cf0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20  e3_value *pVal, 
2d00: 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20  .  u8 affinity, 
2d10: 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61  .  u8 enc.){.  a
2d20: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65  pplyAffinity((Me
2d30: 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69  m *)pVal, affini
2d40: 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66  ty, enc);.}..#if
2d50: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2d60: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
2d70: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
2d80: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2d90: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
2da0: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
2db0: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
2dc0: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
2dd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
2de0: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
2df0: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
2e00: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
2e10: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
2e20: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
2e30: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
2e40: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
2e50: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
2e60: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
2e70: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
2e80: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
2e90: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
2ea0: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
2eb0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
2ec0: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
2ed0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2ee0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2ef0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2f00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2f10: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
2f20: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
2f30: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2f40: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
2f50: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2f60: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2f70: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
2f80: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
2f90: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2fa0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
2fb0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2fc0: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
2fd0: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  ';.    }..    sq
2fe0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
2ff0: 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20  00, zCsr, "%c", 
3000: 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  c);.    zCsr += 
3010: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3020: 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCsr);.    sqlit
3030: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3040: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
3050: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
3060: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3070: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
3080: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3090: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
30a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
30b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
30c0: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
30d0: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
30e0: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
30f0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3100: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3110: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3120: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3130: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
3140: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
3150: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
3160: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
3170: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
3180: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
3190: 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  z;.    }..    sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c  00, zCsr, "]%s",
31c0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
31d0: 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20  enc]);.    zCsr 
31e0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31f0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  30(zCsr);.    if
3200: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
3210: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3220: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3230: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3240: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3250: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3260: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3270: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3280: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3290: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
32a0: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
32b0: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
32c0: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
32d0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
32e0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
32f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3300: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3310: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3320: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3330: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3340: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3350: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3360: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3370: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3380: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3390: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
33a0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
33b0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
33c0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
33d0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
33e0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
33f0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3400: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3410: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3420: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3430: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3440: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3450: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3460: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3470: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3480: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3490: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
34a0: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
34b0: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
34c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
34d0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
34e0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34f0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3500: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3510: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3520: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3530: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3540: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3550: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3560: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3570: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3580: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3590: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
35a0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
35b0: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
35c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35d0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
35e0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
35f0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3600: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3610: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3620: 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20  TracePrint(FILE 
3630: 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  *out, Mem *p){. 
3640: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3650: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3660: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3670: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3680: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3690: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
36a0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
36b0: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
36c0: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
36d0: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
36e0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36f0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3700: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
3710: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
3720: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3730: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3740: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3750: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3760: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3770: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3780: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3790: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
37a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
37b0: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
37c0: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
37d0: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
37e0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
37f0: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3800: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3810: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
3820: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
3830: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
3840: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
3850: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
3860: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3870: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3880: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3890: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
38a0: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
38b0: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
38c0: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
38d0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
38e0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
38f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3900: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
3910: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
3920: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
3930: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
3940: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
3950: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3960: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3970: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3980: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3990: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
39a0: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
39b0: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
39c0: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
39d0: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
39e0: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
39f0: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3a00: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
3a10: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
3a20: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
3a30: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
3a40: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
3a50: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
3a60: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a70: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a80: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a90: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3aa0: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3ab0: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3ac0: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3ad0: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3ae0: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3af0: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3b00: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3b10: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3b20: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3b30: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3b40: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3b50: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3b60: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b70: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b80: 61 74 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  at we needed.  B
3b90: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3ba0: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3bb0: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3bc0: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3bd0: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3be0: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3bf0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3c00: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3c10: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3c20: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3c30: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3c40: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3c50: 44 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74  DEBUG.static int
3c60: 20 66 69 6c 65 45 78 69 73 74 73 28 73 71 6c 69   fileExists(sqli
3c70: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
3c80: 68 61 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69  har *zFile){.  i
3c90: 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e  nt res = 0;.  in
3ca0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
3cb0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
3cc0: 54 45 53 54 0a 20 20 2f 2a 20 49 66 20 77 65 20  TEST.  /* If we 
3cd0: 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 74 65  are currently te
3ce0: 73 74 69 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c  sting IO errors,
3cf0: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c   then do not cal
3d00: 6c 20 4f 73 41 63 63 65 73 73 28 29 20 74 6f 0a  l OsAccess() to.
3d10: 20 20 2a 2a 20 74 65 73 74 20 66 6f 72 20 74 68    ** test for th
3d20: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 7a 46  e presence of zF
3d30: 69 6c 65 2e 20 54 68 69 73 20 69 73 20 62 65 63  ile. This is bec
3d40: 61 75 73 65 20 61 6e 79 20 49 4f 20 65 72 72 6f  ause any IO erro
3d50: 72 20 74 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75  r that.  ** occu
3d60: 72 73 20 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74  rs here will not
3d70: 20 62 65 20 72 65 70 6f 72 74 65 64 2c 20 63 61   be reported, ca
3d80: 75 73 69 6e 67 20 74 68 65 20 74 65 73 74 20 74  using the test t
3d90: 6f 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65  o fail..  */.  e
3da0: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
3db0: 33 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69  3_io_error_pendi
3dc0: 6e 67 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  ng;.  if( sqlite
3dd0: 33 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69  3_io_error_pendi
3de0: 6e 67 3c 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20  ng<=0 ).#endif. 
3df0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
3e00: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
3e10: 2c 20 7a 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  , zFile, SQLITE_
3e20: 41 43 43 45 53 53 5f 45 58 49 53 54 53 2c 20 26  ACCESS_EXISTS, &
3e30: 72 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  res);.  return (
3e40: 72 65 73 20 26 26 20 72 63 3d 3d 53 51 4c 49 54  res && rc==SQLIT
3e50: 45 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  E_OK);.}.#endif.
3e60: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
3e70: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
3e80: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
3e90: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
3ea0: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
3eb0: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
3ec0: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
3ed0: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
3ee0: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
3ef0: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
3f00: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
3f10: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
3f20: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
3f30: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
3f40: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
3f50: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
3f60: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
3f70: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
3f80: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
3f90: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
3fa0: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
3fb0: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
3fc0: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
3fd0: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
3fe0: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
3ff0: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
4000: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
4010: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
4020: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
4030: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
4040: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
4050: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
4060: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
4070: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  if../*.** Execut
4080: 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56  e as much of a V
4090: 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77  DBE program as w
40a0: 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72  e can then retur
40b0: 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  n..**.** sqlite3
40c0: 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20  VdbeMakeReady() 
40d0: 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62  must be called b
40e0: 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69  efore this routi
40f0: 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
4100: 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67  * close the prog
4110: 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c  ram with a final
4120: 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20   OP_Halt and to 
4130: 73 65 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62  set up the callb
4140: 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  acks.** and the 
4150: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f  error message po
4160: 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  inter..**.** Whe
4170: 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72  never a row or r
4180: 65 73 75 6c 74 20 64 61 74 61 20 69 73 20 61 76  esult data is av
4190: 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f  ailable, this ro
41a0: 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65  utine will eithe
41b0: 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20  r.** invoke the 
41c0: 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20  result callback 
41d0: 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65  (if there is one
41e0: 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68  ) or return with
41f0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a  .** SQLITE_ROW..
4200: 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65  **.** If an atte
4210: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f  mpt is made to o
4220: 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74  pen a locked dat
4230: 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73  abase, then this
4240: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c   routine.** will
4250: 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74   either invoke t
4260: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
4270: 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e   (if there is on
4280: 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a  e) or it will.**
4290: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
42a0: 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  USY..**.** If an
42b0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61   error occurs, a
42c0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
42d0: 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65  is written to me
42e0: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
42f0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
4300: 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45  lloc() and p->zE
4310: 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f  rrMsg is made to
4320: 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d   point to that m
4330: 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72  emory..** The er
4340: 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72  ror code is stor
4350: 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20  ed in p->rc and 
4360: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
4370: 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f  urns SQLITE_ERRO
4380: 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  R..**.** If the 
4390: 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65  callback ever re
43a0: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
43b0: 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d  then the program
43c0: 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69   exits.** immedi
43d0: 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69  ately.  There wi
43e0: 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d  ll be no error m
43f0: 65 73 73 61 67 65 20 62 75 74 20 74 68 65 20 70  essage but the p
4400: 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a  ->rc field is.**
4410: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41   set to SQLITE_A
4420: 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f  BORT and this ro
4430: 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72  utine will retur
4440: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
4450: 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61  **.** A memory a
4460: 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20  llocation error 
4470: 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20  causes p->rc to 
4480: 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
4490: 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a  _NOMEM and this.
44a0: 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65  ** routine to re
44b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
44c0: 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66  R..**.** Other f
44d0: 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75  atal errors retu
44e0: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e  rn SQLITE_ERROR.
44f0: 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69  .**.** After thi
4500: 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69  s routine has fi
4510: 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56  nished, sqlite3V
4520: 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68  dbeFinalize() sh
4530: 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20  ould be.** used 
4540: 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20  to clean up the 
4550: 6d 65 73 73 20 74 68 61 74 20 77 61 73 20 6c 65  mess that was le
4560: 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e  ft behind..*/.in
4570: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
4580: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a0: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
45b0: 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20 20 20  {.  int pc=0;   
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
45d0: 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  * The program co
45e0: 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 61  unter */.  Op *a
45f0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
4600: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4610: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
4620: 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20  *pOp;           
4630: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4640: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4650: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4660: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4670: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4680: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4690: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
46a0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
46b0: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
46c0: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
46d0: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
46e0: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
46f0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 65  f true */.  u8 e
4700: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
4710: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
4720: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
4730: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4740: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4750: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 63  CALLBACK.  int c
4760: 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20 20 20  heckProgress;   
4770: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
4780: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
4790: 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  cks are enabled 
47a0: 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65  */.  int nProgre
47b0: 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20  ssOps = 0;      
47c0: 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75  /* Opcodes execu
47d0: 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65  ted since progre
47e0: 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a  ss callback. */.
47f0: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4800: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
4810: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
4820: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
4830: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
4840: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
4850: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4860: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
4870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
4880: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4890: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
48a0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
48b0: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
48c0: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
48d0: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
48e0: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
48f0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
4900: 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20   iCompare = 0;  
4910: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
4920: 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d  t of last OP_Com
4930: 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a  pare operation *
4940: 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
4950: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  e = 0;         /
4960: 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66  * Permutation of
4970: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f   columns for OP_
4980: 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65  Compare */.#ifde
4990: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
49a0: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
49c0: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
49d0: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
49e0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50  e */.  int origP
49f0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
4a00: 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75    /* Program cou
4a10: 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66  nter at start of
4a20: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4a30: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
4a40: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
4a50: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
4a60: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
4a70: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
4a80: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4a90: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4aa0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75  .  sqlite3VdbeMu
4ab0: 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70 29  texArrayEnter(p)
4ac0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4ad0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4ae0: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4af0: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4b00: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4b10: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4b20: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4b30: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4b40: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4b50: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4b60: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4b70: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4b80: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4b90: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4ba0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4bb0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4bc0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4bd0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4be0: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4bf0: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4c00: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4c10: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4c20: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4c30: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4c40: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4c50: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63  _CALLBACK.  chec
4c60: 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e  kProgress = db->
4c70: 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65  xProgress!=0;.#e
4c80: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4c90: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4ca0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4cb0: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4cc0: 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70  pc==0 .   && ((p
4cd0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4ce0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4cf0: 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28  ) || fileExists(
4d00: 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69  db, "vdbe_explai
4d10: 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e  n")).  ){.    in
4d20: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
4d30: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4d40: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4d50: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d60: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4d70: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4d80: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4d90: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4da0: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4db0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  );.    }.  }.  i
4dc0: 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  f( fileExists(db
4dd0: 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20  , "vdbe_trace") 
4de0: 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20  ){.    p->trace 
4df0: 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20  = stdout;.  }.  
4e00: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4e10: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4e20: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4e30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4e40: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4e50: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4e60: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4e70: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4e80: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4e90: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4ea0: 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20  FILE.    origPc 
4eb0: 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20  = pc;.    start 
4ec0: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4ed0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f  );.#endif.    pO
4ee0: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4ef0: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4f00: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4f10: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4f20: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4f30: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4f40: 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
4f50: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63   ){.      if( pc
4f60: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
4f70: 72 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63  rintf("VDBE Exec
4f80: 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29  ution Trace:\n")
4f90: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4fa0: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4fb0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4fc0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4fd0: 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c  Op(p->trace, pc,
4fe0: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 20   pOp);.    }.   
4ff0: 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d 3d 30   if( p->trace==0
5000: 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20   && pc==0 ){.   
5010: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42     sqlite3BeginB
5020: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
5030: 20 20 20 20 20 69 66 28 20 66 69 6c 65 45 78 69       if( fileExi
5040: 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 73 71  sts(db, "vdbe_sq
5050: 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20  ltrace") ){.    
5060: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5070: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
5080: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
5090: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
50a0: 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ();.    }.#endif
50b0: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
50c0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
50d0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
50e0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
50f0: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
5100: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
5110: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
5120: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
5130: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5140: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
5150: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5160: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
5170: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5180: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
5190: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
51a0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
51b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
51c0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
51d0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
51e0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
51f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
5200: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
5210: 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20      /* Call the 
5220: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5230: 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69  k if it is confi
5240: 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65  gured and the re
5250: 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20  quired number.  
5260: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
5270: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
5280: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
5290: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
52a0: 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69  n of.    ** sqli
52b0: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
52c0: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
52d0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
52e0: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
52f0: 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  d)..    ** If th
5300: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5310: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5320: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5330: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5340: 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74  ith.    ** a ret
5350: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5360: 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20  ABORT..    */.  
5370: 20 20 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72    if( checkProgr
5380: 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ess ){.      if(
5390: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
53a0: 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  s==nProgressOps 
53b0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70  ){.        int p
53c0: 72 63 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20  rc;.        prc 
53d0: 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  = db->xProgress(
53e0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
53f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
5400: 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  rc!=0 ){.       
5410: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5420: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5430: 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72      goto vdbe_er
5440: 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20  ror_halt;.      
5450: 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f    }.        nPro
5460: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
5470: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f      }.      nPro
5480: 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20  gressOps++;.    
5490: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
54a0: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
54b0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
54c0: 65 72 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72  erelase" tag, fr
54d0: 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78  ee any.    ** ex
54e0: 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  ternal allocatio
54f0: 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32  ns out of mem[p2
5500: 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32  ] and set mem[p2
5510: 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61  ] to be.    ** a
5520: 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65  n undefined inte
5530: 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69  ger.  Opcodes wi
5540: 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69  ll either fill i
5550: 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
5560: 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f    ** value or co
5570: 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  nvert mem[p2] to
5580: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   a different typ
5590: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
55a0: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
55b0: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
55c0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
55d0: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
55e0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
55f0: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
5600: 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
5610: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5620: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5630: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
5640: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  Mem );.      pOu
5650: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5660: 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2];.      sqlite
5670: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
5680: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
5690: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
56a0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
56b0: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
56c0: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
56d0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
56e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
56f0: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
5700: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5710: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
5720: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5730: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
5740: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5750: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 52  >nMem );.      R
5760: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5770: 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p1, &aMem[pOp
5780: 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p1]);.    }.  
5790: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
57a0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  ags & OPFLG_IN2)
57b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
57c0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
57d0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
57e0: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
57f0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
5800: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5810: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5820: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5830: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5840: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5850: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5860: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5870: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5880: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
5890: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
58a0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
58b0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
58c0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
58d0: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
58e0: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
58f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5900: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5910: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5920: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 7d  p->nMem );.    }
5930: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5940: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5950: 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT3)!=0 ){.     
5960: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5970: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5980: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
5990: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 7d 0a 23 65  nMem );.    }.#e
59a0: 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74  ndif.  .    swit
59b0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
59c0: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
59d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a10: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
5a20: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
5a30: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5a40: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
5a50: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
5a60: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
5a70: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
5a80: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
5a90: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
5aa0: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
5ab0: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
5ac0: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
5ad0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
5ae0: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
5af0: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
5b00: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
5b10: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
5b20: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
5b30: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
5b40: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5b50: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
5b60: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
5b70: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
5b80: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
5b90: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
5ba0: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
5bb0: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
5bc0: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
5bd0: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
5be0: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
5bf0: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
5c00: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
5c10: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
5c20: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
5c30: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
5c40: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
5c50: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
5c60: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
5c70: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
5c80: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
5c90: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
5ca0: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
5cb0: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
5cc0: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
5cd0: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
5ce0: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
5cf0: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
5d00: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
5d10: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
5d20: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
5d30: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
5d40: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
5d50: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
5d60: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
5d70: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
5d80: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
5d90: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
5da0: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
5db0: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
5dc0: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
5dd0: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
5de0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
5df0: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
5e00: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
5e10: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
5e20: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
5e30: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
5e40: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
5e50: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
5e60: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
5e70: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
5e80: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
5e90: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
5ea0: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
5eb0: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
5ec0: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
5ed0: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
5ee0: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
5ef0: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
5f00: 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65   out2_prerelease
5f10: 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53  , out2, out3.  S
5f20: 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f  ee.** the mkopco
5f30: 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66  deh.awk script f
5f40: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
5f50: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
5f60: 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   Documentation a
5f70: 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65  bout VDBE opcode
5f80: 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  s is generated b
5f90: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20  y scanning this 
5fa0: 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65  file.** for line
5fb0: 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69  s of that contai
5fc0: 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68  n "Opcode:".  Th
5fd0: 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20  at line and all 
5fe0: 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f  subsequent.** co
5ff0: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20  mment lines are 
6000: 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
6010: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  ration of the op
6020: 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65  code.html docume
6030: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e  ntation.** file.
6040: 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a  .**.** SUMMARY:.
6050: 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74  **.**     Format
6060: 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e  ting is importan
6070: 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61  t to scripts tha
6080: 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65  t scan this file
6090: 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20  ..**     Do not 
60a0: 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65  deviate from the
60b0: 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c   formatting styl
60c0: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
60d0: 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  se..**.*********
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ****/../* Opcode
6130: 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a  :  Goto * P2 * *
6140: 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f   *.**.** An unco
6150: 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74  nditional jump t
6160: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  o address P2..**
6170: 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   The next instru
6180: 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77  ction executed w
6190: 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f  ill be .** the o
61a0: 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66  ne at index P2 f
61b0: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
61c0: 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67  g of.** the prog
61d0: 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
61e0: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
61f0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6200: 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52   CHECK_FOR_INTER
6210: 52 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70  RUPT;.  pc = pOp
6220: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61  ->p2 - 1;.  brea
6230: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6240: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
6250: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
6260: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
6270: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
6280: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
6290: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
62a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
62b0: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
62c0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
62d0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
62e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
62f0: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6300: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6310: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
6320: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6330: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6340: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6350: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6360: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
6370: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
6380: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
6390: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
63a0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
63b0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
63c0: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
63d0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
63e0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P1..*/.case OP_R
63f0: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6400: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6410: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6420: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6430: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6440: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
6450: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6460: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6470: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
6480: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53   * * * *.**.** S
6490: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
64a0: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
64b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
64c0: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
64d0: 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20  P_Yield: {      
64e0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
64f0: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
6500: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6510: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6520: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
6530: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6540: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6550: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
6560: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
6570: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
6580: 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f   pc;.  REGISTER_
6590: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
65a0: 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44  In1);.  pc = pcD
65b0: 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  est;.  break;.}.
65c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
65d0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
65e0: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  3 P4 *.**.** Che
65f0: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
6600: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
6610: 20 69 73 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   is is NULL then
6620: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
6630: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
6640: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
6650: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
6660: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
6670: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
6680: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
6690: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
66a0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
66b0: 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
66c0: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
66d0: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
66e0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
66f0: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
6700: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
6710: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
6720: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
6730: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
6740: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
6750: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
6760: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74   P4 *.**.** Exit
6770: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6780: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
6790: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
67a0: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
67b0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
67c0: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
67d0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
67e0: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
67f0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
6800: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6810: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
6820: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6830: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6840: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6850: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6860: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6870: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6880: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6890: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
68a0: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
68b0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
68c0: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
68d0: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
68e0: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
68f0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6900: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6910: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6920: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6930: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6940: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6950: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6960: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6970: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6980: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6990: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
69a0: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
69b0: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
69c0: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
69d0: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
69e0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
69f0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
6a00: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
6a10: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
6a20: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
6a30: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
6a40: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
6a50: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
6a60: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
6a70: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
6a80: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
6a90: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
6aa0: 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  lt: {.  if( pOp-
6ab0: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
6ac0: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
6ad0: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
6ae0: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
6af0: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
6b00: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
6b10: 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65  */.    VdbeFrame
6b20: 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46   *pFrame = p->pF
6b30: 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72  rame;.    p->pFr
6b40: 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50  ame = pFrame->pP
6b50: 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46  arent;.    p->nF
6b60: 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69  rame--;.    sqli
6b70: 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
6b80: 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
6b90: 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69  );.    pc = sqli
6ba0: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
6bb0: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
6bc0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
6bd0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
6be0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
6bf0: 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  pc is the OP_Pro
6c00: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
6c10: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
6c20: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
6c30: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
6c40: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
6c50: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
6c60: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
6c70: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
6c80: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
6c90: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
6ca0: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
6cb0: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
6cc0: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
6cd0: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
6ce0: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
6cf0: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
6d00: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
6d10: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
6d20: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
6d30: 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f        pc = p->aO
6d40: 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20  p[pc].p2-1;.    
6d50: 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61  }.    aOp = p->a
6d60: 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70  Op;.    aMem = p
6d70: 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61  ->aMem;.    brea
6d80: 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20  k;.  }..  p->rc 
6d90: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
6da0: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
6db0: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
6dc0: 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70  pc = pc;.  if( p
6dd0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
6de0: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d 53  assert( p->rc!=S
6df0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
6e00: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
6e10: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
6e20: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
6e30: 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  z);.    testcase
6e40: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
6e50: 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
6e60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
6e70: 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74  (pOp->p1, "abort
6e80: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
6e90: 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c  %s", pc, p->zSql
6ea0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
6eb0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72 63 20  }else if( p->rc 
6ec0: 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  ){.    testcase(
6ed0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6ee0: 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
6ef0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
6f00: 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74 72  pOp->p1, "constr
6f10: 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74 20 25  aint failed at %
6f20: 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c 20  d in [%s]", pc, 
6f30: 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20  p->zSql);.  }.  
6f40: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
6f50: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
6f60: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
6f70: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
6f80: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
6f90: 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28  E_ERROR );.  if(
6fa0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
6fb0: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
6fc0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
6fd0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
6fe0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
6ff0: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
7000: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
7010: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7020: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7030: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
7040: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
7050: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
7060: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
7070: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
7080: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
7090: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
70a0: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
70b0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
70c0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
70d0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
70e0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
70f0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
7100: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
7110: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7120: 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
7130: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
7140: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7150: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
7160: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
7170: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
7180: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
7190: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
71a0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
71b0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
71c0: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
71d0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
71e0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
71f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
7200: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
7210: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
7220: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
7230: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
7240: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
7250: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
7260: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
7270: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
7280: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
7290: 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  bit floating poi
72a0: 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  nt value..** Wri
72b0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
72c0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
72d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a  */.case OP_Real:
72e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
72f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41   same as TK_FLOA
7300: 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  T, out2-prerelea
7310: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c  se */.  pOut->fl
7320: 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  ags = MEM_Real;.
7330: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
7340: 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34  e3IsNaN(*pOp->p4
7350: 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75  .pReal) );.  pOu
7360: 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  t->r = *pOp->p4.
7370: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
7380: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
7390: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
73a0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
73b0: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
73c0: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
73d0: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
73e0: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
73f0: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
7400: 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f  n OP_String befo
7410: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
7420: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
7430: 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  time..*/.case OP
7440: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
7450: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7460: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
7470: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7490: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
74a0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
74b0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
74c0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
74d0: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
74e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
74f0: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
7500: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
7510: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
7520: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7530: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7540: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
7550: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
7560: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
7570: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7580: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7590: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
75a0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
75b0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
75c0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
75d0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
75e0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
75f0: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
7600: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
7610: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
7620: 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  n );.    pOut->z
7630: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
7640: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
7650: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70  EM_Static;.    p
7660: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Out->flags &= ~M
7670: 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20  EM_Dyn;.    if( 
7680: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
7690: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
76a0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
76b0: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
76c0: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
76d0: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
76e0: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
76f0: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
7700: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
7710: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
7720: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
7730: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
7740: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
7750: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
7760: 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
7770: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
7780: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
7790: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
77a0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
77b0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
77c0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
77d0: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
77e0: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
77f0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
7800: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  2..*/.case OP_St
7810: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
7820: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7830: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7840: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7850: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7860: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
7870: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
7880: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
7890: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
78a0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
78b0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
78c0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
78d0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
78e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
78f0: 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20  code: Null * P2 
7900: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
7910: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
7920: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7930: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
7940: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7950: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7960: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7970: 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b  M_Null;.  break;
7980: 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
7990: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a  Blob P1 P2 * P4.
79a0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
79b0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
79c0: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
79d0: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
79e0: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
79f0: 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72 75   P2. This instru
7a00: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64  ction is not cod
7a10: 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62  ed directly.** b
7a20: 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20  y the compiler. 
7a30: 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f 6d  Instead, the com
7a40: 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65 63  piler layer spec
7a50: 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48  ifies.** an OP_H
7a60: 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77  exBlob opcode, w
7a70: 69 74 68 20 74 68 65 20 68 65 78 20 73 74 72 69  ith the hex stri
7a80: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
7a90: 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62  n of.** the blob
7aa0: 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70 63   as P4. This opc
7ab0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
7ac0: 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62  ed to an OP_Blob
7ad0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74 69  .** the first ti
7ae0: 6d 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  me it is execute
7af0: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  d..*/.case OP_Bl
7b00: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
7b10: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7b20: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7b30: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
7b40: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
7b50: 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  H );.  sqlite3Vd
7b60: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7b70: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
7b80: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
7b90: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7ba0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7bb0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7bc0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7bd0: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
7be0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
7bf0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
7c00: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
7c10: 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 50 31  nd parameters P1
7c20: 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f 20 72  ..P1+P3-1 into r
7c30: 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32 2e 2e  egisters.** P2..
7c40: 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20 49  P2+P3-1..**.** I
7c50: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
7c60: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
7c70: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
7c80: 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e  in P4 and P3==1.
7c90: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
7ca0: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
7cb0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
7cc0: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
7cd0: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
7ce0: 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
7cf0: 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62 6c 65       /* Variable
7d00: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
7d10: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
7d20: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
7d30: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 20 20  to copy to */.  
7d40: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
7d50: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 61   /* Number of va
7d60: 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  lues left to cop
7d70: 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72  y */.  Mem *pVar
7d80: 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65  ;       /* Value
7d90: 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72   being transferr
7da0: 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20 70 4f  ed */..  p1 = pO
7db0: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70 32 20  p->p1 - 1;.  p2 
7dc0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20 3d  = pOp->p2;.  n =
7dd0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
7de0: 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 2b  rt( p1>=0 && p1+
7df0: 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  n<=p->nVar );.  
7e00: 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20 26 26  assert( p2>=1 &&
7e10: 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65 6d   p2+n-1<=p->nMem
7e20: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
7e30: 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f  p->p4.z==0 || pO
7e40: 70 2d 3e 70 33 3d 3d 31 20 7c 7c 20 70 4f 70 2d  p->p3==1 || pOp-
7e50: 3e 70 33 3d 3d 30 20 29 3b 0a 0a 20 20 77 68 69  >p3==0 );..  whi
7e60: 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b 0a 20  le( n-- > 0 ){. 
7e70: 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56     pVar = &p->aV
7e80: 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20 69 66  ar[p1++];.    if
7e90: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
7ea0: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
7eb0: 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
7ec0: 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  ig;.    }.    pO
7ed0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 2b 2b 5d  ut = &aMem[p2++]
7ee0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7ef0: 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72  eMemReleaseExter
7f00: 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  nal(pOut);.    p
7f10: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7f20: 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73 71 6c 69 74  _Null;.    sqlit
7f30: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
7f40: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
7f50: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
7f60: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7f70: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7d  BSIZE(pOut);.  }
7f80: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7f90: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7fa0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7fb0: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7fc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7fd0: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
7fe0: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
7ff0: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
8000: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
8010: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
8020: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
8030: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
8040: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
8050: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
8060: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
8070: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
8080: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
8090: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
80a0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
80b0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
80c0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
80d0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
80e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
80f0: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
8100: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
8110: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
8120: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8130: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
8140: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
8150: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8160: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8170: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
8180: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
8190: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
81a0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
81b0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
81c0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
81d0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
81e0: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
81f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
8200: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
8210: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8220: 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  ut<=&aMem[p->nMe
8230: 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m] );.    assert
8240: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pIn1<=&aMem[p-
8250: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a 4d  >nMem] );.    zM
8260: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
8270: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
8280: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
8290: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
82a0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
82b0: 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c  ;.    pIn1->zMal
82c0: 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20  loc = zMalloc;. 
82d0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
82e0: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
82f0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
8300: 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  Out++;.  }.  bre
8310: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8320: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a  : Copy P1 P2 * *
8330: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
8340: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
8350: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
8360: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
8370: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
8380: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
8390: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
83a0: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
83b0: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
83c0: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
83d0: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
83e0: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
83f0: 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20   OP_Copy: {     
8400: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
8410: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
8420: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
8430: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8440: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
8450: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8460: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8470: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8480: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8490: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
84a0: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
84b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
84c0: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
84d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
84e0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
84f0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
8500: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8510: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
8520: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8530: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
8540: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
8550: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8560: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
8570: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
8580: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8590: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
85a0: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
85b0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
85c0: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
85d0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
85e0: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
85f0: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8600: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8610: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
8620: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
8630: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
8640: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
8650: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
8660: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
8670: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
8680: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8690: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
86a0: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
86b0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
86c0: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
86d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
86e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
86f0: 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  * in1, out2 */. 
8700: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
8710: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
8720: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
8730: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
8740: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
8750: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8760: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8770: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 52   MEM_Ephem);.  R
8780: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8790: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
87a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
87b0: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
87c0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
87d0: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
87e0: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
87f0: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
8800: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
8810: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
8820: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
8830: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
8840: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
8850: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
8860: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
8870: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
8880: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
8890: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
88a0: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
88b0: 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c  o the top P1 val
88c0: 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c  ues as the resul
88d0: 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  t.** row..*/.cas
88e0: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
88f0: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
8900: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
8910: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
8920: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
8930: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8940: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8950: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ->p1+pOp->p2<=p-
8960: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a  >nMem+1 );..  /*
8970: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
8980: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
8990: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
89a0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
89b0: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
89c0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
89d0: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
89e0: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
89f0: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
8a00: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
8a10: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
8a20: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
8a30: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
8a40: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
8a50: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
8a60: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
8a70: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
8a80: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
8a90: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8aa0: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
8ab0: 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  al );.    break;
8ac0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
8ad0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
8ae0: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
8af0: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
8b00: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
8b10: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
8b20: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
8b30: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
8b40: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
8b50: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
8b60: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
8b70: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
8b80: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
8b90: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
8ba0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
8bb0: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
8bc0: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
8bd0: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
8be0: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
8bf0: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
8c00: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8c10: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
8c20: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
8c30: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
8c40: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
8c50: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
8c60: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
8c70: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
8c80: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
8c90: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
8ca0: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
8cb0: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
8cc0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
8cd0: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
8ce0: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
8cf0: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
8d00: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
8d10: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
8d20: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8d30: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
8d40: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
8d50: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
8d60: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
8d70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
8d80: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8d90: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
8da0: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
8db0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
8dc0: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
8dd0: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
8de0: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
8df0: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
8e00: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
8e10: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
8e20: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
8e30: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
8e40: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
8e50: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
8e60: 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
8e70: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b  c!=SQLITE_OK) ){
8e80: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8e90: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
8ea0: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
8eb0: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
8ec0: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
8ed0: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
8ee0: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
8ef0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
8f00: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
8f10: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
8f20: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
8f30: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
8f40: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
8f50: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
8f60: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
8f70: 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66  .  ** as side ef
8f80: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
8f90: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
8fa0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
8fb0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
8fc0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
8fd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8fe0: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26  emNulTerminate(&
8ff0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71  pMem[i]);.    sq
9000: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
9010: 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  eType(&pMem[i]);
9020: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9030: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
9040: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
9050: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
9060: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
9070: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
9080: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
9090: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
90a0: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
90b0: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
90c0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
90d0: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
90e0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
90f0: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
9100: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
9110: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
9120: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
9130: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
9140: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
9150: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
9160: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
9170: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
9180: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
9190: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
91a0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
91b0: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
91c0: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
91d0: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
91e0: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
91f0: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
9200: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
9210: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
9220: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
9230: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
9240: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
9250: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
9260: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
9270: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
9280: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
9290: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
92a0: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
92b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
92c0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
92d0: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
92e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
92f0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
9300: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
9310: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
9320: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
9330: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
9340: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9350: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
9360: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
9370: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
9380: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
9390: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
93a0: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
93b0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
93c0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
93d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
93e0: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
93f0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
9400: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
9410: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
9420: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
9430: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
9440: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9450: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
9460: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9470: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
9480: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
9490: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
94a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
94b0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
94c0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
94d0: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
94e0: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
94f0: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
9500: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
9510: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
9520: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20   pOut->z[nByte] 
9530: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  = 0;.  pOut->z[n
9540: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
9550: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
9560: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
9570: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
9580: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9590: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
95a0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
95b0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
95c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
95d0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
95e0: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
95f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9600: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
9610: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9620: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9630: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9640: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9650: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9660: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9670: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9680: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
9690: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a   P3 * *.**.**.**
96a0: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
96b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
96c0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
96d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
96e0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
96f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9700: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
9710: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
9720: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
9730: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
9740: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
9750: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9760: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
9770: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9780: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
9790: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
97a0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
97b0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
97c0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
97d0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
97e0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
97f0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
9800: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
9810: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9820: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
9830: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
9840: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
9850: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9860: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9870: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9880: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
9890: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
98a0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
98b0: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
98c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
98d0: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
98e0: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
98f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9900: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9910: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
9920: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f   P3 * *.**.** Co
9930: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
9940: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
9950: 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68  r division of th
9960: 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65  e value in.** re
9970: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
9980: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9990: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
99a0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33  the result in P3
99b0: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
99c0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
99d0: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  2 is zero the re
99e0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
99f0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
9a00: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
9a10: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9a20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9a50: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
9a60: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9a70: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
9a80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9a90: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
9aa0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9ab0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ad0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
9ae0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9af0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
9b00: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
9b10: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9b20: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
9b30: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9b40: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
9b50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9b60: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
9b70: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
9b80: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  nt flags;      /
9b90: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
9ba0: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
9bb0: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34   inputs */.  i64
9bc0: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
9bd0: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9be0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
9bf0: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
9c00: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
9c10: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
9c20: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
9c30: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
9c40: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
9c50: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
9c60: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
9c70: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
9c80: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
9c90: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9ca0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
9cb0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9cc0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
9cd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9ce0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9cf0: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9d00: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9d10: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
9d20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
9d30: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
9d40: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
9d50: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
9d60: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9d70: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
9d80: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
9d90: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
9da0: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
9db0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
9dc0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9dd0: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9de0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9df0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9e00: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9e10: 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20  iB += iA;       
9e20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9e30: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
9e40: 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20    iB -= iA;     
9e50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9e60: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9e70: 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20      iB *= iA;   
9e80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9e90: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
9ea0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9eb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9ec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9ed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f  _null;.        /
9ee0: 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c  * Dividing the l
9ef0: 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
9f00: 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20  negative 64-bit 
9f10: 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20  integer (1<<63) 
9f20: 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d  by .        ** -
9f30: 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74  1 returns an int
9f40: 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74  eger too large t
9f50: 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d  o store in a 64-
9f60: 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f  bit data-type. O
9f70: 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d  n.        ** som
9f80: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c  e architectures,
9f90: 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66   the value overf
9fa0: 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e  lows to (1<<63).
9fb0: 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20   On others,.    
9fc0: 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20      ** a SIGFPE 
9fd0: 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66  is issued. The f
9fe0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
9ff0: 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68  nt normalizes th
a000: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  is.        ** be
a010: 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61  havior so that a
a020: 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73  ll architectures
a030: 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e   behave as if in
a040: 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a  teger .        *
a050: 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  * overflow occur
a060: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  red..        */.
a070: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
a080: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
a090: 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20  ST_INT64 ) iA = 
a0a0: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  1;.        iB /=
a0b0: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
a0c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a0d0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
a0e0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
a0f0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a100: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a110: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
a120: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
a130: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
a140: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a150: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
a160: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
a170: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
a180: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
a190: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
a1a0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
a1b0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
a1c0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
a1d0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
a1e0: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
a1f0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
a200: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
a210: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
a220: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
a230: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
a240: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
a250: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
a260: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a270: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
a280: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
a290: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a2a0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
a2b0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
a2c0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
a2d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
a2e0: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
a2f0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
a300: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
a310: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a320: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a330: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
a340: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a350: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a360: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a370: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
a380: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
a390: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
a3a0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
a3b0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a3c0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
a3d0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
a3e0: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
a3f0: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
a400: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
a410: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
a420: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
a430: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
a440: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
a450: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
a460: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
a470: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
a480: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
a490: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
a4a0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
a4b0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a4c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
a4d0: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
a4e0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a4f0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
a500: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
a510: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
a520: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a530: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
a540: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
a550: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
a560: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
a570: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
a580: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a590: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
a5a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a5b0: 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50  e: CollSeq * * P
a5c0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
a5d0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
a5e0: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
a5f0: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
a600: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a610: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
a620: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
a630: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
a640: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
a650: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
a660: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
a670: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
a680: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
a690: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
a6a0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
a6b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ..**.** The inte
a6c0: 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68  rface used by th
a6d0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a6e0: 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e   of the aforemen
a6f0: 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  tioned functions
a700: 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20  .** to retrieve 
a710: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
a720: 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68  quence set by th
a730: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74  is opcode is not
a740: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75   available.** pu
a750: 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20  blicly, only to 
a760: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64  user functions d
a770: 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63  efined in func.c
a780: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
a790: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
a7a0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a7b0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62  4_COLLSEQ );.  b
a7c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a7d0: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
a7e0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
a7f0: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
a800: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
a810: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
a820: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
a830: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
a840: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
a850: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
a860: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
a870: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
a880: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
a890: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
a8a0: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
a8b0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
a8c0: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
a8d0: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
a8e0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a8f0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
a900: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
a910: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
a920: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
a930: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
a940: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
a950: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
a960: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
a970: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
a980: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
a990: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
a9a0: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
a9b0: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
a9c0: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
a9d0: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
a9e0: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
a9f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
aa00: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
aa10: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
aa20: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
aa30: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
aa40: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
aa50: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
aa60: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
aa70: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
aa80: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
aa90: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
aaa0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
aab0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
aac0: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
aad0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
aae0: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
aaf0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
ab00: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  Val;.  int n;.. 
ab10: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
ab20: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
ab30: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
ab40: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20  l || n==0 );..  
ab50: 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
ab60: 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
ab70: 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  p->p2+n<=p->nMem
ab80: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
ab90: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
aba0: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
abb0: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
abc0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
abd0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
abe0: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
abf0: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
ac00: 70 41 72 67 3b 0a 20 20 20 20 73 71 6c 69 74 65  pArg;.    sqlite
ac10: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
ac20: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47  e(pArg);.    REG
ac30: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
ac40: 3e 70 32 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a  >p2, pArg);.  }.
ac50: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ac60: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
ac70: 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  EF || pOp->p4typ
ac80: 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29  e==P4_VDBEFUNC )
ac90: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ;.  if( pOp->p4t
aca0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
acb0: 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  ){.    ctx.pFunc
acc0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
acd0: 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  ;.    ctx.pVdbeF
ace0: 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  unc = 0;.  }else
acf0: 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46  {.    ctx.pVdbeF
ad00: 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a  unc = (VdbeFunc*
ad10: 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75  )pOp->p4.pVdbeFu
ad20: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e  nc;.    ctx.pFun
ad30: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
ad40: 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  c->pFunc;.  }.. 
ad50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
ad60: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
ad70: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
ad80: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
ad90: 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  ];.  ctx.s.flags
ada0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
adb0: 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
adc0: 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
add0: 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
ade0: 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  = 0;..  /* The o
adf0: 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
ae00: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
ae10: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
ae20: 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f  Move.  ** the po
ae30: 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73  inter to ctx.s s
ae40: 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
ae50: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  er-function can 
ae60: 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72  use.  ** the alr
ae70: 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
ae80: 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
ae90: 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65   allocating a ne
aea0: 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
aeb0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
aec0: 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a  (&ctx.s, pOut);.
aed0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
aee0: 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  (&ctx.s, MEM_Nul
aef0: 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72  l);..  ctx.isErr
af00: 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  or = 0;.  if( ct
af10: 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
af20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
af30: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
af40: 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
af50: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
af60: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
af70: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
af80: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
af90: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
afa0: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
afb0: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
afc0: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 2a 63 74  Coll;.  }.  (*ct
afd0: 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28  x.pFunc->xFunc)(
afe0: 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
aff0: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
b000: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f  cFailed ){.    /
b010: 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20  * Even though a 
b020: 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69  malloc() has fai
b030: 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  led, the impleme
b040: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20  ntation of the. 
b050: 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74     ** user funct
b060: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c  ion may have cal
b070: 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72  led an sqlite3_r
b080: 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63  esult_XXX() func
b090: 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72  tion.    ** to r
b0a0: 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54  eturn a value. T
b0b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
b0c0: 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72  l releases any r
b0d0: 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20  esources.    ** 
b0e0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
b0f0: 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20  such a value..  
b100: 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
b110: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
b120: 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f  ctx.s);.    goto
b130: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
b140: 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69  /* If any auxili
b150: 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f  ary data functio
b160: 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c  ns have been cal
b170: 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72  led by this user
b180: 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20   function,.  ** 
b190: 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c  immediately call
b1a0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20   the destructor 
b1b0: 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74  for any non-stat
b1c0: 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a  ic values..  */.
b1d0: 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46    if( ctx.pVdbeF
b1e0: 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  unc ){.    sqlit
b1f0: 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44  e3VdbeDeleteAuxD
b200: 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e  ata(ctx.pVdbeFun
b210: 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  c, pOp->p1);.   
b220: 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75   pOp->p4.pVdbeFu
b230: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
b240: 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74  nc;.    pOp->p4t
b250: 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e  ype = P4_VDBEFUN
b260: 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  C;.  }..  /* If 
b270: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
b280: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
b290: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
b2a0: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
b2b0: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
b2c0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
b2d0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
b2e0: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
b2f0: 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
b300: 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
b310: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
b320: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
b330: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
b340: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
b350: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
b360: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
b370: 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f  ing(&ctx.s, enco
b380: 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
b390: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
b3a0: 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28  , &ctx.s);.  if(
b3b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
b3c0: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
b3d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
b3e0: 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f  .  }.  REGISTER_
b3f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
b400: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
b410: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
b420: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b430: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64  * Opcode: BitAnd
b440: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b450: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
b460: 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65  -wise AND of the
b470: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
b480: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
b490: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
b4a0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b4b0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b4c0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b4d0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b4e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b4f0: 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20  de: BitOr P1 P2 
b500: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
b510: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
b520: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
b530: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
b540: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
b550: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b560: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b570: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b580: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b590: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b5a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b5b0: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
b5c0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
b5d0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
b5e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
b5f0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
b600: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
b610: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
b620: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
b630: 20 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20   regiser P1..** 
b640: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
b650: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b660: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b670: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b680: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b690: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
b6a0: 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20  hiftRight P1 P2 
b6b0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69  P3 * *.**.** Shi
b6c0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
b6d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b6e0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
b6f0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
b700: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
b710: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
b720: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
b730: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
b740: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b750: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b760: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b770: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b780: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
b790: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
b7a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b7b0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
b7c0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b7d0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b800: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
b810: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b820: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
b830: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b840: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
b850: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b860: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
b870: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
b880: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
b890: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
b8a0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61   out3 */.  i64 a
b8b0: 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20 70 49  ;.  i64 b;..  pI
b8c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
b8d0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
b8e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
b8f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
b900: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
b910: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
b920: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
b930: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
b940: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
b950: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
b960: 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c  k;.  }.  a = sql
b970: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b980: 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71  (pIn2);.  b = sq
b990: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
b9a0: 65 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63  e(pIn1);.  switc
b9b0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
b9c0: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69  {.    case OP_Bi
b9d0: 74 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20  tAnd:      a &= 
b9e0: 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  b;     break;.  
b9f0: 20 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a    case OP_BitOr:
ba00: 20 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20         a |= b;  
ba10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
ba20: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
ba30: 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62     a <<= b;    b
ba40: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
ba50: 74 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  t:  assert( pOp-
ba60: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66  >opcode==OP_Shif
ba70: 74 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20  tRight );.      
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba90: 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62     a >>= b;    b
baa0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  reak;.  }.  pOut
bab0: 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d  ->u.i = a;.  Mem
bac0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
bad0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
bae0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
baf0: 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32  e: AddImm  P1 P2
bb00: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64   * * *.** .** Ad
bb10: 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50  d the constant P
bb20: 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  2 to the value i
bb30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
bb40: 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
bb50: 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65  always an intege
bb60: 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63  r..**.** To forc
bb70: 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74  e any register t
bb80: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c  o be an integer,
bb90: 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a   just add 0..*/.
bba0: 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20  case OP_AddImm: 
bbb0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
bbc0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
bbd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
bbe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
bbf0: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
bc00: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
bc10: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61   pOp->p2;.  brea
bc20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
bc30: 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32   MustBeInt P1 P2
bc40: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f   * * *.** .** Fo
bc50: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
bc60: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
bc70: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
bc80: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
bc90: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20  in P1 is not an 
bca0: 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e  integer and cann
bcb0: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
bcc0: 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
bcd0: 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20  ** without data 
bce0: 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20  loss, then jump 
bcf0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
bd00: 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a  2, or if P2==0.*
bd10: 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  * raise an SQLIT
bd20: 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70  E_MISMATCH excep
bd30: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
bd40: 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20  _MustBeInt: {   
bd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
bd60: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
bd70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bd80: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
bd90: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
bda0: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
bdb0: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49  ding);.  if( (pI
bdc0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
bdd0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  Int)==0 ){.    i
bde0: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
bdf0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
be00: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
be10: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
be20: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
be30: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20  }else{.      pc 
be40: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
be50: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
be60: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
be70: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
be80: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
be90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bea0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
beb0: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
bec0: 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a  ealAffinity P1 *
bed0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
bee0: 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64  register P1 hold
bef0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e  s an integer con
bf00: 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61  vert it to a rea
bf10: 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54  l value..**.** T
bf20: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
bf30: 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  ed when extracti
bf40: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ng information f
bf50: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61  rom a column tha
bf60: 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66  t.** has REAL af
bf70: 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f  finity.  Such co
bf80: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20  lumn values may 
bf90: 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20  still be stored 
bfa0: 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20  as.** integers, 
bfb0: 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69  for space effici
bfc0: 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20  ency, but after 
bfd0: 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61  extraction we wa
bfe0: 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61  nt them.** to ha
bff0: 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76  ve only a real v
c000: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
c010: 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b  _RealAffinity: {
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
c040: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c050: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c060: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
c070: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c080: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
c090: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c0a0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
c0b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c0c0: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
c0d0: 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20  ToText P1 * * * 
c0e0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c0f0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c100: 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78  ter P1 to be tex
c110: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c120: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
c130: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
c140: 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a  tring using the.
c150: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c160: 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62   printf().  Blob
c170: 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68   values are unch
c180: 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65  anged and.** are
c190: 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70   afterwards simp
c1a0: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
c1b0: 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20  s text..**.** A 
c1c0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c1d0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c1e0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c1f0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c200: 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20  case OP_ToText: 
c210: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c220: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c230: 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f  _TO_TEXT, in1 */
c240: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c250: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c260: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c270: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
c280: 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74    assert( MEM_St
c290: 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29  r==(MEM_Blob>>3)
c2a0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
c2b0: 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s |= (pIn1->flag
c2c0: 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a  s&MEM_Blob)>>3;.
c2d0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
c2e0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
c2f0: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
c300: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
c310: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73  lob(pIn1);.  ass
c320: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
c330: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
c340: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
c350: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
c360: 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  &= ~(MEM_Int|MEM
c370: 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d  _Real|MEM_Blob|M
c380: 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41  EM_Zero);.  UPDA
c390: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c3a0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
c3b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
c3c0: 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Blob P1 * * * *.
c3d0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
c3e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c3f0: 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f  r P1 to be a BLO
c400: 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  B..** If the val
c410: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
c420: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
c430: 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20  tring first..** 
c440: 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70  Strings are simp
c450: 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64  ly reinterpreted
c460: 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e   as blobs with n
c470: 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74  o change.** to t
c480: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
c490: 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ta..**.** A NULL
c4a0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c4b0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c4c0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c4d0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c4e0: 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20   OP_ToBlob: {   
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c500: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c510: 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  BLOB, in1 */.  p
c520: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c530: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
c540: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
c550: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66  ll ) break;.  if
c560: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c570: 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
c580: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
c590: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
c5a0: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
c5b0: 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ng);.    assert(
c5c0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c5d0: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
c5e0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
c5f0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c600: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
c610: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
c620: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
c630: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45  MEM_TypeMask&~ME
c640: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55  M_Blob);.  }.  U
c650: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
c660: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
c670: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c680: 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20   ToNumeric P1 * 
c690: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c6a0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c6b0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c6c0: 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72   numeric (either
c6d0: 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f   an.** integer o
c6e0: 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  r a floating-poi
c6f0: 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49  nt number.).** I
c700: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
c710: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
c720: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
c730: 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a  o an using the.*
c740: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
c750: 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29  atoi() or atof()
c760: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
c770: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
c780: 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62  on .** is possib
c790: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c7a0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c7b0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c7c0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c7d0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c7e0: 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b   OP_ToNumeric: {
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c810: 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20  TO_NUMERIC, in1 
c820: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c830: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
c840: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c850: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49   (MEM_Null|MEM_I
c860: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
c870: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c880: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
c890: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c8a0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
c8b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
c8c0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  */../* Opcode: T
c8d0: 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  oInt P1 * * * *.
c8e0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
c8f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c900: 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67  r P1 be an integ
c910: 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76  er.  If.** The v
c920: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
c930: 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c  y a real number,
c940: 20 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69   drop its fracti
c950: 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66  onal part..** If
c960: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c970: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c980: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c990: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
c9a0: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
c9b0: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
c9c0: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
c9d0: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
c9e0: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
c9f0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
ca00: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
ca10: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
ca20: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
ca30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49  ..*/.case OP_ToI
ca40: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
ca50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ca60: 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31  s TK_TO_INT, in1
ca70: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
ca80: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
ca90: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
caa0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
cab0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
cac0: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
cad0: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
cae0: 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e  k;.}..#if !defin
caf0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
cb00: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
cb10: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
cb20: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20  ATING_POINT)./* 
cb30: 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50  Opcode: ToReal P
cb40: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
cb50: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
cb60: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
cb70: 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20  o be a floating 
cb80: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a  point number..**
cb90: 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73   If The value is
cba0: 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e   currently an in
cbb0: 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  teger, convert i
cbc0: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
cbd0: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
cbe0: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
cbf0: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
cc00: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
cc10: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
cc20: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
cc30: 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  0.0 if no such c
cc40: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73  onversion is pos
cc50: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
cc60: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
cc70: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
cc80: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
cc90: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
cca0: 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b  ase OP_ToReal: {
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ccd0: 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a  TO_REAL, in1 */.
cce0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ccf0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
cd00: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
cd10: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
cd20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
cd30: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
cd40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
cd50: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
cd60: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  (SQLITE_OMIT_CAS
cd70: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
cd80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
cd90: 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f  ING_POINT) */../
cda0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
cdb0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
cdc0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
cdd0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
cde0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
cdf0: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
ce00: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
ce10: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
ce20: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ce30: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
ce40: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
ce50: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
ce60: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
ce70: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
ce80: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
ce90: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
cea0: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
ceb0: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
cec0: 74 68 72 75 20 69 66 20 65 69 74 68 65 72 20 6f  thru if either o
ced0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
cee0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
cef0: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
cf00: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
cf10: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
cf20: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
cf30: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
cf40: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
cf50: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
cf60: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
cf70: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
cf80: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
cf90: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
cfa0: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
cfb0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
cfc0: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
cfd0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
cfe0: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
cff0: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
d000: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
d010: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
d020: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
d030: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
d040: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
d050: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
d060: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
d070: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
d080: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
d090: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
d0a0: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
d0b0: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
d0c0: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
d0d0: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
d0e0: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
d0f0: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
d100: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
d110: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
d120: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
d130: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
d140: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
d150: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
d160: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
d170: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
d180: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
d190: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
d1a0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
d1b0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
d1c0: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
d1d0: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
d1e0: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
d1f0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
d200: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
d210: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
d220: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
d230: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
d240: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
d250: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
d260: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
d270: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
d280: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
d290: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
d2a0: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
d2b0: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
d2c0: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
d2d0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
d2e0: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
d2f0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a  than blobs..**.*
d300: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
d310: 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50  STOREP2 bit of P
d320: 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64  5 is set, then d
d330: 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73  o not jump.  Ins
d340: 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61  tead,.** store a
d350: 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20   boolean result 
d360: 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c  (either 0, or 1,
d370: 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67   or NULL) in reg
d380: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20  ister P2..*/./* 
d390: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
d3a0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d3b0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d3c0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d3d0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d3e0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d3f0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
d400: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
d410: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
d420: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
d430: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d440: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
d450: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
d460: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
d470: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
d480: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d490: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
d4a0: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
d4b0: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
d4c0: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
d4d0: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
d4e0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
d4f0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
d500: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
d510: 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74  s false.  If eit
d520: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d530: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d540: 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  ult is true..** 
d550: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
d560: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 74  nd is NULL the t
d570: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
d580: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
d590: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
d5a0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
d5b0: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
d5c0: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
d5d0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
d5e0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
d5f0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
d600: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
d610: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
d620: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
d630: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
d640: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
d650: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
d660: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
d670: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d680: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d690: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
d6a0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
d6b0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
d6c0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
d6d0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
d6e0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
d6f0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
d700: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
d710: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
d720: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
d730: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
d740: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
d750: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
d760: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
d770: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
d780: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
d790: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d7a0: 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65 73 75  ULL the the resu
d7b0: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
d7c0: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
d7d0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
d7e0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
d7f0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
d800: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
d810: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
d820: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d830: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d840: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d850: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d860: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d870: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
d880: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
d890: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
d8a0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
d8b0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
d8c0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d8d0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
d8e0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d8f0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
d900: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d910: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
d920: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
d930: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
d940: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
d950: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
d960: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
d970: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
d980: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
d990: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
d9a0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
d9b0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
d9c0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
d9d0: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
d9e0: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
d9f0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
da00: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
da10: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
da20: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
da30: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
da40: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
da50: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
da60: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
da70: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
da80: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
da90: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
daa0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
dab0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
dac0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
dad0: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
dae0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
daf0: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
db00: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
db10: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
db20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
db30: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
db40: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
db50: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
db60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
db70: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
db80: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dba0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
dbb0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
dbc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dbe0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
dbf0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
dc00: 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
dc10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dc20: 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
dc30: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
dc40: 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
dc50: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
dc60: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
dc70: 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
dc80: 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
dc90: 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
dca0: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
dcb0: 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
dcc0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
dcd0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
dce0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
dcf0: 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
dd00: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
dd10: 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
dd20: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
dd30: 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
dd40: 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
dd50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
dd60: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
dd70: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
dd80: 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
dd90: 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
dda0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
ddb0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
ddc0: 6e 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d 5f 4e  n3->flags)&MEM_N
ddd0: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
dde0: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
ddf0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
de00: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
de10: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
de20: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
de30: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
de40: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
de50: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
de60: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
de70: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
de80: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
de90: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
dea0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
deb0: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
dec0: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
ded0: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
dee0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
def0: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
df00: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
df10: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
df20: 0a 20 20 20 20 20 20 72 65 73 20 3d 20 28 70 49  .      res = (pI
df30: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33  n1->flags & pIn3
df40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
df50: 6c 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73  ll)==0;.    }els
df60: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
df70: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
df80: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
df90: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
dfa0: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
dfb0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
dfc0: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
dfd0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
dfe0: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
dff0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e000: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
e010: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
e020: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
e030: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
e040: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
e050: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
e060: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
e070: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
e080: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
e090: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
e0a0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
e0b0: 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
e0c0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
e0d0: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
e0e0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
e0f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
e100: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
e110: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
e120: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e130: 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
e140: 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
e150: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
e160: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
e170: 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
e180: 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
e190: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
e1a0: 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  1, affinity, enc
e1b0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70  oding);.      ap
e1c0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
e1d0: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
e1e0: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28  ding);.      if(
e1f0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
e200: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
e210: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
e220: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
e230: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
e240: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
e250: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
e260: 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70  b(pIn1);.    Exp
e270: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
e280: 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
e290: 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
e2a0: 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
e2b0: 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
e2c0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
e2d0: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
e2e0: 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
e2f0: 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
e300: 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
e310: 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
e320: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e330: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
e340: 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
e350: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
e360: 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
e370: 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
e380: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
e390: 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
e3a0: 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
e3b0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
e3c0: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
e3d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
e3e0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
e3f0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e400: 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
e410: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
e420: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e430: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
e440: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
e450: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
e460: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
e470: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
e480: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
e490: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
e4a0: 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
e4b0: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
e4c0: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
e4d0: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
e4e0: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
e4f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn1->flags = (p
e500: 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In1->flags&~MEM_
e510: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
e520: 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs1&MEM_TypeMask
e530: 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
e540: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26   = (pIn3->flags&
e550: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
e560: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70   (flags3&MEM_Typ
e570: 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b  eMask);.  break;
e580: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
e590: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
e5a0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
e5b0: 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
e5c0: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
e5d0: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
e5e0: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
e5f0: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
e600: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
e610: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
e620: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
e630: 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d  the next OP_Perm
e640: 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70  utation, OP_Comp
e650: 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c  are,.** OP_Halt,
e660: 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77   or OP_ResultRow
e670: 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  .  Typically the
e680: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
e690: 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20  should occur.** 
e6a0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
e6b0: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
e6c0: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
e6d0: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
e6e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
e6f0: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
e700: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
e710: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
e720: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
e730: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
e740: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
e750: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
e760: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65   *.**.** Compare
e770: 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72   to vectors of r
e780: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
e790: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
e7a0: 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f  ) (all this.** o
e7b0: 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  ne "A") and in r
e7c0: 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
e7d0: 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
e7e0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
e7f0: 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
e800: 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
e810: 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
e820: 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  struct..**.** P4
e830: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
e840: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
e850: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
e860: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
e870: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
e880: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
e890: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
e8a0: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
e8b0: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
e8c0: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
e8d0: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
e8e0: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
e8f0: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
e900: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
e910: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
e920: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
e930: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
e940: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
e950: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
e960: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
e970: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
e980: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
e990: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
e9a0: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
e9b0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
e9c0: 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
e9d0: 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
e9e0: 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
e9f0: 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
ea00: 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
ea10: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
ea20: 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
ea30: 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
ea40: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
ea50: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
ea60: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
ea70: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
ea80: 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
ea90: 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
eaa0: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
eab0: 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
eac0: 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
ead0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
eae0: 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c  pOp->p2;.#if SQL
eaf0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
eb00: 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20  aPermute ){.    
eb10: 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20  int k, mx = 0;. 
eb20: 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b     for(k=0; k<n;
eb30: 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75   k++) if( aPermu
eb40: 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20  te[k]>mx ) mx = 
eb50: 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20  aPermute[k];.   
eb60: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
eb70: 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b   p1+mx<=p->nMem+
eb80: 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
eb90: 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
eba0: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d  p->nMem+1 );.  }
ebb0: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
ebc0: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
ebd0: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20  p->nMem+1 );.   
ebe0: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
ebf0: 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31   p2+n<=p->nMem+1
ec00: 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f   );.  }.#endif /
ec10: 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
ec20: 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  /.  for(i=0; i<n
ec30: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20  ; i++){.    idx 
ec40: 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65  = aPermute ? aPe
ec50: 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20  rmute[i] : i;.  
ec60: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
ec70: 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
ec80: 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
ec90: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
eca0: 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
ecb0: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
ecc0: 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
ecd0: 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
ece0: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
ecf0: 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
ed00: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
ed10: 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
ed20: 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
ed30: 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
ed40: 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
ed50: 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
ed60: 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
ed70: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
ed80: 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
ed90: 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
eda0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
edb0: 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
edc0: 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
edd0: 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
ede0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
edf0: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
ee00: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
ee10: 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
ee20: 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
ee30: 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
ee40: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
ee50: 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
ee60: 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
ee70: 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
ee80: 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
ee90: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
eea0: 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
eeb0: 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
eec0: 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
eed0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
eee0: 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
eef0: 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
ef00: 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20  = pOp->p1 - 1;. 
ef10: 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
ef20: 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  are==0 ){.    pc
ef30: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
ef40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20    }else{.    pc 
ef50: 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20  = pOp->p3 - 1;. 
ef60: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
ef70: 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31  * Opcode: And P1
ef80: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
ef90: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
efa0: 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
efb0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
efc0: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
efd0: 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
efe0: 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
eff0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
f000: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
f010: 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
f020: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
f030: 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
f040: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
f050: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
f060: 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
f070: 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
f080: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
f090: 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
f0a0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
f0b0: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
f0c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
f0d0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
f0e0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
f0f0: 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
f100: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
f110: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
f120: 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
f130: 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
f140: 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
f150: 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
f160: 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
f170: 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
f180: 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
f190: 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
f1a0: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
f1b0: 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
f1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f1d0: 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
f1e0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
f1f0: 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
f200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f210: 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
f220: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
f230: 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
f240: 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
f250: 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
f260: 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
f270: 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
f280: 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
f290: 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
f2a0: 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
f2b0: 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
f2c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
f2d0: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
f2e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f2f0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
f300: 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
f310: 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
f320: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
f330: 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
f340: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f350: 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
f360: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
f370: 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
f380: 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
f390: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
f3a0: 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
f3b0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
f3c0: 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
f3d0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
f3e0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
f3f0: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
f400: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
f410: 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
f420: 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
f430: 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
f440: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f450: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
f460: 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
f470: 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
f480: 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
f490: 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
f4a0: 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
f4b0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f4c0: 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
f4d0: 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
f4e0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
f4f0: 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
f500: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
f510: 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
f520: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f530: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
f540: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f550: 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
f560: 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  *.**.** Interpre
f570: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
f580: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20  egister P1 as a 
f590: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20  boolean value.  
f5a0: 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f  Store the.** boo
f5b0: 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  lean complement 
f5c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
f5d0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
f5e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
f5f0: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61  .** NULL, then a
f600: 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20   NULL is stored 
f610: 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
f620: 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  P_Not: {        
f630: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f640: 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20  as TK_NOT, in1, 
f650: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
f660: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f670: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
f680: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
f690: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f6a0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
f6b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
f6c0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
f6d0: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
f6e0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
f6f0: 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62  Out, !sqlite3Vdb
f700: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
f710: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f720: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
f730: 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
f740: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
f750: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f760: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
f770: 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
f780: 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
f790: 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
f7a0: 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
f7b0: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
f7c0: 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
f7d0: 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
f7e0: 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
f7f0: 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
f800: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f810: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
f820: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
f830: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
f840: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
f850: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
f860: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f870: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f880: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f890: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
f8a0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
f8b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
f8c0: 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69  nt64(pOut, ~sqli
f8d0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
f8e0: 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  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 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
f910: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
f920: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
f930: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f940: 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
f950: 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e  lue is.** is con
f960: 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
f970: 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
f980: 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
f990: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
f9a0: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
f9b0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
f9c0: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
f9d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
f9e0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
f9f0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
fa00: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
fa10: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
fa20: 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  lse.  The value 
fa30: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
fa40: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 68  red true if it h
fa50: 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
fa60: 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
fa70: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
fa80: 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
fa90: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
faa0: 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a   P3 is true..*/.
fab0: 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
fad0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
fae0: 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
faf0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
fb00: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
fb10: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
fb20: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
fb30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
fb40: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20  M_Null ){.    c 
fb50: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c  = pOp->p3;.  }el
fb60: 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  se{.#ifdef SQLIT
fb70: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
fb80: 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71  POINT.    c = sq
fb90: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
fba0: 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73  e(pIn1)!=0;.#els
fbb0: 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
fbc0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
fbd0: 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
fbe0: 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
fbf0: 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
fc00: 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
fc10: 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
fc20: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
fc30: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fc40: 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
fc50: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
fc60: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
fc70: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
fc80: 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e  ster P1 is NULL.
fc90: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75  .*/.case OP_IsNu
fca0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
fcb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49   /* same as TK_I
fcc0: 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  SNULL, jump, in1
fcd0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
fce0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
fcf0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
fd00: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
fd10: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
fd20: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
fd30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
fd40: 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
fd50: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
fd60: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
fd70: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
fd80: 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
fd90: 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
fda0: 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
fdb0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fdc0: 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
fdd0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
fde0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
fdf0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
fe00: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
fe10: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
fe20: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
fe30: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
fe40: 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
fe50: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
fe60: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
fe70: 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
fe80: 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
fe90: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
fea0: 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
feb0: 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
fec0: 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
fed0: 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
fee0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
fef0: 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
ff00: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
ff10: 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
ff20: 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
ff30: 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
ff40: 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
ff50: 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
ff60: 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
ff70: 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
ff80: 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
ff90: 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
ffa0: 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
ffb0: 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
ffc0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
ffd0: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
ffe0: 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
fff0: 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
10000 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
10010 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
10020 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
10030 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
10040 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
10050 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
10060 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
10070 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
10080 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
10090 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
100a0 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
100b0 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
100c0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
100d0 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
100e0 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
100f0 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
10100 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
10110 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
10120 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
10130 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
10140 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
10150 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
10160 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
10170 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
10180 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 63 61 73 65  bit set..*/.case
10190 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20   OP_Column: {.  
101a0 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  u32 payloadSize;
101b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
101c0 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
101d0 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79  ord */.  i64 pay
101e0 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e  loadSize64; /* N
101f0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
10200 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
10210 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
10220 20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65       /* P1 value
10230 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a   of the opcode *
10240 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
10250 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
10260 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
10270 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
10280 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
10290 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
102a0 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20  /.  char *zRec; 
102b0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
102c0 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65  r to complete re
102d0 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42  cord-data */.  B
102e0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
102f0 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
10300 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
10310 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a  aType;        /*
10320 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20   aType[i] holds 
10330 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
10340 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c   of the i-th col
10350 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  umn */.  u32 *aO
10360 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
10370 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
10380 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
10390 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
103a0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  lumn */.  int nF
103b0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
103c0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
103d0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
103e0 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
103f0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
10400 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
10410 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
10420 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
10430 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
10440 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
10450 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  er */.  char *zD
10460 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61  ata;       /* Pa
10470 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
10480 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
10490 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
104a0 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
104b0 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
104c0 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
104d0 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
104e0 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
104f0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
10500 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
10510 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20    u8 *zIdx;     
10520 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
10530 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  to header */.  u
10540 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20  8 *zEndHdr;     
10550 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
10560 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
10570 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
10580 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
10590 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
105a0 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
105b0 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20   u32 szField;   
105c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
105d0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
105e0 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64  ntent of a field
105f0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b   */.  int szHdr;
10600 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
10610 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73   of the header s
10620 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61  ize field at sta
10630 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a  rt of record */.
10640 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20    int avail;    
10650 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10660 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
10670 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 4d  able data */.  M
10680 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
10690 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
106a0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
106b0 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  */...  p1 = pOp-
106c0 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
106d0 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20  >p2;.  pC = 0;. 
106e0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
106f0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
10700 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d  .  assert( p1<p-
10710 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
10720 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
10730 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
10740 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
10750 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
10760 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
10770 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
10780 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a  l);.  zRec = 0;.
10790 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b  .  /* This block
107a0 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62   sets the variab
107b0 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 74  le payloadSize t
107c0 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20 6e  o be the total n
107d0 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79  umber of.  ** by
107e0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
107f0 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65  d..  **.  ** zRe
10800 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74  c is set to be t
10810 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74  he complete text
10820 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   of the record i
10830 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
10840 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70  e..  ** The comp
10850 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74  lete record text
10860 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69 6c   is always avail
10870 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f 2d  able for pseudo-
10880 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74  tables.  ** If t
10890 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f  he record is sto
108a0 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72 2c  red in a cursor,
108b0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65   the complete re
108c0 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d  cord text.  ** m
108d0 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62 6c  ight be availabl
108e0 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61 52  e in the  pC->aR
108f0 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69 74  ow cache.  Or it
10900 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20   might not be.. 
10910 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 20   ** If the data 
10920 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20  is unavailable, 
10930 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20   zRec is set to 
10940 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  NULL..  **.  ** 
10950 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20  We also compute 
10960 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
10970 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 63  lumns in the rec
10980 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f 72  ord.  For cursor
10990 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62  s,.  ** the numb
109a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73  er of columns is
109b0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 56   stored in the V
109c0 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64  dbeCursor.nField
109d0 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
109e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
109f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
10a00 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  !=0 );.#ifndef S
10a10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
10a20 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
10a30 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
10a40 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20  r==0 );.#endif. 
10a50 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
10a60 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
10a70 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54  r!=0 ){.    /* T
10a80 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f  he record is sto
10a90 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20  red in a B-Tree 
10aa0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
10ab0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
10ac0 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
10ad0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
10ae0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
10af0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
10b00 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c  ow ){.      payl
10b10 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20  oadSize = 0;.   
10b20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63   }else if( pC->c
10b30 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
10b40 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20  acheCtr ){.     
10b50 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
10b60 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
10b70 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68        zRec = (ch
10b80 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  ar*)pC->aRow;.  
10b90 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
10ba0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
10bb0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
10bc0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
10bd0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
10be0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
10bf0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
10c00 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
10c10 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  4);.      assert
10c20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
10c30 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63  );   /* True bec
10c40 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
10c50 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
10c60 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71  e */.      /* sq
10c70 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43  lite3BtreeParseC
10c80 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65  ellPtr() uses ge
10c90 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65  tVarint32() to e
10ca0 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20  xtract the.     
10cb0 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65   ** payload size
10cc0 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73  , so it is impos
10cd0 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61  sible for payloa
10ce0 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20  dSize64 to be.  
10cf0 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68      ** larger th
10d00 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20  an 32 bits. */. 
10d10 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61       assert( (pa
10d20 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51  yloadSize64 & SQ
10d30 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28  LITE_MAX_U32)==(
10d40 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u64)payloadSize6
10d50 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f  4 );.      paylo
10d60 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61  adSize = (u32)pa
10d70 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20  yloadSize64;.   
10d80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
10d90 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
10da0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
10db0 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
10dc0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
10dd0 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
10de0 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a   &payloadSize);.
10df0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
10e00 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
10e10 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63   /* DataSize() c
10e20 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
10e30 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
10e40 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
10e50 65 67 3e 30 20 29 7b 0a 20 20 20 20 70 52 65 67  eg>0 ){.    pReg
10e60 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65   = &aMem[pC->pse
10e70 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20  udoTableReg];.  
10e80 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
10e90 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
10ea0 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f 61 64 53   );.    payloadS
10eb0 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ize = pReg->n;. 
10ec0 20 20 20 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e     zRec = pReg->
10ed0 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  z;.    pC->cache
10ee0 53 74 61 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70  Status = (pOp->p
10ef0 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  5&OPFLAG_CLEARCA
10f00 43 48 45 29 20 3f 20 43 41 43 48 45 5f 53 54 41  CHE) ? CACHE_STA
10f10 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65 43 74 72  LE : p->cacheCtr
10f20 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61  ;.    assert( pa
10f30 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20  yloadSize==0 || 
10f40 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c  zRec!=0 );.  }el
10f50 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69  se{.    /* Consi
10f60 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f 20 62  der the row to b
10f70 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61  e NULL */.    pa
10f80 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20  yloadSize = 0;. 
10f90 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c   }..  /* If payl
10fa0 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68  oadSize is 0, th
10fb0 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20  en just store a 
10fc0 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61  NULL */.  if( pa
10fd0 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a  yloadSize==0 ){.
10fe0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73      assert( pDes
10ff0 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  t->flags&MEM_Nul
11000 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70  l );.    goto op
11010 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d  _column_out;.  }
11020 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
11030 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
11040 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b  IT_LENGTH]>=0 );
11050 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69  .  if( payloadSi
11060 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
11070 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
11080 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
11090 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
110a0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   }..  nField = p
110b0 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73  C->nField;.  ass
110c0 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29  ert( p2<nField )
110d0 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64  ;..  /* Read and
110e0 20 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65   parse the table
110f0 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20   header.  Store 
11100 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
11110 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e  he parse.  ** in
11120 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  to the record he
11130 61 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64  ader cache field
11140 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e  s of the cursor.
11150 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20  .  */.  aType = 
11160 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28  pC->aType;.  if(
11170 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
11180 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
11190 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70  .    aOffset = p
111a0 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65  C->aOffset;.  }e
111b0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
111c0 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61 69  aType);.    avai
111d0 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61  l = 0;.    pC->a
111e0 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  Offset = aOffset
111f0 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64   = &aType[nField
11200 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  ];.    pC->paylo
11210 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64  adSize = payload
11220 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61  Size;.    pC->ca
11230 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
11240 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a  acheCtr;..    /*
11250 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20   Figure out how 
11260 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69  many bytes are i
11270 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  n the header */.
11280 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a      if( zRec ){.
11290 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52        zData = zR
112a0 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ec;.    }else{. 
112b0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49       if( pC->isI
112c0 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20  ndex ){.        
112d0 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
112e0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
112f0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
11300 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  l);.      }else{
11310 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
11320 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42   (char*)sqlite3B
11330 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
11340 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
11350 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49      }.      /* I
11360 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74  f KeyFetch()/Dat
11370 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64  aFetch() managed
11380 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69   to get the enti
11390 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20  re payload,.    
113a0 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61    ** save the pa
113b0 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d  yload in the pC-
113c0 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68  >aRow cache.  Th
113d0 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20  at will save us 
113e0 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61  from.      ** ha
113f0 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64  ving to make add
11400 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f  itional calls to
11410 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65   fetch the conte
11420 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20  nt portion of.  
11430 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
11440 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
11450 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3e    assert( avail>
11460 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
11470 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28  payloadSize <= (
11480 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20  u32)avail ){.   
11490 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74       zRec = zDat
114a0 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  a;.        pC->a
114b0 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61  Row = (u8*)zData
114c0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
114d0 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
114e0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
114f0 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f   }.    /* The fo
11500 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69  llowing assert i
11510 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61  s true in all ca
11520 73 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a  ses accept when.
11530 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62      ** the datab
11540 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65  ase file has bee
11550 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65  n corrupted exte
11560 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20  rnally..    **  
11570 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d    assert( zRec!=
11580 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c  0 || avail>=payl
11590 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c  oadSize || avail
115a0 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a  >=9 ); */.    sz
115b0 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74 33  Hdr = getVarint3
115c0 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66  2((u8*)zData, of
115d0 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d  fset);..    /* M
115e0 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
115f0 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
11600 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
11610 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
11620 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20  .    ** Do this 
11630 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
11640 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
11650 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
11660 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65  **.    ** Type e
11670 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
11680 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
11690 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
116a0 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
116b0 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20  ** types use so 
116c0 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20  much data space 
116d0 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f  that there can o
116e0 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20  nly be 4096 and 
116f0 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65  32 of.    ** the
11700 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  m, respectively.
11710 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d    So the maximum
11720 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72   header length r
11730 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20  esults from a.  
11740 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65    ** 3-byte type
11750 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
11760 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36   maximum of 3276
11770 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74  8 columns plus t
11780 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72  hree.    ** extr
11790 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20  a bytes for the 
117a0 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74  header length it
117b0 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b  self.  32768*3 +
117c0 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20   3 = 98307..    
117d0 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65  */.    if( offse
117e0 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20 20  t > 98307 ){.   
117f0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
11800 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
11810 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
11820 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  n_out;.    }..  
11830 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20    /* Compute in 
11840 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  len the number o
11850 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
11860 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64 20  we need to read 
11870 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20  in order.    ** 
11880 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74 79  to get nField ty
11890 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66 73  pe values.  offs
118a0 65 74 20 69 73 20 61 6e 20 75 70 70 65 72 20 62  et is an upper b
118b0 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20 42  ound on this.  B
118c0 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64  ut.    ** nField
118d0 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69 66   might be signif
118e0 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68 61  icantly less tha
118f0 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62 65  n the true numbe
11900 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20  r of columns.   
11910 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c 65   ** in the table
11920 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63 61  , and in that ca
11930 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d  se, 5*nField+3 m
11940 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72 20  ight be smaller 
11950 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20  than offset..   
11960 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20 6d   ** We want to m
11970 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f  inimize len in o
11980 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  rder to limit th
11990 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65  e size of the me
119a0 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f  mory.    ** allo
119b0 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c  cation, especial
119c0 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70 74 20  ly if a corrupt 
119d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61  database file ha
119e0 73 20 63 61 75 73 65 64 20 6f 66 66 73 65 74 0a  s caused offset.
119f0 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65      ** to be ove
11a00 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20 69  rsized. Offset i
11a10 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38 33  s limited to 983
11a20 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20 39  07 above.  But 9
11a30 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20 2a  8307 might.    *
11a40 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20 52  * still exceed R
11a50 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c  obson memory all
11a60 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f  ocation limits o
11a70 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61  n some configura
11a80 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e  tions..    ** On
11a90 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 63 61   systems that ca
11aa0 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c 61  nnot tolerate la
11ab0 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
11ac0 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35  ations, nField*5
11ad0 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c  +3.    ** will l
11ae0 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73 6d  ikely be much sm
11af0 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69 65  aller since nFie
11b00 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62  ld will likely b
11b10 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20 20  e less than.    
11b20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54 68  ** 20 or so.  Th
11b30 69 73 20 69 6e 73 75 72 65 73 20 74 68 61 74 20  is insures that 
11b40 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c  Robson memory al
11b50 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20  location limits 
11b60 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65  are.    ** not e
11b70 78 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f 72  xceeded even for
11b80 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
11b90 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a  e files..    */.
11ba0 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64      len = nField
11bb0 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28 20  *5 + 3;.    if( 
11bc0 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73 65  len > (int)offse
11bd0 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f  t ) len = (int)o
11be0 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54  ffset;..    /* T
11bf0 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72  he KeyFetch() or
11c00 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f   DataFetch() abo
11c10 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20  ve are fast and 
11c20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74  will get the ent
11c30 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ire.    ** recor
11c40 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74  d header in most
11c50 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65   cases.  But the
11c60 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67  y will fail to g
11c70 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a  et the complete.
11c80 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65      ** record he
11c90 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f  ader if the reco
11ca0 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e  rd header does n
11cb0 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67  ot fit on a sing
11cc0 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69  le page.    ** i
11cd0 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57  n the B-Tree.  W
11ce0 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73  hen that happens
11cf0 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62  , use sqlite3Vdb
11d00 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
11d10 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72  to.    ** acquir
11d20 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  e the complete h
11d30 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20  eader text..    
11d40 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63  */.    if( !zRec
11d50 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b   && avail<len ){
11d60 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  .      sMem.flag
11d70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65  s = 0;.      sMe
11d80 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20  m.db = 0;.      
11d90 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
11da0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
11db0 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e  sr, 0, len, pC->
11dc0 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
11dd0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
11de0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11df0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11e00 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
11e10 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
11e20 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20  em.z;.    }.    
11e30 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29  zEndHdr = (u8 *)
11e40 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20  &zData[len];.   
11e50 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a   zIdx = (u8 *)&z
11e60 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20  Data[szHdr];..  
11e70 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65    /* Scan the he
11e80 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74 20  ader and use it 
11e90 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61  to fill in the a
11ea0 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73  Type[] and aOffs
11eb0 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61  et[].    ** arra
11ec0 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69  ys.  aType[i] wi
11ed0 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74  ll contain the t
11ee0 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ype integer for 
11ef0 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20  the i-th.    ** 
11f00 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73  column and aOffs
11f10 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  et[i] will conta
11f20 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  in the offset fr
11f30 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
11f40 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
11f50 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61  ecord to the sta
11f60 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 66  rt of the data f
11f70 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  or the i-th colu
11f80 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f  mn.    */.    fo
11f90 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b  r(i=0; i<nField;
11fa0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
11fb0 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b   zIdx<zEndHdr ){
11fc0 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
11fd0 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20  [i] = offset;.  
11fe0 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65        zIdx += ge
11ff0 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
12000 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
12010 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c     szField = sql
12020 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12030 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b  peLen(aType[i]);
12040 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20  .        offset 
12050 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20  += szField;.    
12060 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73      if( offset<s
12070 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72  zField ){  /* Tr
12080 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65  ue if offset ove
12090 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20  rflows */.      
120a0 20 20 20 20 7a 49 64 78 20 3d 20 26 7a 45 6e 64      zIdx = &zEnd
120b0 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63  Hdr[1];  /* Forc
120c0 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  es SQLITE_CORRUP
120d0 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a  T return below *
120e0 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  /.          brea
120f0 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
12100 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12110 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73    /* If i is les
12120 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74  s that nField, t
12130 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65  hen there are le
12140 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69  ss fields in thi
12150 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63  s.        ** rec
12160 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43  ord than SetNumC
12170 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64  olumns indicated
12180 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d   there are colum
12190 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  ns in the.      
121a0 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20    ** table. Set 
121b0 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61  the offset for a
121c0 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73  ny extra columns
121d0 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a   not present in.
121e0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72          ** the r
121f0 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73  ecord to 0. This
12200 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f   tells code belo
12210 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c  w to store a NUL
12220 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73  L.        ** ins
12230 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c  tead of deserial
12240 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72  izing a value fr
12250 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  om the record.. 
12260 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
12270 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30    aOffset[i] = 0
12280 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
12290 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
122a0 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
122b0 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73  ;.    sMem.flags
122c0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20   = MEM_Null;..  
122d0 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20    /* If we have 
122e0 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72  read more header
122f0 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63   data than was c
12300 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
12310 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f  header,.    ** o
12320 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
12330 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
12340 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73  ppears to be pas
12350 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
12360 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20  .    ** record, 
12370 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
12380 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
12390 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65  appears to be be
123a0 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20  fore the end.   
123b0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
123c0 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c  d (when all fiel
123d0 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65  ds present), the
123e0 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61  n we must be dea
123f0 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74  ling .    ** wit
12400 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  h a corrupt data
12410 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  base..    */.   
12420 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e   if( (zIdx > zEn
12430 64 48 64 72 29 20 7c 7c 20 28 6f 66 66 73 65 74  dHdr) || (offset
12440 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a   > payloadSize).
12450 20 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 49 64           || (zId
12460 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66  x==zEndHdr && of
12470 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a  fset!=payloadSiz
12480 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  e) ){.      rc =
12490 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
124a0 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
124b0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
124c0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
124d0 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  Get the column i
124e0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61  nformation. If a
124f0 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f  Offset[p2] is no
12500 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20  n-zero, then .  
12510 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74  ** deserialize t
12520 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68  he value from th
12530 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66  e record. If aOf
12540 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f  fset[p2] is zero
12550 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72  ,.  ** then ther
12560 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68  e are not enough
12570 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
12580 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79  ecord to satisfy
12590 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73   the.  ** reques
125a0 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  t.  In this case
125b0 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  , set the value 
125c0 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66  NULL or to P4 if
125d0 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f   P4 is.  ** a po
125e0 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f  inter to a Mem o
125f0 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66  bject..  */.  if
12600 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b  ( aOffset[p2] ){
12610 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
12620 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
12630 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20    if( zRec ){.  
12640 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12650 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
12660 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
12670 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12680 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63  lGet((u8 *)&zRec
12690 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61  [aOffset[p2]], a
126a0 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
126b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
126c0 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33     len = sqlite3
126d0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
126e0 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20  n(aType[p2]);.  
126f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12700 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44  emMove(&sMem, pD
12710 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  est);.      rc =
12720 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
12730 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
12740 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
12750 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
12760 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
12770 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
12780 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
12790 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
127a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
127b0 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
127c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
127d0 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74  ialGet((u8*)zDat
127e0 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44  a, aType[p2], pD
127f0 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  est);.    }.    
12800 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
12810 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a  oding;.  }else{.
12820 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
12830 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20  ype==P4_MEM ){. 
12840 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12850 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
12860 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d  Dest, pOp->p4.pM
12870 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  em, MEM_Static);
12880 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
12890 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d    assert( pDest-
128a0 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20  >flags&MEM_Null 
128b0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
128c0 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63  /* If we dynamic
128d0 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
128e0 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
128f0 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20   data (in the.  
12900 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
12910 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c  mFromBtree() cal
12920 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72  l above) then tr
12930 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f  ansfer control o
12940 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61  f that.  ** dyna
12950 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
12960 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20  d space over to 
12970 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74  the pDest struct
12980 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70  ure..  ** This p
12990 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79  revents a memory
129a0 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66   copy..  */.  if
129b0 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29  ( sMem.zMalloc )
129c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 4d  {.    assert( sM
129d0 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c  em.z==sMem.zMall
129e0 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  oc );.    assert
129f0 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73  ( !(pDest->flags
12a00 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
12a10 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
12a20 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  st->flags & (MEM
12a30 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20  _Blob|MEM_Str)) 
12a40 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65  || pDest->z==sMe
12a50 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74  m.z );.    pDest
12a60 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
12a70 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69  _Ephem|MEM_Stati
12a80 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66  c);.    pDest->f
12a90 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
12aa0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d  ;.    pDest->z =
12ab0 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65   sMem.z;.    pDe
12ac0 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
12ad0 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a  em.zMalloc;.  }.
12ae0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
12af0 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
12b00 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f  ble(pDest);..op_
12b10 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50  column_out:.  UP
12b20 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
12b30 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
12b40 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
12b50 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
12b60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12b70 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
12b80 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 * P4 *.**.** A
12b90 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
12ba0 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
12bb0 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
12bc0 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
12bd0 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
12be0 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
12bf0 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
12c00 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
12c10 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
12c20 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
12c30 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
12c40 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
12c50 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
12c60 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  * memory cell in
12c70 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63   the range..*/.c
12c80 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a  ase OP_Affinity:
12c90 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
12ca0 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
12cb0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
12cc0 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
12cd0 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20   char cAff;     
12ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
12cf0 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
12d00 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a  of affinity */..
12d10 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
12d20 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
12d30 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20  t( zAffinity!=0 
12d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
12d50 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
12d60 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
12d70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
12d80 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20   while( (cAff = 
12d90 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21  *(zAffinity++))!
12da0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
12db0 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d  ( pIn1 <= &p->aM
12dc0 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20  em[p->nMem] );. 
12dd0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
12de0 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  n1);.    applyAf
12df0 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66  finity(pIn1, cAf
12e00 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  f, encoding);.  
12e10 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
12e20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12e30 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20  ode: MakeRecord 
12e40 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
12e50 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
12e60 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
12e70 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
12e80 61 20 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a  a single entry.*
12e90 2a 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75  * suitable for u
12ea0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
12eb0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
12ec0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
12ed0 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
12ee0 65 78 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73  ex.  The details
12ef0 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61   of the format a
12f00 72 65 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73  re irrelevant as
12f10 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20   long as.** the 
12f20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
12f30 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
12f40 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
12f50 20 52 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65   Refer to source
12f60 20 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66   code comments f
12f70 6f 72 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f  or the details o
12f80 66 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20  f the record.** 
12f90 66 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  format..**.** P4
12fa0 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
12fb0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
12fc0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
12fd0 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
12fe0 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
12ff0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13000 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13010 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13020 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13030 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
13040 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
13050 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
13060 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
13070 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
13080 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
13090 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
130a0 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
130b0 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
130c0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
130d0 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
130e0 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
130f0 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
13100 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
13110 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
13120 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
13130 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
13140 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
13150 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
13160 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
13170 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
13180 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
13190 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
131a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
131b0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
131c0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
131d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
131e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
131f0 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
13200 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
13210 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
13220 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
13230 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
13240 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
13250 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
13260 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13270 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13280 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13290 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
132a0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
132b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
132c0 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
132d0 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
132e0 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
132f0 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
13300 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
13310 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
13320 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
13330 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
13340 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
13350 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
13360 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
13370 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13380 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
13390 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
133a0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
133b0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
133c0 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
133d0 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
133e0 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
133f0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13400 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
13410 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
13420 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
13430 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
13440 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
13450 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
13460 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
13470 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  [] */.  int len;
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13490 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
134a0 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
134b0 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
134c0 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
134d0 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
134e0 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
134f0 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
13500 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
13510 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
13550 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
13560 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
13570 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
13580 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
13590 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
135a0 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
135b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
135f0 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
13600 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
13610 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
13620 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
13630 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
13640 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20  and so froth..  
13650 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
13660 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
13670 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
13680 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
13690 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
136a0 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
136b0 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
136c0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
136d0 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
136e0 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
136f0 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
13700 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
13710 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
13720 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
13730 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
13740 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
13750 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
13760 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13770 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
13780 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
13790 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
137a0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
137b0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
137c0 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20  nByte = 0;      
137d0 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
137e0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
137f0 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  is record */.  n
13800 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
13810 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13820 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13830 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13840 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
13850 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
13860 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
13870 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
13880 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
13890 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
138a0 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ield<=p->nMem+1 
138b0 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
138c0 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
138d0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
138e0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
138f0 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
13900 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
13910 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
13920 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  mat;..  /* Loop 
13930 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
13940 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
13950 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
13960 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
13970 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
13980 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
13990 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
139a0 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70  rd..  */.  for(p
139b0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
139c0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
139d0 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e  {.    if( zAffin
139e0 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
139f0 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
13a00 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
13a10 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
13a20 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  g);.    }.    if
13a30 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  ( pRec->flags&ME
13a40 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e  M_Zero && pRec->
13a50 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  n>0 ){.      sql
13a60 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
13a70 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
13a80 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79   }.    serial_ty
13a90 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
13aa0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
13ab0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
13ac0 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33     len = sqlite3
13ad0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
13ae0 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
13af0 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
13b00 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71  ;.    nHdr += sq
13b10 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
13b20 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
13b30 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
13b40 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
13b50 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72       /* Only pur
13b60 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c  e zero-filled BL
13b70 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74  OBs can be input
13b80 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e   to this Opcode.
13b90 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20  .      ** We do 
13ba0 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20  not allow blobs 
13bb0 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61 6e  with a prefix an
13bc0 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  d a zero-filled 
13bd0 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e  tail. */.      n
13be0 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
13bf0 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65  nZero;.    }else
13c00 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20   if( len ){.    
13c10 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20    nZero = 0;.   
13c20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64   }.  }..  /* Add
13c30 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61   the initial hea
13c40 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74  der varint and t
13c50 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f  otal the size */
13c60 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69  .  nHdr += nVari
13c70 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69  nt = sqlite3Vari
13c80 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69  ntLen(nHdr);.  i
13c90 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
13ca0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
13cb0 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b  ) ){.    nHdr++;
13cc0 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
13cd0 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b  Hdr+nData-nZero;
13ce0 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
13cf0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
13d00 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
13d10 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
13d20 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
13d30 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
13d40 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
13d50 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
13d60 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
13d70 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
13d80 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
13d90 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
13da0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
13db0 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
13dc0 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
13dd0 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
13de0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
13df0 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
13e00 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63  3VdbeMemGrow() c
13e10 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65  ould clobber the
13e20 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74   value before it
13e30 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a   is used)..  */.
13e40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13e50 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
13e60 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
13e70 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
13e80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
13e90 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
13ea0 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
13eb0 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20   (int)nByte, 0) 
13ec0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
13ed0 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
13ee0 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
13ef0 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
13f00 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
13f10 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
13f20 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
13f30 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d  dr);.  for(pRec=
13f40 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
13f50 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
13f60 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
13f70 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13f80 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
13f90 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20  _format);.    i 
13fa0 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
13fb0 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
13fc0 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
13fd0 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
13fe0 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52   */.  }.  for(pR
13ff0 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
14000 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
14010 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74 61    /* serial data
14020 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c   */.    i += sql
14030 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
14040 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  t(&zNewRecord[i]
14050 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69 29  , (int)(nByte-i)
14060 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d  , pRec,file_form
14070 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  at);.  }.  asser
14080 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( i==nByte );..
14090 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
140a0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
140b0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
140c0 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
140d0 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
140e0 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45   = MEM_Blob | ME
140f0 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78  M_Dyn;.  pOut->x
14100 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e  Del = 0;.  if( n
14110 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
14120 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
14130 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
14140 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
14150 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
14160 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
14170 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
14180 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
14190 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
141a0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
141b0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
141c0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
141d0 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
141e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
141f0 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
14200 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
14210 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
14220 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
14230 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
14240 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
14250 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
14260 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
14270 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
14280 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
14290 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
142a0 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
142b0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
142c0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
142d0 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
142e0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70  sor *pCrsr;..  p
142f0 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
14300 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f  pOp->p1]->pCurso
14310 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 20 29  r;.  if( pCrsr )
14320 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
14330 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
14340 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
14350 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74 72  }else{.    nEntr
14360 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75  y = 0;.  }.  pOu
14370 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
14380 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
14390 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
143a0 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
143b0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
143c0 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
143d0 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
143e0 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
143f0 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
14400 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
14410 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
14420 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
14430 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
14440 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
14450 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
14460 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
14470 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
14480 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
14490 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
144a0 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
144b0 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
144e0 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
144f0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
14520 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
14530 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
14540 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
14550 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
14560 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
14570 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
14580 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
14590 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
145a0 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
145b0 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
145c0 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
145d0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
145e0 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
145f0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
14600 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
14610 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
14620 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
14630 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
14640 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
14650 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
14660 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
14670 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
14680 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
14690 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
146a0 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
146b0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
146c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
146d0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
146e0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
146f0 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
14700 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
14710 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
14720 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  b) );..  if( p1=
14730 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
14740 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
14750 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29  writeVdbeCnt>0 )
14760 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77  {.      /* A new
14770 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f   savepoint canno
14780 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20  t be created if 
14790 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
147a0 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a   write .      **
147b0 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65   statements (i.e
147c0 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74  . open read/writ
147d0 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c  e incremental bl
147e0 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20  ob handles)..   
147f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
14800 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
14810 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
14820 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70  annot open savep
14830 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
14840 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
14850 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
14860 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
14870 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
14880 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
14890 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
148a0 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20  (zName);..      
148b0 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
148c0 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
148d0 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
148e0 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
148f0 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
14900 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e  of(Savepoint)+nN
14910 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66  ame+1);.      if
14920 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( pNew ){.      
14930 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20    pNew->zName = 
14940 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d  (char *)&pNew[1]
14950 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79  ;.        memcpy
14960 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  (pNew->zName, zN
14970 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20  ame, nName+1);. 
14980 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49     .        /* I
14990 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
149a0 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  en transaction, 
149b0 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61  then mark this a
149c0 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20  s a special.    
149d0 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74      ** "transact
149e0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20  ion savepoint". 
149f0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  */.        if( d
14a00 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
14a10 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
14a20 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
14a30 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54           db->isT
14a40 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
14a50 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  int = 1;.       
14a60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
14a70 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
14a80 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
14a90 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69    .        /* Li
14aa0 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70  nk the new savep
14ab0 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61  oint into the da
14ac0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20  tabase handle's 
14ad0 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  list. */.       
14ae0 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64   pNew->pNext = d
14af0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
14b00 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
14b10 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20  point = pNew;.  
14b20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
14b30 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e  erredCons = db->
14b40 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
14b50 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
14b60 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
14b70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
14b80 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
14b90 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
14ba0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
14bb0 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
14bc0 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
14bd0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
14be0 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
14bf0 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
14c00 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
14c10 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
14c20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
14c30 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
14c40 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
14c50 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
14c60 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
14c70 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
14c80 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
14c90 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
14ca0 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
14cb0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
14cc0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14cd0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
14ce0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
14cf0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
14d00 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14d10 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
14d20 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20 20 20  lse if( .       
14d30 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
14d40 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45  t>0 || (p1==SAVE
14d50 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
14d60 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  & db->activeVdbe
14d70 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  Cnt>1) .    ){. 
14d80 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
14d90 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
14da0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
14db0 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
14dc0 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
14dd0 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
14de0 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20 69 73  tatements. It is
14df0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
14e00 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76 65   rollback a save
14e10 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69  point.      ** i
14e20 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
14e30 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
14e40 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20  s at all..      
14e50 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
14e60 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
14e70 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
14e80 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73 20 73      "cannot %s s
14e90 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
14ea0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
14eb0 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20  gress",.        
14ec0 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  (p1==SAVEPOINT_R
14ed0 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62  OLLBACK ? "rollb
14ee0 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65 22 29  ack": "release")
14ef0 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
14f00 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
14f10 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
14f20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
14f30 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
14f40 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
14f50 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
14f60 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
14f70 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
14f80 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
14f90 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
14fa0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
14fb0 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
14fc0 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
14fd0 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
14fe0 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
14ff0 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
15000 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
15010 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
15020 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
15030 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
15040 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
15050 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
15060 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
15070 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
15080 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
15090 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
150a0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
150b0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
150c0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
150d0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
150e0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
150f0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
15100 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
15110 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
15120 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
15130 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
15140 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
15150 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
15160 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
15170 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15180 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
15190 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
151a0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
151b0 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
151c0 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e{.        iSave
151d0 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
151e0 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
151f0 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
15200 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
15210 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
15220 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
15230 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
15240 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
15250 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
15260 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
15270 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15280 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
15290 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
152a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
152b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
152c0 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
152d0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
152e0 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26  K && (db->flags&
152f0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
15300 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20  nges)!=0 ){.    
15310 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
15320 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
15330 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
15340 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
15350 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
15360 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  db, 0);.        
15370 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
15380 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
15390 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
153a0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
153b0 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
153c0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
153d0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
153e0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
153f0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
15400 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
15410 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
15420 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
15430 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
15440 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
15450 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
15460 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
15470 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
15480 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
15490 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
154a0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
154b0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
154c0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
154d0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
154e0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
154f0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
15500 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
15510 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
15520 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
15530 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
15540 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
15550 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
15560 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
15570 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
15580 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
15590 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
155a0 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
155b0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
155c0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
155d0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
155e0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
155f0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
15600 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
15610 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
15620 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
15630 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
15640 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
15650 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
15660 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
15670 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
15680 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
15690 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
156a0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
156b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
156c0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
156d0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
156e0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
156f0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
15700 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
15710 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
15720 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
15730 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
15740 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
15750 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
15760 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
15770 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
15780 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
15790 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
157a0 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
157b0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
157c0 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
157d0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
157e0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
157f0 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
15800 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
15810 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
15820 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
15830 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
15840 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
15850 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
15860 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
15870 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
15880 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
15890 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
158a0 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
158b0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
158c0 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
158d0 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
158e0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
158f0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
15900 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
15910 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
15920 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
15930 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
15940 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
15950 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
15960 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
15970 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
15980 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
15990 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
159a0 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
159b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
159c0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
159d0 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
159e0 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
159f0 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69  s active */..  i
15a00 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69  f( turnOnAC && i
15a10 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
15a20 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20  activeVdbeCnt>1 
15a30 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
15a40 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
15a50 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42  plements a ROLLB
15a60 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  ACK and other VM
15a70 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
15a80 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
15a90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
15aa0 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
15ab0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
15ac0 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
15ad0 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
15ae0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
15af0 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
15b00 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15b10 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15b20 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   "cannot rollbac
15b30 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
15b40 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
15b50 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
15b60 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
15b70 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
15b80 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f   }else if( turnO
15b90 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
15ba0 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64  k && db->writeVd
15bb0 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f  beCnt>0 ){.    /
15bc0 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
15bd0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
15be0 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
15bf0 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
15c00 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
15c10 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
15c20 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
15c30 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
15c40 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
15c50 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
15c60 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
15c70 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
15c80 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
15c90 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
15ca0 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
15cb0 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
15cc0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
15cd0 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
15ce0 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
15cf0 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
15d00 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
15d10 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
15d20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
15d30 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
15d40 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
15d50 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29  3RollbackAll(db)
15d60 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
15d70 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
15d80 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
15d90 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
15da0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
15db0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
15dc0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
15dd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15de0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
15df0 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
15e00 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69  oCommit;.      i
15e10 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
15e20 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
15e30 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
15e40 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
15e50 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15e60 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
15e70 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
15e80 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
15e90 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15ea0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
15eb0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
15ec0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
15ed0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
15ee0 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
15ef0 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
15f00 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
15f10 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
15f20 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
15f30 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
15f40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
15f50 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
15f60 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
15f70 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
15f80 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
15f90 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
15fa0 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
15fb0 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
15fc0 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
15fd0 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
15fe0 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
15ff0 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
16000 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
16010 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
16020 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
16030 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
16060 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
16070 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
16080 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
16090 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
160a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
160b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
160c0 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
160d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
160e0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
160f0 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
16100 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
16110 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
16120 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
16130 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
16140 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
16150 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
16160 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
16170 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
16180 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
16190 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
161a0 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
161b0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
161c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
161d0 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
161e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
161f0 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
16200 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
16210 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
16220 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
16230 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
16240 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
16250 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
16260 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
16270 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
16280 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
16290 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
162a0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
162b0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
162c0 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
162d0 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
162e0 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
162f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16300 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
16310 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
16320 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
16330 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
16340 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
16350 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
16360 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
16370 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
16380 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
16390 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
163a0 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
163b0 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
163c0 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
163d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
163e0 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
163f0 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
16400 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
16410 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
16420 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
16430 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
16440 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
16450 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
16460 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
16470 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
16480 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
16490 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
164a0 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
164b0 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
164c0 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
164d0 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
164e0 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
164f0 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
16500 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
16510 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
16520 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
16530 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
16540 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
16550 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
16560 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
16570 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
16580 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
16590 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
165a0 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
165b0 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
165c0 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
165d0 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
165e0 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
165f0 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
16600 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
16610 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66 65   allows the affe
16620 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 56  cts of this.** V
16630 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
16640 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
16650 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
16660 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
16670 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
16680 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
16690 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
166a0 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
166b0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
166c0 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
166d0 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
166e0 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
166f0 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ts..**.** If P2 
16700 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
16710 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74  read-lock is obt
16720 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74  ained on the dat
16730 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63  abase file..*/.c
16740 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
16750 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
16760 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
16770 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
16780 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
16790 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
167a0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
167b0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
167c0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
167d0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69  p->p1].pBt;..  i
167e0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
167f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
16800 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
16810 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28  Op->p2);.    if(
16820 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
16830 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
16840 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72  = pc;.      p->r
16850 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
16860 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
16870 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
16880 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
16890 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
168a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
168b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
168c0 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  }..    if( pOp->
168d0 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d  p2 && p->usesStm
168e0 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26  tJournal .     &
168f0 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & (db->autoCommi
16900 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69  t==0 || db->acti
16910 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20  veVdbeCnt>1) .  
16920 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
16930 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
16940 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
16950 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
16960 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
16970 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
16980 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
16990 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
169a0 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
169b0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
169c0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
169d0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
169e0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
169f0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
16a00 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20     }.      rc = 
16a10 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
16a20 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53  nStmt(pBt, p->iS
16a30 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20  tatement);..    
16a40 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
16a50 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
16a60 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
16a70 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
16a80 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
16a90 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
16aa0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
16ab0 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
16ac0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
16ad0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
16ae0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
16af0 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
16b00 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
16b10 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
16b20 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
16b30 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16b40 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
16b50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
16b60 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
16b70 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
16b80 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
16b90 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
16ba0 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
16bb0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
16bc0 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
16bd0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
16be0 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
16bf0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
16c00 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
16c10 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
16c20 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
16c30 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
16c40 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
16c50 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
16c60 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
16c70 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
16c80 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
16c90 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16ca0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
16cb0 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
16cc0 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
16cd0 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
16ce0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
16cf0 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
16d00 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
16d10 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
16d20 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
16d30 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
16d40 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
16d50 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
16d60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
16d70 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
16d80 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
16d90 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
16da0 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20  ookie;..  iDb = 
16db0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
16dc0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
16dd0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
16de0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
16df0 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
16e00 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
16e10 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
16e20 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
16e30 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
16e40 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
16e50 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
16e60 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  0 );..  sqlite3B
16e70 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
16e80 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43  aDb[iDb].pBt, iC
16e90 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
16ea0 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
16eb0 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
16ec0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16ed0 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
16ee0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
16ef0 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
16f00 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
16f10 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
16f20 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
16f30 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
16f40 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
16f50 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
16f60 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
16f70 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
16f80 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
16f90 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
16fa0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
16fb0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
16fc0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
16fd0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
16fe0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
16ff0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
17000 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
17010 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
17020 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
17030 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
17040 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
17050 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
17060 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
17070 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
17080 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
17090 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
170a0 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
170b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
170c0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
170d0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
170e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
170f0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
17100 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
17110 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
17120 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
17130 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
17140 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
17150 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
17160 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
17170 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71  m[pOp->p3];.  sq
17180 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
17190 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
171a0 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75  /* See note abou
171b0 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67  t index shifting
171c0 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69   on OP_ReadCooki
171d0 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
171e0 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65  te3BtreeUpdateMe
171f0 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70  ta(pDb->pBt, pOp
17200 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d  ->p2, (int)pIn3-
17210 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70  >u.i);.  if( pOp
17220 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45  ->p2==BTREE_SCHE
17230 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20  MA_VERSION ){.  
17240 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63    /* When the sc
17250 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e  hema cookie chan
17260 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  ges, record the 
17270 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72  new cookie inter
17280 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62  nally */.    pDb
17290 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ->pSchema->schem
172a0 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29  a_cookie = (int)
172b0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64  pIn3->u.i;.    d
172c0 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
172d0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
172e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
172f0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c  p->p2==BTREE_FIL
17300 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
17310 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
17320 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
17330 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
17340 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
17350 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33  ormat = (u8)pIn3
17360 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28  ->u.i;.  }.  if(
17370 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
17380 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
17390 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
173a0 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
173b0 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
173c0 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
173d0 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
173e0 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
173f0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
17400 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
17410 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
17420 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
17430 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17440 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f  pcode: VerifyCoo
17450 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  kie P1 P2 *.**.*
17460 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75  * Check the valu
17470 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61  e of global data
17480 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e  base parameter n
17490 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20  umber 0 (the.** 
174a0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20  schema version) 
174b0 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74  and make sure it
174c0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32 2e   is equal to P2.
174d0 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20    .** P1 is the 
174e0 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20  database number 
174f0 77 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74  which is 0 for t
17500 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
17510 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66   file.** and 1 f
17520 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64  or the file hold
17530 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ing temporary ta
17540 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69  bles and some hi
17550 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66  gher number.** f
17560 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  or auxiliary dat
17570 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  abases..**.** Th
17580 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
17590 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
175a0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
175b0 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
175c0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
175d0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
175e0 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
175f0 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
17600 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
17610 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
17620 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
17630 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
17640 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61  ..**.** Either a
17650 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
17660 64 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  ds to have been 
17670 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50  started or an OP
17680 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74  _Open needs.** t
17690 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74  o be executed (t
176a0 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65  o establish a re
176b0 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20  ad lock) before 
176c0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a  this opcode is.*
176d0 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61  * invoked..*/.ca
176e0 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b  se OP_VerifyCook
176f0 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74  ie: {.  int iMet
17700 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  a;.  Btree *pBt;
17710 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17720 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
17730 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
17740 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
17750 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
17760 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  1))!=0 );.  pBt 
17770 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
17780 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42  1].pBt;.  if( pB
17790 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
177a0 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
177b0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
177c0 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
177d0 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65 7b  iMeta);.  }else{
177e0 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a  .    iMeta = 0;.
177f0 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21    }.  if( iMeta!
17800 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  =pOp->p2 ){.    
17810 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
17820 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
17830 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
17840 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
17850 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
17860 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
17870 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
17880 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
17890 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
178a0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
178b0 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
178c0 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
178d0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
178e0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
178f0 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
17900 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
17910 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
17920 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
17930 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
17940 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
17950 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
17960 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
17970 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
17980 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
17990 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
179a0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
179b0 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
179c0 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
179d0 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
179e0 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
179f0 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
17a00 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
17a10 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
17a20 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
17a30 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
17a40 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
17a50 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
17a60 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
17a70 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
17a80 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
17a90 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
17aa0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
17ab0 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
17ac0 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
17ad0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
17ae0 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
17af0 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
17b00 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
17b10 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
17b20 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
17b30 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
17b40 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
17b50 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
17b60 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
17b70 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
17b80 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
17b90 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
17ba0 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
17bb0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
17bc0 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  ..    sqlite3Exp
17bd0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
17be0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72  ments(db);.    r
17bf0 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
17c00 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
17c10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
17c20 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
17c30 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
17c40 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
17c50 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
17c60 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
17c70 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
17c80 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
17c90 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
17ca0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
17cb0 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
17cc0 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
17cd0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
17ce0 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
17cf0 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
17d00 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
17d10 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
17d20 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
17d30 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
17d40 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
17d50 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
17d60 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
17d70 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
17d80 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
17d90 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
17da0 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
17db0 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
17dc0 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
17dd0 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
17de0 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
17df0 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
17e00 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
17e10 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
17e20 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
17e30 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
17e40 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
17e50 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
17e60 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
17e70 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
17e80 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
17e90 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
17ea0 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
17eb0 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
17ec0 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
17ed0 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
17ee0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
17ef0 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
17f00 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
17f10 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
17f20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
17f30 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
17f40 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
17f50 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
17f60 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
17f70 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
17f80 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
17f90 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
17fa0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
17fb0 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
17fc0 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
17fd0 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
17fe0 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
17ff0 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
18000 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
18010 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
18020 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
18030 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
18040 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
18050 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
18060 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
18070 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
18080 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
18090 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
180a0 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
180b0 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
180c0 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
180d0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
180e0 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
180f0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
18100 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
18110 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
18120 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
18130 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
18140 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
18150 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
18160 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
18170 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
18180 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
18190 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
181a0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
181b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
181c0 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20  penWrite..*/./* 
181d0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
181e0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
181f0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
18200 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
18210 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
18220 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
18230 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
18240 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
18250 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
18260 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
18270 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
18280 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
18290 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
182a0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
182b0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
182c0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
182d0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
182e0 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
182f0 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
18300 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
18310 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
18320 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
18330 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
18340 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
18350 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
18360 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
18370 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
18380 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
18390 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
183a0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
183b0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
183c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
183d0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
183e0 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
183f0 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
18400 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
18410 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
18420 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
18430 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
18440 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
18450 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
18460 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
18470 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
18480 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
18490 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
184a0 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
184b0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
184c0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
184d0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
184e0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
184f0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
18500 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
18510 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
18520 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
18530 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
18540 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  rite: {.  int nF
18550 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  ield;.  KeyInfo 
18560 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
18570 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a   p2;.  int iDb;.
18580 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
18590 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
185a0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
185b0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 69 66 28   Db *pDb;..  if(
185c0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
185d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
185e0 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
185f0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
18600 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
18610 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
18620 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
18630 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
18640 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
18650 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
18660 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
18670 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
18680 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
18690 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
186a0 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
186b0 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
186c0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
186d0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
186e0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a      wrFlag = 1;.
186f0 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63      if( pDb->pSc
18700 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
18710 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t < p->minWriteF
18720 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20  ileFormat ){.   
18730 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69     p->minWriteFi
18740 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e  leFormat = pDb->
18750 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
18760 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rmat;.    }.  }e
18770 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  lse{.    wrFlag 
18780 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
18790 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61 73  Op->p5 ){.    as
187a0 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
187b0 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70 2d    assert( p2<=p-
187c0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e  >nMem );.    pIn
187d0 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
187e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
187f0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
18800 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74  );.    p2 = (int
18810 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn2->u.i;.    
18820 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20  /* The p2 value 
18830 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f  always comes fro
18840 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65  m a prior OP_Cre
18850 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
18860 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  and.    ** that 
18870 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
18880 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61  ys set the p2 va
18890 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65  lue to 2 or more
188a0 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20   or else fail.. 
188b0 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77     ** If there w
188c0 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74  ere a failure, t
188d0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
188e0 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
188f0 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62   halted.    ** b
18900 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74  efore reaching t
18910 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
18920 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45   */.    if( NEVE
18930 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20  R(p2<2) ) {.    
18940 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
18950 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
18960 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18970 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
18980 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
18990 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
189a0 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
189b0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
189c0 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49  yInfo;.    pKeyI
189d0 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70  nfo->enc = ENC(p
189e0 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c  ->db);.    nFiel
189f0 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  d = pKeyInfo->nF
18a00 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20  ield+1;.  }else 
18a10 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
18a20 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20  =P4_INT32 ){.   
18a30 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
18a40 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  4.i;.  }.  asser
18a50 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
18a60 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
18a70 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
18a80 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
18a90 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72  , 1);.  if( pCur
18aa0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
18ab0 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  m;.  pCur->nullR
18ac0 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ow = 1;.  rc = s
18ad0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
18ae0 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
18af0 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
18b00 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
18b10 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
18b20 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20 53  KeyInfo;..  /* S
18b30 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73  ince it performs
18b40 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   no memory alloc
18b50 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65  ation or IO, the
18b60 20 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74 68 61   only values tha
18b70 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74  t.  ** sqlite3Bt
18b80 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20  reeCursor() may 
18b90 72 65 74 75 72 6e 20 61 72 65 20 53 51 4c 49 54  return are SQLIT
18ba0 45 5f 45 4d 50 54 59 20 61 6e 64 20 53 51 4c 49  E_EMPTY and SQLI
18bb0 54 45 5f 4f 4b 2e 20 0a 20 20 2a 2a 20 53 51 4c  TE_OK. .  ** SQL
18bc0 49 54 45 5f 45 4d 50 54 59 20 69 73 20 6f 6e 6c  ITE_EMPTY is onl
18bd0 79 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  y returned when 
18be0 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70  attempting to op
18bf0 65 6e 20 74 68 65 20 74 61 62 6c 65 0a 20 20 2a  en the table.  *
18c00 2a 20 72 6f 6f 74 65 64 20 61 74 20 70 61 67 65  * rooted at page
18c10 20 31 20 6f 66 20 61 20 7a 65 72 6f 2d 62 79 74   1 of a zero-byt
18c20 65 20 64 61 74 61 62 61 73 65 2e 20 20 2a 2f 0a  e database.  */.
18c30 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
18c40 4c 49 54 45 5f 45 4d 50 54 59 20 7c 7c 20 72 63  LITE_EMPTY || rc
18c50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
18c60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18c70 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 70 43 75  EMPTY ){.    pCu
18c80 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a  r->pCursor = 0;.
18c90 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18ca0 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65  OK;.  }..  /* Se
18cb0 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
18cc0 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49  .isTable and isI
18cd0 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20  ndex variables. 
18ce0 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
18cf0 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
18d00 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
18d10 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
18d20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
18d30 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
18d40 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
18d50 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
18d60 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
18d70 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
18d80 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
18d90 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
18da0 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
18db0 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
18dc0 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
18dd0 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
18de0 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d   pCur->isIndex =
18df0 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b   !pCur->isTable;
18e00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18e10 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
18e20 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
18e30 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20   *.**.** Open a 
18e40 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
18e50 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
18e60 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
18e70 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
18e80 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
18e90 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
18ea0 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
18eb0 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
18ec0 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
18ed0 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
18ee0 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
18ef0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
18f00 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
18f10 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
18f20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
18f30 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
18f40 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
18f50 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
18f60 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
18f70 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
18f80 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
18f90 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
18fa0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
18fb0 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
18fc0 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
18fd0 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
18fe0 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
18ff0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
19000 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
19010 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f  as once called O
19020 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68  penTemp.  But th
19030 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f  at created.** co
19040 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20  nfusion because 
19050 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74  the term "temp t
19060 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66  able", might ref
19070 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20  er either.** to 
19080 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20  a TEMP table at 
19090 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f  the SQL level, o
190a0 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65  r to a table ope
190b0 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f  ned by.** this o
190c0 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69  pcode.  Then thi
190d0 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c  s opcode was cal
190e0 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20  l OpenVirtual.  
190f0 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61  But.** that crea
19100 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69  ted confusion wi
19110 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72  th the whole vir
19120 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e  tual-table idea.
19130 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
19140 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
19150 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
19160 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
19170 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
19180 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
19190 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
191a0 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
191b0 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
191c0 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
191d0 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
191e0 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
191f0 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
19200 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
19210 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
19220 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
19230 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
19240 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
19250 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
19260 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
19270 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69  or *pCx;.  stati
19280 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e  c const int open
19290 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
192a0 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
192b0 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
192c0 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
192d0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
192e0 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
192f0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
19300 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
19310 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
19320 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
19330 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
19340 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p1>=0 );.  pCx
19350 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
19360 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
19370 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
19380 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
19390 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
193a0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
193b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
193c0 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c  eeFactory(db, 0,
193d0 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55   1, SQLITE_DEFAU
193e0 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49  LT_TEMP_CACHE_SI
193f0 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20  ZE, openFlags,. 
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e            &pCx->
19420 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  pBt);.  if( rc==
19430 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19440 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19450 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
19460 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
19470 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19480 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
19490 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
194a0 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
194b0 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
194c0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
194d0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
194e0 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
194f0 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61  REE_ZERODATA fla
19500 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
19510 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
19520 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
19530 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
19540 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
19550 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
19560 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
19570 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
19580 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29  an INTKEY table)
19590 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
195a0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
195b0 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70  o ){.      int p
195c0 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72  gno;.      asser
195d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
195e0 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20  P4_KEYINFO );.  
195f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19600 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
19610 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pCx->pBt, &pgno
19620 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  , BTREE_ZERODATA
19630 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
19640 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19650 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
19660 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
19670 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  +1 );.        rc
19680 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
19690 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
196a0 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20  pgno, 1, .      
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e            (KeyIn
196d0 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  fo*)pOp->p4.z, p
196e0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
196f0 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
19700 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
19710 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
19720 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
19730 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
19740 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
19750 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
19760 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19770 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19780 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
19790 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
197a0 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
197b0 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
197c0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
197d0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
197e0 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69  sIndex = !pCx->i
197f0 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b  sTable;.  break;
19800 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
19810 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
19820 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  P3 * *.**.** Ope
19830 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
19840 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
19850 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
19860 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
19870 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
19880 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
19890 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
198a0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
198b0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
198c0 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65  ter P2.  In othe
198d0 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
198e0 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
198f0 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
19900 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
19910 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
19920 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
19930 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
19940 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
19950 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
19960 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
19970 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
19980 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
19990 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
199a0 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
199b0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
199c0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
199d0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
199e0 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
199f0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
19a00 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
19a10 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
19a20 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
19a30 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
19a40 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
19a50 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
19a60 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
19a70 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
19a80 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
19a90 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
19aa0 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
19ab0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
19ac0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
19ad0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p1>=0 );.  pCx
19ae0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
19af0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
19b00 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20  p->p3, -1, 0);. 
19b10 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
19b20 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
19b30 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
19b40 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c   pCx->pseudoTabl
19b50 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
19b60 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
19b70 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64   1;.  pCx->isInd
19b80 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ex = 0;.  break;
19b90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
19ba0 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
19bb0 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
19bc0 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
19bd0 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
19be0 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
19bf0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
19c00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
19c10 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
19c20 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
19c30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19c40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
19c50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
19c60 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
19c70 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
19c80 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
19c90 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
19ca0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
19cb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
19cc0 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kGe P1 P2 P3 P4 
19cd0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
19ce0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19cf0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19d00 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19d10 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
19d20 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
19d30 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
19d40 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
19d50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
19d60 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
19d70 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
19d80 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
19d90 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19da0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19db0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19dc0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19dd0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19de0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19df0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19e00 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
19e10 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
19e20 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
19e30 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
19e40 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
19e50 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
19e60 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
19e70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
19e80 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
19e90 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
19ea0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
19eb0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
19ec0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
19ed0 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
19ee0 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
19ef0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19f00 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Gt P1 P2 P3 P4 *
19f10 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
19f20 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
19f30 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
19f40 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
19f50 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
19f60 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
19f70 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
19f80 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
19f90 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
19fa0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
19fb0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
19fc0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
19fd0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
19fe0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
19ff0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1a000 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1a010 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1a020 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1a030 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1a040 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1a050 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1a060 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
1a070 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1a080 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1a090 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
1a0a0 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1a0b0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1a0c0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1a0d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a0e0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1a0f0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
1a100 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1a110 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1a120 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20  SeekLt P1 P2 P3 
1a130 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63  P4 * .**.** If c
1a140 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1a150 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1a160 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1a170 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1a180 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1a190 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1a1a0 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1a1b0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1a1c0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1a1d0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1a1e0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1a1f0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1a200 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1a210 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1a220 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1a230 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1a240 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1a250 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1a260 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1a270 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1a280 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1a290 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1a2a0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1a2b0 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
1a2c0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1a2d0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1a2e0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1a2f0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1a300 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1a310 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
1a320 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1a330 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1a340 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  ekLe P1 P2 P3 P4
1a350 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
1a360 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1a370 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1a380 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1a390 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1a3a0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1a3b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1a3c0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1a3d0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1a3e0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1a3f0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1a400 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1a410 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1a420 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1a430 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1a440 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1a450 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1a460 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1a470 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1a480 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1a490 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1a4a0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1a4b0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1a4c0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1a4d0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
1a4e0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1a4f0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1a500 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1a510 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1a520 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a530 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1a540 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1a550 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1a560 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1a570 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f  eekLt:         /
1a580 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1a590 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20  ase OP_SeekLe:  
1a5a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1a5b0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1a5c0 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f  eekGe:         /
1a5d0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1a5e0 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b  ase OP_SeekGt: {
1a5f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1a600 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1a610 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64  ;.  int oc;.  Vd
1a620 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1a630 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1a640 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  ;.  int nField;.
1a650 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1a660 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
1a670 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
1a680 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
1a690 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1a6a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1a6b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a6c0 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
1a6d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1a6e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1a6f0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1a700 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1a710 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1a720 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d  rt( OP_SeekLe ==
1a730 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a   OP_SeekLt+1 );.
1a740 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1a750 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74  kGe == OP_SeekLt
1a760 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
1a770 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f  OP_SeekGt == OP_
1a780 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 69 66  SeekLt+3 );.  if
1a790 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1a7a0 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70   ){.    oc = pOp
1a7b0 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43  ->opcode;.    pC
1a7c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1a7d0 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
1a7e0 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  le ){.      /* T
1a7f0 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
1a800 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
1a810 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
1a820 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
1a830 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ,.      ** blob,
1a840 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1a850 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1a860 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1a870 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20  we can do.      
1a880 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1a890 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  covert it. */.  
1a8a0 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1a8b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1a8c0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1a8d0 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20  inity(pIn3);.   
1a8e0 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1a8f0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1a900 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72  n3);.      pC->r
1a910 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1a920 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1a930 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
1a940 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
1a950 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
1a960 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20  r without.      
1a970 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1a980 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1a990 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1a9a0 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1a9b0 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  /.      if( (pIn
1a9c0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1a9d0 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
1a9e0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1a9f0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1aa00 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  0 ){.          /
1aa10 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1aa20 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1aa30 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1aa40 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1aa50 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68  .          ** th
1aa60 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1aa70 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1aa80 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1aa90 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1aaa0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1aab0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1aac0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
1aad0 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
1aae0 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65   point, then the
1aaf0 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62   P3 value must b
1ab00 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20  e a floating.   
1ab10 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75       ** point nu
1ab20 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  mber. */.       
1ab30 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
1ab40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1ab50 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20  )!=0 );..       
1ab60 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c   if( iKey==SMALL
1ab70 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49  EST_INT64 && (pI
1ab80 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  n3->r<(double)iK
1ab90 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29  ey || pIn3->r>0)
1aba0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1abb0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
1abc0 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61   too large in ma
1abd0 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78  gnitude to be ex
1abe0 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20  pressed as an.  
1abf0 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
1ac00 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  er. */.         
1ac10 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
1ac20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c      if( pIn3->r<
1ac30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
1ac40 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1ac50 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  Ge ){  assert( o
1ac60 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c==OP_SeekGe || 
1ac70 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1ac80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1ac90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1aca0 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  First(pC->pCurso
1acb0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1acc0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1acd0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1ace0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1acf0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
1ad00 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c   }.          }el
1ad10 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
1ad20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c  if( oc<=OP_SeekL
1ad30 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  e ){  assert( oc
1ad40 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1ad50 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a  c==OP_SeekLe );.
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
1ad70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1ad80 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1ad90 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1ada0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1adb0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1adc0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1add0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1ade0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1adf0 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1ae00 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63  {.            pc
1ae10 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1ae20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1ae30 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ae40 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f       }else if( o
1ae50 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1ae60 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b  oc==OP_SeekGe ){
1ae70 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1ae80 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20  e the ceiling() 
1ae90 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76  function to conv
1aea0 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f  ert real->int */
1aeb0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1aec0 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65  In3->r > (double
1aed0 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a  )iKey ) iKey++;.
1aee0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1aef0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1af00 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63  the floor() func
1af10 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
1af20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
1af30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f         assert( o
1af40 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20  c==OP_SeekLe || 
1af50 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1af60 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1af70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65  In3->r < (double
1af80 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a  )iKey ) iKey--;.
1af90 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1afa0 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  } .      rc = sq
1afb0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1afc0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1afd0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1afe0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1aff0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b000 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b010 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b020 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b030 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d  }.      if( res=
1b040 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  =0 ){.        pC
1b050 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1b060 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   1;.        pC->
1b070 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1b080 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
1b090 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c  lse{.      nFiel
1b0a0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1b0b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1b0c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1b0d0 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  32 );.      asse
1b0e0 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1b0f0 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1b100 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1b110 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1b120 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a  = (u16)nField;..
1b130 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
1b140 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1b150 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1b160 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1b170 0a 20 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20  .      **   if( 
1b180 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c  oc==OP_SeekGt ||
1b190 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1b1a0 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72  {.      **     r
1b1b0 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1b1c0 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20  D_INCRKEY;.     
1b1d0 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
1b1e0 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67     **     r.flag
1b1f0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20  s = 0;.      ** 
1b200 20 20 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20    }.      */.   
1b210 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 31     r.flags = (u1
1b220 36 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  6)(UNPACKED_INCR
1b230 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d  KEY * (1 & (oc -
1b240 20 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20   OP_SeekLt)));. 
1b250 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1b260 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e  =OP_SeekGt || r.
1b270 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f  flags==UNPACKED_
1b280 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20  INCRKEY );.     
1b290 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1b2a0 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67  SeekLe || r.flag
1b2b0 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  s==UNPACKED_INCR
1b2c0 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73  KEY );.      ass
1b2d0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1b2e0 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30  Ge || r.flags==0
1b2f0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1b300 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc!=OP_SeekLt 
1b310 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b  || r.flags==0 );
1b320 0a 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ..      r.aMem =
1b330 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1b340 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1b350 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20  b(r.aMem);.     
1b360 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b370 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1b380 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1b390 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1b3a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1b3b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1b3c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1b3d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1b3e0 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77   }.      pC->row
1b3f0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1b400 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
1b410 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1b420 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1b430 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1b440 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1b450 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
1b460 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1b470 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  +;.#endif.    if
1b480 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1b490 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1b4a0 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1b4b0 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1b4c0 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1b4d0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1b4e0 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20  OP_SeekGt) ){.  
1b4f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b500 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1b510 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1b520 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b530 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b540 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b550 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1b560 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b570 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1b580 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
1b590 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1b5a0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1b5b0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1b5c0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1b5d0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1b5e0 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1b5f0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1b600 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1b610 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1b620 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1b630 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b640 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b650 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1b660 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b670 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1b680 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1b690 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b6a0 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1b6b0 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1b6c0 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1b6d0 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1b6e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20  .        ** see 
1b6f0 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
1b700 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
1b710 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71          res = sq
1b720 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1b730 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1b740 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
1b750 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1b760 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
1b770 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1b780 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
1b790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1b7a0 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1b7b0 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1b7c0 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1b7d0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1b7e0 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1b7f0 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1b800 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1b810 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1b820 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1b830 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1b840 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1b850 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1b860 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1b870 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1b880 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b890 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1b8a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
1b8b0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1b8c0 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1b8d0 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1b8e0 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1b8f0 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1b900 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1b910 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1b920 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1b930 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1b940 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1b950 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1b960 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1b970 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1b980 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1b990 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1b9a0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1b9b0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1b9c0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1b9d0 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1b9e0 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1b9f0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1ba00 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1ba10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ba20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ba30 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1ba40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ba50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1ba60 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  =0 );.  if( ALWA
1ba70 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1ba80 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
1ba90 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1baa0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1bab0 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d   = 0;.    pIn2 =
1bac0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1bad0 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1bae0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1baf0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1bb00 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1bb10 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1bb20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1bb30 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
1bb40 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1bb50 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1bb60 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1bb70 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1bb80 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1bb90 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1bba0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1bbb0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1bbc0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1bbd0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1bbe0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1bbf0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1bc00 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1bc10 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1bc20 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1bc30 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1bc40 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1bc50 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1bc60 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1bc70 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1bc80 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1bc90 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1bca0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1bcb0 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1bcc0 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f  g entry..*/./* O
1bcd0 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
1bce0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1bcf0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1bd00 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1bd10 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1bd20 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1bd30 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1bd40 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1bd50 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1bd60 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1bd70 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1bd80 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1bd90 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1bda0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1bdb0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1bdc0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1bdd0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1bde0 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1bdf0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1be00 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1be10 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1be20 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
1be30 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
1be40 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
1be50 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
1be60 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
1be70 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
1be80 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1be90 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
1bea0 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
1beb0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
1bec0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1bed0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1bee0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1bef0 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
1bf00 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1bf10 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1bf20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1bf30 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1bf40 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1bf50 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1bf60 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ts;.  VdbeCursor
1bf70 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1bf80 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1bf90 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
1bfa0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1bfb0 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
1bfc0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
1bfd0 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
1bfe0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b   sizeof(Mem)*3 +
1bff0 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   7];..#ifdef SQL
1c000 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1c010 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
1c020 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65  ;.#endif..  alre
1c030 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20  adyExists = 0;. 
1c040 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c050 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c060 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1c070 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1c080 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1c090 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c0a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c0b0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
1c0c0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1c0d0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41  >p3];.  if( ALWA
1c0e0 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1c0f0 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72  0) ){..    asser
1c100 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1c110 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  0 );.    if( pOp
1c120 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
1c130 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1c140 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1c150 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1c160 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
1c170 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1c180 33 3b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  3;.      r.flags
1c190 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1c1a0 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  IX_MATCH;.      
1c1b0 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1c1c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1c1d0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1c1e0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1c1f0 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1c200 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70  b(pIn3);.      p
1c210 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1c220 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1c230 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1c240 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1c250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65           aTempRe
1c280 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52  c, sizeof(aTempR
1c290 65 63 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ec));.      if( 
1c2a0 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20  pIdxKey==0 ){.  
1c2b0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
1c2c0 6d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  m;.      }.     
1c2d0 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20   pIdxKey->flags 
1c2e0 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  |= UNPACKED_PREF
1c2f0 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a  IX_MATCH;.    }.
1c300 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1c310 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1c320 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1c330 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1c340 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
1c350 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20  Op->p4.i==0 ){. 
1c360 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1c370 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
1c380 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
1c390 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
1c3a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c3b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1c3c0 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73  .    alreadyExis
1c3d0 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
1c3e0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1c3f0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1c400 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1c410 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1c420 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
1c430 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1c440 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
1c450 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1c460 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
1c470 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  se{.    if( !alr
1c480 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1c490 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1c4a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1c4b0 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71  * Opcode: IsUniq
1c4c0 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ue P1 P2 P3 P4 *
1c4d0 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1c4e0 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69   is open on an i
1c4f0 6e 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68  ndex b-tree - th
1c500 61 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20  at is to say, a 
1c510 62 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e  btree which.** n
1c520 6f 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65  o data and where
1c530 20 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63   the key are rec
1c540 6f 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62  ords generated b
1c550 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  y OP_MakeRecord 
1c560 77 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74  with.** the list
1c570 20 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65   field being the
1c580 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1c590 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
1c5a0 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e   the index.** en
1c5b0 74 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a  try refers to..*
1c5c0 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69  *.** The P3 regi
1c5d0 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ster contains an
1c5e0 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1c5f0 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69  number. Call thi
1c600 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d  s record .** num
1c610 62 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20  ber R. Register 
1c620 50 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P4 is the first 
1c630 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f  in a set of N co
1c640 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65  ntiguous registe
1c650 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20  rs.** that make 
1c660 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  up an unpacked i
1c670 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61  ndex key that ca
1c680 6e 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63  n be used with c
1c690 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
1c6a0 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20   value of N can 
1c6b0 62 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d  be inferred from
1c6c0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69   the cursor. N i
1c6d0 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69  ncludes the rowi
1c6e0 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e  d.** value appen
1c6f0 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ded to the end o
1c700 66 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f the index reco
1c710 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76  rd. This rowid v
1c720 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d  alue may.** or m
1c730 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61  ay not be the sa
1c740 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49  me as R..**.** I
1c750 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72  f any of the N r
1c760 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
1c770 6e 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72  ng with register
1c780 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e   P4 contains a N
1c790 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75  ULL.** value, ju
1c7a0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1c7b0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  o P2..**.** Othe
1c7c0 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74  rwise, this inst
1c7d0 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69  ruction checks i
1c7e0 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74  f cursor P1 cont
1c7f0 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a  ains an entry.**
1c800 20 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74   where the first
1c810 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61   (N-1) fields ma
1c820 74 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69  tch but the rowi
1c830 64 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65  d value at the e
1c840 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64  nd.** of the ind
1c850 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20  ex entry is not 
1c860 52 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  R. If there is n
1c870 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f  o such entry, co
1c880 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74  ntrol jumps.** t
1c890 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
1c8a0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
1c8b0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f   rowid of the co
1c8c0 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a  nflicting index.
1c8d0 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69  ** entry is copi
1c8e0 65 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  ed to register P
1c8f0 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61  3 and control fa
1c900 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1c910 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
1c920 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
1c930 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1c940 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75  , NotExists, Fou
1c950 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  nd.*/.case OP_Is
1c960 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20  Unique: {       
1c970 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c980 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62  .  u16 ii;.  Vdb
1c990 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1c9a0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1c9b0 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20  .  u16 nField;. 
1c9c0 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70   Mem *aMx;.  Unp
1c9d0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20  ackedRecord r;  
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9f0 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20  /* B-Tree index 
1ca00 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20  search key */.  
1ca10 69 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20  i64 R;          
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca30 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72     /* Rowid stor
1ca40 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1ca50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26  3 */..  pIn3 = &
1ca60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1ca70 20 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   aMx = &aMem[pOp
1ca80 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73  ->p4.i];.  /* As
1ca90 73 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61  sert that the va
1caa0 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65  lues of paramete
1cab0 72 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65  rs P1 and P4 are
1cac0 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20   in range. */.  
1cad0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1cae0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1caf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cb00 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70  p4.i>0 && pOp->p
1cb10 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  4.i<=p->nMem );.
1cb20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cb30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1cb40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20  p->nCursor );.. 
1cb50 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64   /* Find the ind
1cb60 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20  ex cursor. */.  
1cb70 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  pCx = p->apCsr[p
1cb80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1cb90 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64  t( pCx->deferred
1cba0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
1cbb0 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  Cx->seekResult =
1cbc0 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65   0;.  pCx->cache
1cbd0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1cbe0 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20  TALE;.  pCrsr = 
1cbf0 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20  pCx->pCursor;.. 
1cc00 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68   /* If any of th
1cc10 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c  e values are NUL
1cc20 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  L, take the jump
1cc30 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  . */.  nField = 
1cc40 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e  pCx->pKeyInfo->n
1cc50 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d  Field;.  for(ii=
1cc60 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69  0; ii<nField; ii
1cc70 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78  ++){.    if( aMx
1cc80 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
1cc90 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70  _Null ){.      p
1cca0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1ccb0 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30  .      pCrsr = 0
1ccc0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
1ccd0 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1cce0 74 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e  t( (aMx[nField].
1ccf0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1cd00 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  )==0 );..  if( p
1cd10 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
1cd20 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69  * Populate the i
1cd30 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e  ndex search key.
1cd40 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   */.    r.pKeyIn
1cd50 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e  fo = pCx->pKeyIn
1cd60 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1cd70 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20   = nField + 1;. 
1cd80 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1cd90 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41  ACKED_PREFIX_SEA
1cda0 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  RCH;.    r.aMem 
1cdb0 3d 20 61 4d 78 3b 0a 0a 20 20 20 20 2f 2a 20 45  = aMx;..    /* E
1cdc0 78 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  xtract the value
1cdd0 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73   of R from regis
1cde0 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73  ter P3. */.    s
1cdf0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1ce00 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
1ce10 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69     R = pIn3->u.i
1ce20 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68  ;..    /* Search
1ce30 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65   the B-Tree inde
1ce40 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63  x. If no conflic
1ce50 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66  ting record is f
1ce60 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a  ound, jump.    *
1ce70 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
1ce80 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77  se, copy the row
1ce90 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69  id of the confli
1cea0 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a  cting record to.
1ceb0 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20      ** register 
1cec0 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  P3 and fall thro
1ced0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1cee0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f  instruction.  */
1cef0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1cf00 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1cf10 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
1cf20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b  0, 0, &pCx->seek
1cf30 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28  Result);.    if(
1cf40 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41   (r.flags & UNPA
1cf50 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1cf60 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d  CH) || r.rowid==
1cf70 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  R ){.      pc = 
1cf80 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1cf90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49   }else{.      pI
1cfa0 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69  n3->u.i = r.rowi
1cfb0 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  d;.    }.  }.  b
1cfc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1cfd0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
1cfe0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1cff0 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   Use the content
1d000 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
1d010 61 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79  as a integer key
1d020 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a  .  If a record .
1d030 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79  ** with that key
1d040 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
1d050 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20  in table of P1, 
1d060 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1d070 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f   .** If the reco
1d080 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74  rd does exist, t
1d090 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20  hen fall thru.  
1d0a0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1d0b0 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20  ft .** pointing 
1d0c0 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66  to the record if
1d0d0 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a   it exists..**.*
1d0e0 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  * The difference
1d0f0 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70   between this op
1d100 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46  eration and NotF
1d110 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69  ound is that thi
1d120 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61  s.** operation a
1d130 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69  ssumes the key i
1d140 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  s an integer and
1d150 20 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61   that P1 is a ta
1d160 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e  ble whereas.** N
1d170 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20  otFound assumes 
1d180 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f  key is a blob co
1d190 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d  nstructed from M
1d1a0 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a  akeRecord and.**
1d1b0 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e   P1 is an index.
1d1c0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1d1d0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1d1e0 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61  , IsUnique.*/.ca
1d1f0 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
1d200 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1d210 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
1d220 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
1d230 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
1d240 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
1d250 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
1d260 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1d270 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1d280 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1d290 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d2a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d2b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d2c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1d2d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1d2e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1d2f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1d300 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1d310 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1d320 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73  Reg==0 );.  pCrs
1d330 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1d340 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20  .  if( pCrsr!=0 
1d350 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  ){.    res = 0;.
1d360 20 20 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d      iKey = pIn3-
1d370 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73  >u.i;.    rc = s
1d380 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d390 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1d3a0 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
1d3b0 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74  s);.    pC->last
1d3c0 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1d3d0 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  i;.    pC->rowid
1d3e0 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30  IsValid = res==0
1d3f0 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e   ?1:0;.    pC->n
1d400 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1d410 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1d420 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1d430 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1d440 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69  oveto = 0;.    i
1d450 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
1d460 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d470 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  - 1;.      asser
1d480 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1d490 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  lid==0 );.    }.
1d4a0 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75      pC->seekResu
1d4b0 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73  lt = res;.  }els
1d4c0 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  e{.    /* This h
1d4d0 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61  appens when an a
1d4e0 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61  ttempt to open a
1d4f0 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20   read cursor on 
1d500 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69  the .    ** sqli
1d510 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
1d520 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
1d530 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  MPTY..    */.   
1d540 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1d550 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
1d560 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1d570 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65  =0 );.    pC->se
1d580 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
1d590 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d5a0 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1d5b0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
1d5c0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
1d5d0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
1d5e0 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
1d5f0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
1d600 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
1d610 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
1d620 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
1d630 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1d640 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
1d650 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
1d660 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
1d670 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
1d680 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
1d690 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
1d6a0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
1d6b0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1d6c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1d6d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1d6e0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1d6f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
1d700 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1d710 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d720 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
1d730 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
1d740 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
1d750 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1d760 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
1d770 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
1d780 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
1d790 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
1d7a0 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
1d7b0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
1d7c0 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
1d7d0 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
1d7e0 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
1d7f0 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
1d800 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
1d810 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
1d820 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
1d830 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
1d840 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
1d850 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
1d860 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
1d870 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
1d880 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
1d890 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
1d8a0 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
1d8b0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
1d8c0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1d8d0 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
1d8e0 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
1d8f0 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
1d900 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
1d910 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
1d920 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
1d930 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
1d940 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  a SQLITE_FULL er
1d950 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1d960 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
1d970 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
1d980 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
1d990 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1d9a0 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
1d9b0 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1d9c0 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1d9d0 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1d9e0 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1d9f0 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1da00 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1da10 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1da20 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1da40 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
1da50 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1da60 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
1da70 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
1da80 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
1da90 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dab0 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
1dac0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1dad0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1daf0 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
1db00 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
1db10 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
1db20 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
1db30 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1db40 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
1db50 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
1db60 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
1db70 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
1db80 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
1db90 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
1dba0 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
1dbb0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1dbc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1dbd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1dbe0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1dbf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1dc00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1dc10 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
1dc20 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
1dc30 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
1dc40 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
1dc50 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
1dc60 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
1dc70 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
1dc80 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
1dc90 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
1dca0 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
1dcb0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
1dcc0 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
1dcd0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
1dce0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
1dcf0 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
1dd00 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
1dd10 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
1dd20 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
1dd30 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
1dd40 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
1dd50 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
1dd60 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
1dd70 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
1dd80 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
1dd90 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
1dda0 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
1ddb0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
1ddc0 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
1ddd0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
1dde0 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
1ddf0 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
1de00 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
1de10 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
1de20 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
1de30 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
1de40 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
1de50 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
1de60 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
1de70 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
1de80 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
1de90 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
1dea0 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
1deb0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
1dec0 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
1ded0 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
1dee0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
1def0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1df00 65 20 29 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30  e );.    cnt = 0
1df10 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1df20 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1df30 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1df40 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1df50 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1df60 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1df70 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1df80 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1df90 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1dfa0 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1dfb0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1dfc0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1dfd0 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1dfe0 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1dff0 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1e000 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1e010 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1e020 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1e030 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1e040 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1e050 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
1e060 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
1e070 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
1e080 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
1e090 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
1e0a0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76  Rowid ){.      v
1e0b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
1e0c0 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1e0d0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1e0e0 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20    if( v==0 ){.  
1e0f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e100 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1e110 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1e120 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1e130 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1e140 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1e150 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e160 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1e170 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1e180 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
1e190 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
1e1a0 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20  48074 */.       
1e1b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1e1c0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1e1d0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
1e1e0 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  lid(pC->pCursor)
1e1f0 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63   );.          rc
1e200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1e210 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
1e220 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
1e230 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
1e240 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
1e250 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
1e260 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
1e270 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  () */.          
1e280 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44  if( v==MAX_ROWID
1e290 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1e2a0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1e2b0 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1e2c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1e2d0 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
1e2e0 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
1e2f0 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d  7 */.          }
1e300 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1e310 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
1e320 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
1e330 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20  EMENT.      if( 
1e340 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
1e350 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1e360 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1e370 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1e380 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e390 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
1e3a0 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
1e3b0 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
1e3c0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
1e3d0 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
1e3e0 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
1e3f0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
1e400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73            /* Ass
1e410 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
1e420 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
1e430 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ll. */.         
1e440 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1e450 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
1e460 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d  ;.          pMem
1e470 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
1e480 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1e490 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e4a0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
1e4b0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
1e4c0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
1e4d0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1e4e0 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
1e4f0 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
1e500 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
1e510 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
1e520 7d 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  }..        REGIS
1e530 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1e540 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
1e550 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1e560 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
1e570 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1e580 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
1e590 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
1e5a0 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
1e5b0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
1e5c0 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d          if( pMem
1e5d0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
1e5e0 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
1e5f0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1e600 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1e610 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
1e620 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
1e630 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
1e640 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1e650 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
1e660 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
1e670 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
1e680 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
1e690 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20  .i + 1;.        
1e6a0 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e  }.        pMem->
1e6b0 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d  u.i = v;.      }
1e6c0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73  .#endif..      s
1e6d0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
1e6e0 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1e6f0 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57  ursor, v<MAX_ROW
1e700 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20  ID ? v+1 : 0);. 
1e710 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d     }.    if( pC-
1e720 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1e730 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
1e740 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
1e750 2d 34 38 35 39 38 2d 30 32 39 33 38 20 49 66 20  -48598-02938 If 
1e760 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
1e770 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
1e780 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
1e790 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
1e7a0 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
1e7b0 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
1e7c0 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
1e7d0 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
1e7e0 74 73 20 70 69 63 6b 69 6e 67 20 63 61 6e 64 69  ts picking candi
1e7f0 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72  date ROWIDs at r
1e800 61 6e 64 6f 6d 20 75 6e 74 69 6c 20 69 74 20 66  andom until it f
1e810 69 6e 64 73 20 6f 6e 65 0a 20 20 20 20 20 20 2a  inds one.      *
1e820 2a 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72  * that is not pr
1e830 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 0a 20  eviously used.. 
1e840 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
1e850 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
1e860 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f   );  /* We canno
1e870 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72  t be in random r
1e880 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69  owid mode if thi
1e890 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20  s is.           
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8b0 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52    ** an AUTOINCR
1e8c0 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a  EMENT table. */.
1e8d0 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 6c 61        v = db->la
1e8e0 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 63  stRowid;.      c
1e8f0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
1e900 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e  {.        if( cn
1e910 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66 66  t==0 && (v&0xfff
1e920 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20  fff)==v ){.     
1e930 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20       v++;.      
1e940 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1e950 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
1e960 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
1e970 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1e980 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26 3d  if( cnt<5 ) v &=
1e990 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20   0xffffff;.     
1e9a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 63 20     }.        rc 
1e9b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1e9c0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1e9d0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1e9e0 34 29 76 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  4)v, 0, &res);. 
1e9f0 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20         cnt++;.  
1ea00 20 20 20 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c      }while( cnt<
1ea10 31 30 30 20 26 26 20 72 63 3d 3d 53 51 4c 49 54  100 && rc==SQLIT
1ea20 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1ea30 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
1ea40 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
1ea50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
1ea60 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
1ea70 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
1ea80 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
1ea90 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1eaa0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1eab0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
1eac0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1ead0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1eae0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1eaf0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1eb00 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1eb10 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
1eb20 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
1eb30 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1eb40 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
1eb50 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74  P4 P5.**.** Writ
1eb60 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
1eb70 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
1eb80 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
1eb90 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
1eba0 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
1ebb0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
1ebc0 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
1ebd0 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
1ebe0 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
1ebf0 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
1ec00 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
1ec10 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
1ec20 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
1ec30 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
1ec40 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1ec50 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
1ec60 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
1ec70 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
1ec80 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1ec90 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1eca0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1ecb0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1ecc0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1ecd0 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1ece0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1ecf0 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1ed00 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1ed10 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1ed20 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1ed30 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1ed40 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1ed50 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1ed60 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1ed70 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1ed80 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
1ed90 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
1eda0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
1edb0 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
1edc0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
1edd0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
1ede0 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
1edf0 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
1ee00 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
1ee10 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1ee20 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
1ee30 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
1ee40 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
1ee50 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
1ee60 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
1ee70 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
1ee80 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
1ee90 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1eea0 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
1eeb0 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
1eec0 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
1eed0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
1eee0 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
1eef0 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
1ef00 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
1ef10 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
1ef20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
1ef30 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
1ef40 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
1ef50 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
1ef60 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
1ef70 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1ef80 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
1ef90 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1efa0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
1efb0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
1efc0 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
1efd0 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
1efe0 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
1eff0 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
1f000 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
1f010 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
1f020 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
1f030 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
1f040 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
1f050 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
1f060 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
1f070 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
1f080 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
1f090 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
1f0a0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
1f0b0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1f0c0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1f0d0 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
1f0e0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
1f0f0 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
1f100 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
1f110 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
1f120 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
1f130 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
1f140 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1f150 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
1f160 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
1f170 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
1f180 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
1f190 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
1f1a0 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
1f1b0 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
1f1c0 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
1f1d0 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
1f1e0 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
1f1f0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
1f200 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
1f210 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
1f220 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
1f230 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
1f240 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
1f250 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
1f260 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
1f270 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
1f280 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1f290 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
1f2a0 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
1f2b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1f2c0 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
1f2d0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
1f2e0 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1f2f0 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
1f300 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
1f310 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
1f320 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
1f330 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f340 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
1f350 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
1f360 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
1f370 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
1f380 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
1f390 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
1f3a0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
1f3b0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
1f3c0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f3d0 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
1f3e0 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
1f3f0 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
1f400 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
1f410 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  rd */.  i64 iKey
1f420 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1f430 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1f440 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1f450 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f460 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1f470 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
1f480 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
1f490 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
1f4a0 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
1f4b0 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
1f4c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
1f4d0 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70  ero-bytes to app
1f4e0 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  end */.  int see
1f4f0 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
1f500 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
1f510 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
1f520 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1f530 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1f540 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
1f550 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
1f560 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
1f570 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ok */.  const ch
1f580 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62  ar *zTbl; /* Tab
1f590 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  le name - used b
1f5a0 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f  y the opdate hoo
1f5b0 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  k */.  int op;  
1f5c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1f5d0 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
1f5e0 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
1f5f0 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
1f600 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
1f610 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1f620 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f630 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f640 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f650 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1f660 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1f670 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1f680 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1f690 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1f6a0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1f6b0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1f6c0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f6d0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
1f6e0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
1f6f0 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
1f700 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
1f710 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
1f720 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1f730 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1f740 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
1f750 49 6e 74 20 29 3b 0a 20 20 20 20 52 45 47 49 53  Int );.    REGIS
1f760 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1f770 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
1f780 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
1f790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
1f7a0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1f7b0 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
1f7c0 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
1f7d0 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
1f7e0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1f7f0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
1f800 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
1f810 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1f820 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
1f830 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65  >lastRowid = iKe
1f840 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
1f850 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1f860 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
1f870 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
1f880 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
1f890 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
1f8a0 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
1f8b0 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
1f8c0 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
1f8d0 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
1f8e0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
1f8f0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
1f900 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
1f910 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
1f920 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
1f930 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
1f940 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
1f950 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
1f960 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
1f970 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
1f980 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
1f990 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
1f9a0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
1f9b0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69  C->pCursor, 0, i
1f9c0 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Key,.           
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1f9e0 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
1f9f0 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50      pOp->p5 & OP
1fa20 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65  FLAG_APPEND, see
1fa30 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
1fa40 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1fa50 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  = 0;.  pC->defer
1fa60 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1fa70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1fa80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1fa90 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
1faa0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
1fab0 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
1fac0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1fad0 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
1fae0 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
1faf0 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20  p4.z ){.    zDb 
1fb00 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
1fb10 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54  b].zName;.    zT
1fb20 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  bl = pOp->p4.z;.
1fb30 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e      op = ((pOp->
1fb40 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
1fb50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
1fb60 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
1fb70 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65  NSERT);.    asse
1fb80 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1fb90 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  );.    db->xUpda
1fba0 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
1fbb0 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a  UpdateArg, op, z
1fbc0 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
1fbd0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1fbe0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
1fbf0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fc00 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
1fc10 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
1fc20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
1fc30 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
1fc40 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
1fc50 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
1fc60 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  **.** The cursor
1fc70 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
1fc80 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72  inting at either
1fc90 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
1fca0 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
1fcb0 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
1fcc0 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
1fcd0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1fce0 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
1fcf0 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
1fd00 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
1fd10 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
1fd20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20   Hence it is OK 
1fd30 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72  to delete.** a r
1fd40 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
1fd50 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a  n an Next loop..
1fd60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
1fd70 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
1fd80 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74   of P2 is set, t
1fd90 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
1fda0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
1fdb0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
1fdc0 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
1fdd0 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
1fde0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
1fdf0 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
1fe00 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
1fe10 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
1fe20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
1fe30 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69  not NULL, then i
1fe40 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  t is the name of
1fe50 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
1fe60 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e  P1 is.** pointin
1fe70 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74  g to.  The updat
1fe80 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e hook will be i
1fe90 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78  nvoked, if it ex
1fea0 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69  ists..** If P4 i
1feb0 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
1fec0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
1fed0 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  st have been pos
1fee0 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67  itioned.** using
1fef0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
1ff00 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
1ff10 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
1ff20 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
1ff30 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56  .  i64 iKey;.  V
1ff40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1ff50 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73    iKey = 0;.  as
1ff60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ff70 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ff80 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1ff90 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1ffa0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1ffb0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1ffc0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1ffd0 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69  );  /* Only vali
1ffe0 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65  d for real table
1fff0 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c  s, no pseudotabl
20000 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  es */..  /* If t
20010 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  he update-hook w
20020 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
20030 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20  set iKey to the 
20040 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a  rowid of the.  *
20050 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65  * row being dele
20060 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ted..  */.  if( 
20070 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
20080 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
20090 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
200a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
200b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
200c0 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20  owidIsValid );  
200d0 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74  /* lastRowid set
200e0 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f   by previous OP_
200f0 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20  NotFound */.    
20100 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52  iKey = pC->lastR
20110 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  owid;.  }..  /* 
20120 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70  The OP_Delete op
20130 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c  code always foll
20140 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69  ows an OP_NotExi
20150 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f  sts or OP_Last o
20160 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  r.  ** OP_Column
20170 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62   on the same tab
20180 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69  le without any i
20190 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61  ntervening opera
201a0 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20  tions that.  ** 
201b0 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e  might move or in
201c0 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72  validate the cur
201d0 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73  sor.  Hence curs
201e0 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20  or pC is always 
201f0 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f  pointing.  ** to
20200 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64   the row to be d
20210 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
20220 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
20230 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69  Moveto() operati
20240 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73  on.  ** below is
20250 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20   always a no-op 
20260 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e  and cannot fail.
20270 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74    We will run it
20280 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c   anyhow, though,
20290 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61  .  ** to guard a
202a0 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68  gainst future ch
202b0 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64  anges to the cod
202c0 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a  e generator..  *
202d0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
202e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
202f0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
20300 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
20310 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
20320 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
20330 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
20340 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20350 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  .  sqlite3BtreeS
20360 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
20370 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  ->pCursor, 0);. 
20380 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20390 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75  eeDelete(pC->pCu
203a0 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63  rsor);.  pC->cac
203b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
203c0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
203d0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
203e0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
203f0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
20400 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
20410 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
20420 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
20430 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
20440 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
20450 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
20460 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
20470 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  bl = pOp->p4.z;.
20480 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
20490 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
204a0 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
204b0 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c  ELETE, zDb, zTbl
204c0 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
204d0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
204e0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
204f0 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
20500 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
20510 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
20520 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
20530 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
20540 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
20550 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
20560 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
20570 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
20580 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
20590 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
205a0 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
205b0 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
205c0 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
205d0 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
205e0 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
205f0 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
20600 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
20610 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
20620 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
20630 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
20640 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
20650 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
20660 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
20670 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
20680 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20690 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50  de: RowData P1 P
206a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
206b0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
206c0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
206d0 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63  e row data for c
206e0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
206f0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
20700 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
20710 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
20720 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
20730 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
20740 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
20750 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
20760 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
20770 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
20780 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
20790 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
207a0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
207b0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
207c0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
207d0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
207e0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
207f0 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a  RowKey P1 P2 * *
20800 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69   *.**.** Write i
20810 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
20820 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
20830 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20   key for cursor 
20840 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
20850 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
20860 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
20870 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63  .** The key is c
20880 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
20890 33 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  3 register exact
208a0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
208b0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
208c0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
208d0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
208e0 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
208f0 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
20900 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
20910 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
20920 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
20930 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
20940 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63  ase OP_RowKey:.c
20950 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
20960 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
20970 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
20980 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
20990 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f    i64 n64;..  pO
209a0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
209b0 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  p2];..  /* Note 
209c0 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
209d0 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
209e0 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
209f0 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
20a00 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
20a10 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20a20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20a30 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20a40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20a50 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
20a60 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
20a70 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20  =OP_RowKey );.  
20a80 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e  assert( pC->isIn
20a90 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  dex || pOp->opco
20aa0 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
20ab0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
20ac0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20ad0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
20ae0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
20af0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
20b00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20b10 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
20b20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
20b30 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
20b40 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20b50 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
20b60 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  ) );..  /* The O
20b70 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
20b80 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
20b90 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
20ba0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
20bb0 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
20bc0 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
20bd0 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
20be0 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
20bf0 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
20c00 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
20c10 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nce the followin
20c20 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  g sqlite3VdbeCur
20c30 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
20c40 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   is always.  ** 
20c50 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20  a no-op and can 
20c60 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74  never fail.  But
20c70 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20   we leave it in 
20c80 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65 74  place as a safet
20c90 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  y..  */.  assert
20ca0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
20cb0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
20cc0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
20cd0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
20ce0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
20cf0 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
20d00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20d10 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ror;..  if( pC->
20d20 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 61  isIndex ){.    a
20d30 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
20d40 62 6c 65 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ble );.    rc = 
20d50 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
20d60 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
20d70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
20d80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
20d90 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
20da0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
20db0 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
20dc0 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
20dd0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
20de0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
20df0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
20e00 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
20e10 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
20e20 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
20e30 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
20e40 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a  ize(pCrsr, &n);.
20e50 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
20e60 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
20e70 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
20e80 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
20e90 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
20ea0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
20eb0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
20ec0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
20ed0 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  g;.    }.  }.  i
20ee0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
20ef0 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30  mGrow(pOut, n, 0
20f00 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
20f10 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _mem;.  }.  pOut
20f20 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65  ->n = n;.  MemSe
20f30 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
20f40 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28  MEM_Blob);.  if(
20f50 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
20f60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20f70 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
20f80 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
20f90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
20fa0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
20fb0 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
20fc0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
20fd0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
20fe0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
20ff0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
21000 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
21010 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
21020 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
21030 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
21040 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
21050 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
21060 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
21070 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
21080 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
21090 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
210a0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
210b0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
210c0 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
210d0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
210e0 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
210f0 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
21100 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
21110 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
21120 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
21130 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
21140 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
21150 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
21160 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
21170 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
21180 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
21190 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
211b0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
211c0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
211d0 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
211e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
211f0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
21200 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
21210 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
21220 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
21230 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
21240 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
21250 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21260 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21270 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21280 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
21290 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
212a0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
212b0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
212c0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
212d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
212e0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
212f0 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
21300 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
21310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21320 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21330 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
21340 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
21350 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
21360 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
21370 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
21380 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
21390 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
213a0 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
213b0 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
213c0 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61  >xRowid(pC->pVta
213d0 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  bCursor, &v);.  
213e0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
213f0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
21400 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
21410 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
21420 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72  ;.    pVtab->zEr
21430 72 4d 73 67 20 3d 20 30 3b 0a 23 65 6e 64 69 66  rMsg = 0;.#endif
21440 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
21450 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
21460 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
21470 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
21480 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
21490 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
214a0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
214b0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
214c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
214d0 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
214e0 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
214f0 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
21500 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
21510 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
21520 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
21530 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
21540 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
21550 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21560 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
21570 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
21580 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
21590 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
215a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
215b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
215c0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
215d0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
215e0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
215f0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
21600 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
21610 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
21620 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
21630 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
21640 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
21650 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
21660 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
21670 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
21680 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21690 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
216a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
216b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
216c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
216d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
216e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
216f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
21700 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
21710 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  lid = 0;.  if( p
21720 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
21730 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
21740 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
21750 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
21760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21770 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
21780 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
21790 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
217a0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
217b0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
217c0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
217d0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
217e0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
217f0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
21800 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
21810 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
21820 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
21830 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
21840 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21850 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
21860 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
21870 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
21880 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
21890 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
218a0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
218b0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
218c0 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
218d0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
218e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
218f0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21900 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
21910 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21920 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21930 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21940 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21950 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21960 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
21970 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
21980 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
21990 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d      res = 1;.  }
219a0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
219b0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
219c0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
219d0 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
219e0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
219f0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21a00 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
21a10 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21a20 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21a30 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21a40 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
21a50 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
21a60 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
21a70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
21a80 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
21a90 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21aa0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
21ab0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
21ac0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
21ad0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
21ae0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
21af0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
21b00 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
21b10 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
21b20 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
21b30 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
21b40 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
21b50 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
21b60 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
21b70 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
21b80 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
21b90 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
21ba0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
21bb0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
21bc0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
21bd0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
21be0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
21bf0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
21c00 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
21c10 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
21c20 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
21c30 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
21c40 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
21c50 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
21c60 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
21c70 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
21c80 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
21c90 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
21ca0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
21cb0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
21cc0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
21cd0 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
21ce0 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
21cf0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
21d00 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
21d10 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
21d20 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
21d30 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
21d40 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
21d50 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
21d60 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
21d70 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
21d80 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
21d90 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
21da0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
21db0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
21dc0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
21dd0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
21de0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
21df0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
21e00 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
21e10 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
21e20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
21e30 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
21e40 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
21e50 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
21e60 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
21e70 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
21e80 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
21e90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
21ea0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
21eb0 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
21ec0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
21ed0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21ee0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
21ef0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
21f00 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
21f10 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21f20 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21f30 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21f40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21f50 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
21f60 66 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e  f( (pCrsr = pC->
21f70 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20  pCursor)!=0 ){. 
21f80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
21f90 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
21fa0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
21fb0 61 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30  atFirst = res==0
21fc0 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64   ?1:0;.    pC->d
21fd0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
21fe0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
21ff0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22000 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  TALE;.    pC->ro
22010 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
22020 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73    }else{.    res
22030 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 1;.  }.  pC->
22040 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
22050 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
22060 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
22070 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
22080 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
22090 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
220a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
220b0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
220c0 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
220d0 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
220e0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
220f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
22100 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
22110 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
22120 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
22130 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
22140 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
22150 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
22160 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
22170 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
22180 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
22190 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
221a0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
221b0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
221c0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
221d0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
221e0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
221f0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
22200 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
22210 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
22220 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
22230 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
22240 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
22250 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
22260 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
22270 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
22280 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
22290 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a  also: Prev.*/./*
222a0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
222b0 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a   P2 * * P5.**.**
222c0 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
222d0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
222e0 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
222f0 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
22300 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
22310 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
22320 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
22330 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
22340 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
22350 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
22360 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
22370 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
22380 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
22390 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
223a0 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
223b0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
223c0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
223d0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
223e0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
223f0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22400 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
22410 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
22420 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
22430 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
22440 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
22450 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
22460 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
22470 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61  cremented..*/.ca
22480 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
22490 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
224a0 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20  case OP_Next: { 
224b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
224c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
224d0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
224e0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
224f0 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  ;..  CHECK_FOR_I
22500 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73 65  NTERRUPT;.  asse
22510 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22520 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22530 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
22540 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79  ( pOp->p5<=Array
22550 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
22560 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
22570 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22580 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20   if( pC==0 ){.  
22590 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65    break;  /* See
225a0 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f   ticket #2273 */
225b0 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70  .  }.  pCrsr = p
225c0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
225d0 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
225e0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
225f0 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  1;.    break;.  
22600 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61  }.  res = 1;.  a
22610 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
22620 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22630 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    rc = pOp->opco
22640 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71  de==OP_Next ? sq
22650 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
22660 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20  Crsr, &res) :.  
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22680 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
22690 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
226a0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
226b0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
226c0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61  u8)res;.  pC->ca
226d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
226e0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
226f0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
22700 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
22710 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
22720 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
22730 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
22740 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
22750 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
22760 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
22770 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
22780 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
22790 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
227a0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
227b0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
227c0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
227d0 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20  lds a SQL index 
227e0 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
227f0 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
22800 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
22810 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
22820 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
22830 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
22840 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
22850 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
22860 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67  .** P3 is a flag
22870 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
22880 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
22890 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74  ree layer that t
228a0 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73  his.** insert is
228b0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
228c0 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54   append..**.** T
228d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
228e0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
228f0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
22900 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
22910 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
22920 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
22930 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
22940 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
22950 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
22960 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
22970 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
22980 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
22990 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
229a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
229b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
229c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
229d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
229e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
229f0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 32   pC!=0 );.  pIn2
22a00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
22a10 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
22a20 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
22a30 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
22a40 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22a50 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
22a60 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
22a70 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
22a80 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45  =0 );.    rc = E
22a90 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
22aa0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
22ab0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22ac0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
22ad0 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
22ae0 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
22af0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
22b00 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
22b10 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
22b20 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
22b30 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
22b40 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
22b50 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
22b60 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
22b70 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
22b80 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
22b90 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
22ba0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
22bb0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
22bc0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
22bd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22be0 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
22bf0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
22c00 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
22c10 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
22c20 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
22c30 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
22c40 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
22c50 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
22c60 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
22c70 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
22c80 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
22c90 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
22ca0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
22cb0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
22cc0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
22cd0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
22ce0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
22cf0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
22d00 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
22d10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
22d20 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
22d30 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ->p3<=p->nMem+1 
22d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22d50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22d60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22d70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22d80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22d90 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22da0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
22db0 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
22dc0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
22dd0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
22de0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
22df0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
22e00 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
22e10 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
22e20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
22e30 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20  Op->p2];.    rc 
22e40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
22e50 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
22e60 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
22e70 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  es);.    if( rc=
22e80 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
22e90 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  s==0 ){.      rc
22ea0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22eb0 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20  elete(pCrsr);.  
22ec0 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
22ed0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
22ee0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
22ef0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22f00 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
22f10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22f20 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
22f30 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22f40 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
22f50 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
22f60 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
22f70 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
22f80 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
22f90 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
22fa0 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
22fb0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
22fc0 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
22fd0 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
22fe0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
22ff0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
23000 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
23010 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
23020 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
23030 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
23040 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
23050 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
23060 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
23070 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
23080 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
23090 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
230a0 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
230b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
230c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
230d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
230e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
230f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23100 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
23110 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
23120 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
23130 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c  M_Null;.  if( AL
23140 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
23150 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
23160 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23170 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
23180 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f  NEVER(rc) ) goto
23190 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
231a0 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ror;.    assert(
231b0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
231c0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
231d0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
231e0 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  e==0 );.    if( 
231f0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
23200 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23210 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
23220 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
23230 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
23240 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
23250 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
23260 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23270 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75       }.      pOu
23280 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
23290 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
232a0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
232b0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
232c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
232d0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
232e0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
232f0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
23300 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
23310 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
23320 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
23330 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
23340 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
23350 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
23360 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
23370 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
23380 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
23390 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
233a0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
233b0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
233c0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
233d0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
233e0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
233f0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
23400 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
23410 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
23420 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
23430 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
23440 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
23450 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
23460 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
23470 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
23480 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
23490 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
234a0 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
234b0 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
234c0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
234d0 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
234e0 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
234f0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
23500 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
23510 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
23520 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
23530 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
23540 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
23550 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
23560 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
23570 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
23580 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
23590 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
235a0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
235b0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
235c0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
235d0 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
235e0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
235f0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
23600 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
23610 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
23620 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
23630 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
23640 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
23650 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
23660 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
23670 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
23680 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
23690 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
236a0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
236b0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
236c0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
236d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
236e0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
236f0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
23700 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
23710 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a  psilon prior .**
23720 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
23730 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20  on.  This makes 
23740 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
23750 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63  like IdxLE..*/.c
23760 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
23770 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23780 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
23790 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
237a0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
237b0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
237c0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
237d0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
237e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
237f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23800 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23810 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23820 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23830 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
23840 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
23850 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
23860 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23870 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
23880 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
23890 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
238a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
238b0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
238c0 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
238d0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
238e0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
238f0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
23900 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
23910 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  5 ){.      r.fla
23920 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
23930 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44  CRKEY | UNPACKED
23940 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
23950 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23960 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
23970 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b  ED_IGNORE_ROWID;
23980 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65  .    }.    r.aMe
23990 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
239a0 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  3];.    rc = sql
239b0 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
239c0 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72  mpare(pC, &r, &r
239d0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  es);.    if( pOp
239e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
239f0 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  LT ){.      res 
23a00 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73  = -res;.    }els
23a10 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
23a20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
23a30 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20  _IdxGE );.      
23a40 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  res++;.    }.   
23a50 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
23a60 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
23a70 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d   - 1 ;.    }.  }
23a80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23a90 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
23aa0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
23ab0 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
23ac0 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
23ad0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
23ae0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
23af0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
23b00 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
23b10 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
23b20 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
23b30 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
23b40 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
23b50 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
23b60 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
23b70 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
23b80 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
23b90 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
23ba0 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
23bb0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
23bc0 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
23bd0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
23be0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
23bf0 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
23c00 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
23c10 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
23c20 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
23c30 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
23c40 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
23c50 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
23c60 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
23c70 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
23c80 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
23c90 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
23ca0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
23cb0 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
23cc0 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
23cd0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
23ce0 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
23cf0 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
23d00 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
23d10 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
23d20 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
23d30 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65  no page .** move
23d40 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
23d50 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74  d (because the t
23d60 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
23d70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a  ed was already .
23d80 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  ** the last one 
23d90 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
23da0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
23db0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
23dc0 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54  er P2..** If AUT
23dd0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
23de0 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
23df0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
23e00 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
23e10 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
23e20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
23e30 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
23e40 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
23e50 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
23e60 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65  int iCnt;.  Vdbe
23e70 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69   *pVdbe;.  int i
23e80 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  Db;.#ifndef SQLI
23e90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23ea0 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
23eb0 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
23ec0 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
23ed0 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
23ee0 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
23ef0 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
23f00 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
23f10 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f  dbe->inVtabMetho
23f20 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63  d<2 && pVdbe->pc
23f30 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e  >=0 ){.      iCn
23f40 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  t++;.    }.  }.#
23f50 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62  else.  iCnt = db
23f60 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b  ->activeVdbeCnt;
23f70 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
23f80 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
23f90 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
23fa0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
23fb0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
23fc0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
23fd0 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
23fe0 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
23ff0 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
24000 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
24010 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
24020 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
24030 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  )!=0 );.    rc =
24040 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
24050 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
24060 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
24070 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
24080 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
24090 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
240a0 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
240b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
240c0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
240d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
240e0 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
240f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
24100 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26  3RootPageMoved(&
24110 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d  db->aDb[iDb], iM
24120 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
24130 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
24140 61 4f 6e 46 61 75 6c 74 20 3d 20 31 3b 0a 20 20  aOnFault = 1;.  
24150 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
24160 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24170 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
24180 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
24190 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
241a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
241b0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
241c0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
241d0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
241e0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
241f0 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
24200 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
24210 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
24220 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
24230 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
24240 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
24250 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
24260 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
24270 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
24280 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
24290 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
242a0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
242b0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
242c0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
242d0 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
242e0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
242f0 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
24300 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
24310 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
24320 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
24330 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
24340 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
24350 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
24360 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
24370 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
24380 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
24390 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
243a0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
243b0 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
243c0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
243d0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
243e0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
243f0 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
24400 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
24410 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
24420 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
24430 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
24440 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
24450 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
24460 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
24470 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
24480 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
24490 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
244a0 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
244b0 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
244c0 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
244d0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
244e0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
244f0 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a  pOp->p2))!=0 );.
24500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24510 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
24520 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
24530 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
24540 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
24550 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
24560 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
24570 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
24580 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
24590 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
245a0 29 7b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  ){.      aMem[pO
245b0 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
245c0 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
245d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
245e0 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
245f0 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
24600 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
24610 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
24620 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
24630 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
24640 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
24650 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
24660 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
24670 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
24680 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
24690 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
246a0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
246b0 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
246c0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
246d0 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
246e0 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
246f0 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
24700 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
24710 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
24720 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
24730 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
24740 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
24750 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
24760 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
24770 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
24780 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
24790 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
247a0 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
247b0 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
247c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c  2 * * *.**.** Al
247d0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
247e0 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
247f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
24800 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
24810 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
24820 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
24830 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
24840 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
24850 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
24860 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
24870 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
24880 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
24890 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
248a0 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
248b0 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
248c0 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
248d0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
248e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
248f0 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
24900 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
24910 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
24920 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
24930 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
24940 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
24950 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
24960 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
24970 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
24980 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
24990 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
249a0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
249b0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
249c0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
249d0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
249e0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
249f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24a00 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
24a10 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
24a20 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
24a30 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
24a40 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
24a50 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
24a60 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c   BTREE_LEAFDATA|
24a70 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
24a80 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
24a90 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54   = BTREE_ZERODAT
24aa0 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  A;.  }.  rc = sq
24ab0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
24ac0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
24ad0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
24ae0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
24af0 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
24b00 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
24b10 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34  chema P1 P2 * P4
24b20 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
24b30 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
24b40 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
24b50 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
24b60 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
24b70 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
24b80 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
24b90 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66  4.  P2 is the "f
24ba0 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c  orce" flag.   Al
24bb0 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70  ways do.** the p
24bc0 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20  arsing if P2 is 
24bd0 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20  true.  If P2 is 
24be0 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73  false, then this
24bf0 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a   routine is a.**
24c00 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63   no-op if the sc
24c10 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72  hema is not curr
24c20 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49  ently loaded.  I
24c30 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
24c40 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65  f P2.** is false
24c50 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  , the SQLITE_MAS
24c60 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c  TER table is onl
24c70 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20  y parsed if the 
24c80 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73  rest of the.** s
24c90 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79  chema is already
24ca0 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65   loaded into the
24cb0 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a   symbol table..*
24cc0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
24cd0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
24ce0 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
24cf0 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
24d00 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
24d10 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
24d20 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
24d30 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
24d40 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
24d50 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
24d60 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
24d70 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24d80 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
24d90 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
24da0 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69 44   initData;..  iD
24db0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
24dc0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
24dd0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
24de0 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32  .  /* If pOp->p2
24df0 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69 73   is 0, then this
24e00 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67   opcode is being
24e10 20 65 78 65 63 75 74 65 64 20 74 6f 20 72 65 61   executed to rea
24e20 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  d a.  ** single 
24e30 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  row, for example
24e40 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73 70   the row corresp
24e50 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77 20  onding to a new 
24e60 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61 74  index.  ** creat
24e70 65 64 20 62 79 20 74 68 69 73 20 56 44 42 45 2c  ed by this VDBE,
24e80 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65   from the sqlite
24e90 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 49  _master table. I
24ea0 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73  t only.  ** does
24eb0 20 74 68 69 73 20 69 66 20 74 68 65 20 63 6f 72   this if the cor
24ec0 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65  responding in-me
24ed0 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20 63  mory schema is c
24ee0 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f  urrently.  ** lo
24ef0 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  aded. Otherwise,
24f00 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20 64   the new index d
24f10 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65  efinition can be
24f20 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20   loaded along.  
24f30 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65 73 74  ** with the rest
24f40 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 77   of the schema w
24f50 68 65 6e 20 69 74 20 69 73 20 72 65 71 75 69 72  hen it is requir
24f60 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c  ed..  **.  ** Al
24f70 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65 78  though the mutex
24f80 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65 64   on the BtShared
24f90 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 72   object that cor
24fa0 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a  responds to.  **
24fb0 20 64 61 74 61 62 61 73 65 20 69 44 62 20 28 74   database iDb (t
24fc0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
24fd0 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69 74  aining the sqlit
24fe0 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20  e_master table. 
24ff0 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69 73   ** read by this
25000 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69 73   instruction) is
25010 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c   currently held,
25020 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
25030 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20   to.  ** obtain 
25040 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 61  the mutexes on a
25050 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
25060 62 61 73 65 73 20 62 65 66 6f 72 65 20 63 68 65  bases before che
25070 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68  cking if.  ** th
25080 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62 20  e schema of iDb 
25090 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73 20  is loaded. This 
250a0 69 73 20 62 65 63 61 75 73 65 2c 20 61 74 20 74  is because, at t
250b0 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a  he start of.  **
250c0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65   the sqlite3_exe
250d0 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20  c() call below, 
250e0 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f  SQLite will invo
250f0 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ke .  ** sqlite3
25100 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e  BtreeEnterAll().
25110 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73 20   If all mutexes 
25120 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  are not already 
25130 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69  held, the.  ** i
25140 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65 20  Db mutex may be 
25150 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c 65  temporarily rele
25160 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64 65  ased to avoid de
25170 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a  adlock. If .  **
25180 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20 74   this happens, t
25190 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 74  hen some other t
251a0 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74 65  hread may delete
251b0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a   the in-memory .
251c0 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20 64    ** schema of d
251d0 61 74 61 62 61 73 65 20 69 44 62 20 62 65 66 6f  atabase iDb befo
251e0 72 65 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  re the SQL state
251f0 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20 73  ment runs. The s
25200 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20  chema.  ** will 
25210 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64 20  not be reloaded 
25220 62 65 63 75 61 73 65 20 74 68 65 20 64 62 2d 3e  becuase the db->
25230 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20 69  init.busy flag i
25240 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a  s set. This.  **
25250 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61   can result in a
25260 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   "no such table:
25270 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20   sqlite_master" 
25280 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20  or "malformed.  
25290 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
252a0 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20  ma" error being 
252b0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
252c0 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  user..  */.  ass
252d0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
252e0 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e  eHoldsMutex(db->
252f0 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b  aDb[iDb].pBt) );
25300 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45  .  sqlite3BtreeE
25310 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69  nterAll(db);.  i
25320 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62  f( pOp->p2 || Db
25330 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
25340 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
25350 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61  aded) ){.    zMa
25360 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
25370 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e  BLE(iDb);.    in
25380 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
25390 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
253a0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
253b0 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
253c0 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
253d0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
253e0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
253f0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
25400 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
25410 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
25420 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
25430 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
25440 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
25450 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
25460 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
25470 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
25480 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
25490 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
254a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
254b0 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
254c0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
254d0 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
254e0 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
254f0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
25500 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
25510 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
25520 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
25530 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
25540 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
25550 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
25560 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
25570 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
25580 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
25590 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
255a0 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
255b0 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
255c0 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
255d0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  .  sqlite3BtreeL
255e0 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20 20 69  eaveAll(db);.  i
255f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
25600 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
25610 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
25620 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
25630 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25640 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
25650 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
25660 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
25670 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
25680 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
25690 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
256a0 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
256b0 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
256c0 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
256d0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
256e0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
256f0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
25700 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
25710 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
25720 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
25730 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
25740 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
25750 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
25760 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25770 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
25780 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
25790 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
257a0 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62  b, pOp->p1);.  b
257b0 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
257c0 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
257d0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
257e0 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
257f0 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
25800 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
25810 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
25820 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
25830 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
25840 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
25850 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
25860 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
25870 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
25880 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
25890 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
258a0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
258b0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
258c0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
258d0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
258e0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
258f0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
25900 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
25910 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
25920 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
25930 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
25940 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
25950 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25960 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
25970 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
25980 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
25990 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
259a0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
259b0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
259c0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
259d0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
259e0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
259f0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
25a00 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
25a10 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
25a20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
25a30 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
25a40 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
25a50 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
25a60 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
25a70 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
25a80 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
25a90 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
25aa0 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
25ab0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
25ac0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25ad0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
25ae0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
25af0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
25b00 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
25b10 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
25b20 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
25b30 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
25b40 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
25b50 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
25b60 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
25b70 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
25b80 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
25b90 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
25ba0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
25bb0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
25bc0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
25bd0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
25be0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
25bf0 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
25c00 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
25c10 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
25c20 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
25c30 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
25c40 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
25c50 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
25c60 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
25c70 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
25c80 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
25c90 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
25ca0 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
25cb0 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
25cc0 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
25cd0 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
25ce0 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
25cf0 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
25d00 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
25d10 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
25d20 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
25d30 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
25d40 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
25d50 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
25d60 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
25d70 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
25d80 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
25d90 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
25da0 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
25db0 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
25dc0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
25dd0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
25de0 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
25df0 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
25e00 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
25e10 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
25e20 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
25e30 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
25e40 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
25e50 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
25e60 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
25e70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
25e80 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
25e90 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
25ea0 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
25eb0 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
25ec0 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
25ed0 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
25ee0 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
25ef0 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
25f00 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
25f10 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
25f20 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
25f30 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
25f40 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
25f50 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
25f60 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
25f70 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
25f80 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
25f90 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
25fa0 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
25fb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25fc0 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
25fd0 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
25fe0 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
25ff0 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
26000 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
26010 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
26020 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
26030 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
26040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
26050 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
26060 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
26070 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
26080 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
26090 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
260a0 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
260b0 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
260c0 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
260d0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
260e0 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
260f0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
26100 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20  */.  .  nRoot = 
26110 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
26120 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
26130 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
26140 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
26150 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
26160 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
26170 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
26180 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
26190 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
261a0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
261b0 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
261c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
261d0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
261e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
261f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
26200 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
26210 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
26220 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
26230 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
26240 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
26250 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
26260 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
26270 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
26280 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
26290 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
262a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
262b0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
262c0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
262d0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
262e0 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a  ->p5))!=0 );.  z
262f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
26300 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
26310 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
26320 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
26330 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
26340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26350 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
26360 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  .i, &nErr);.  sq
26370 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
26380 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d  aRoot);.  pnErr-
26390 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
263a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
263b0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
263c0 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
263d0 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
263e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
263f0 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
26400 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
26410 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
26420 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
26430 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
26440 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
26450 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
26460 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
26470 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
26480 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
26490 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
264a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
264b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
264c0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
264d0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
264e0 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
264f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  * * *.**.** Inse
26500 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
26510 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
26520 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
26530 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
26540 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
26550 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
26560 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
26570 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
26580 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
26590 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
265a0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
265b0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
265c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
265d0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
265e0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
265f0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
26600 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
26610 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
26620 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
26630 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
26640 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
26650 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
26660 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
26670 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
26680 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
26690 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
266a0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
266b0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
266c0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
266d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
266e0 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
266f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  * *.**.** Extrac
26700 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
26710 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
26720 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
26730 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
26740 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
26750 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
26760 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
26770 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
26780 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
26790 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
267a0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
267b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
267c0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
267d0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
267e0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
267f0 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
26800 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e 31 20  TERRUPT;.  pIn1 
26810 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
26820 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
26830 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
26840 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
26850 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
26860 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
26870 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
26880 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
26890 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
268a0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
268b0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
268c0 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
268d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
268e0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
268f0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
26900 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
26910 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
26920 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
26930 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
26940 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
26950 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
26960 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
26970 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  4.**.** Register
26980 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
26990 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
269a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
269b0 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
269c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
269d0 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
269e0 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
269f0 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
26a00 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
26a10 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
26a20 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
26a30 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
26a40 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
26a50 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
26a60 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
26a70 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
26a80 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
26a90 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
26aa0 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
26ab0 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
26ac0 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
26ad0 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
26ae0 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
26af0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
26b00 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
26b10 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
26b20 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
26b30 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
26b40 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
26b50 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
26b60 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
26b70 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
26b80 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
26b90 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
26ba0 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
26bb0 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
26bc0 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
26bd0 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
26be0 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
26bf0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
26c00 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
26c10 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
26c20 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
26c30 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
26c40 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
26c50 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
26c60 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
26c70 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
26c80 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
26c90 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
26ca0 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
26cb0 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
26cc0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
26cd0 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
26ce0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
26cf0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
26d00 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
26d10 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
26d20 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
26d30 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
26d40 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
26d50 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
26d60 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
26d70 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
26d80 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
26d90 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
26da0 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
26db0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
26dc0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26de0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
26df0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
26e00 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
26e10 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
26e20 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
26e30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
26e40 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
26e50 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
26e60 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
26e70 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
26e80 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
26e90 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
26ea0 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
26eb0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
26ec0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
26ed0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
26ee0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
26ef0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
26f00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
26f10 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
26f20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
26f30 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
26f40 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
26f50 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
26f60 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
26f70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
26f80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26f90 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
26fa0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
26fb0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
26fc0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
26fd0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
26fe0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
26ff0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
27000 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
27010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27020 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f    (u8)(iSet>=0 ?
27030 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78   iSet & 0xf : 0x
27040 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ff),.           
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a      pIn3->u.i);.
27070 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
27080 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
27090 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
270a0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
270b0 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
270c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
270d0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
270e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
270f0 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
27100 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
27110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
27120 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
27130 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
27140 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
27150 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
27160 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
27170 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
27180 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
27190 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
271a0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
271b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
271c0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
271d0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
271e0 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
271f0 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
27200 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
27210 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
27220 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
27230 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
27240 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
27250 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
27260 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
27270 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
27280 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
27290 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
272a0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
272b0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
272c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
272d0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
272e0 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
272f0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
27300 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
27310 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
27320 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
27330 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
27340 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
27350 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
27360 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
27370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
27380 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
27390 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
273a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
273b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
273c0 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
273d0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
273e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27400 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
27410 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
27420 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
27430 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27450 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
27460 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
27470 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
27480 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
27490 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
274a0 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
274b0 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
274c0 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
274d0 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
274e0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
274f0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
27500 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
27510 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
27520 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
27530 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
27540 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
27550 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
27560 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
27570 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
27580 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
27590 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
275a0 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
275b0 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
275c0 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
275d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
275e0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
275f0 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
27600 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
27610 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
27620 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
27630 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
27640 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
27650 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
27660 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
27670 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
27680 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
27690 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
276a0 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
276b0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
276c0 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
276d0 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
276e0 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
276f0 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
27700 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
27710 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
27720 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
27730 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
27740 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
27750 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
27760 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
27770 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
27780 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
27790 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
277a0 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
277b0 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
277c0 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
277d0 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
277e0 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
277f0 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
27800 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
27810 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
27820 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
27830 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
27840 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
27850 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
27860 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
27870 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
27880 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
27890 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
278a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
278b0 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
278c0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
278d0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
278e0 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
278f0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
27900 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
27910 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
27920 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
27930 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
27940 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
27950 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
27960 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
27970 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
27980 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
27990 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
279a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
279b0 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20  too many levels 
279c0 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72  of trigger recur
279d0 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61  sion");.    brea
279e0 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67  k;.  }..  /* Reg
279f0 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65  ister pRt is use
27a00 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d  d to store the m
27a10 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74  emory required t
27a20 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65  o save the state
27a30 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72  .  ** of the cur
27a40 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e  rent program, an
27a50 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  d the memory req
27a60 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uired at runtime
27a70 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a   to execute.  **
27a80 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
27a90 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72  gram. If this tr
27aa0 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66  igger has been f
27ab0 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65  ired before, the
27ac0 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61  n pRt .  ** is a
27ad0 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
27ae0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
27af0 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
27b00 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28  zed.  */.  if( (
27b10 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  pRt->flags&MEM_F
27b20 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  rame)==0 ){.    
27b30 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
27b40 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
27b50 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
27b60 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
27b70 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
27b80 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
27b90 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
27ba0 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
27bb0 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
27bc0 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
27bd0 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
27be0 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
27bf0 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
27c00 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
27c10 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
27c20 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
27c30 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
27c40 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
27c50 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
27c60 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
27c70 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42  am->nCsr;.    nB
27c80 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
27c90 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
27cb0 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
27cc0 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
27cd0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
27ce0 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
27cf0 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70 46  ursor *);.    pF
27d00 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62  rame = sqlite3Db
27d10 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e  MallocZero(db, n
27d20 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
27d30 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
27d40 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
27d50 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
27d60 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74  beMemRelease(pRt
27d70 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67  );.    pRt->flag
27d80 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20  s = MEM_Frame;. 
27d90 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65     pRt->u.pFrame
27da0 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20   = pFrame;..    
27db0 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
27dc0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
27dd0 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
27de0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
27df0 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
27e00 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
27e10 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46  >pc = pc;.    pF
27e20 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
27e30 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
27e40 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
27e50 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
27e60 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
27e70 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
27e80 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
27e90 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
27ea0 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
27eb0 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
27ec0 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
27ed0 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
27ee0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20 20  am->token;..    
27ef0 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
27f00 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
27f10 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
27f20 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
27f30 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
27f40 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
27f50 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
27f60 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
27f70 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d 65  _Null;.      pMe
27f80 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
27f90 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
27fa0 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
27fb0 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
27fc0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
27fd0 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
27fe0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
27ff0 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
28000 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
28010 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
28020 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
28030 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e  rt( pc==pFrame->
28040 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
28050 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
28060 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
28070 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
28080 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  e->lastRowid = d
28090 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
280a0 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
280b0 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
280c0 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
280d0 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
280e0 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20  rame;.  p->aMem 
280f0 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72  = aMem = &VdbeFr
28100 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d  ameMem(pFrame)[-
28110 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  1];.  p->nMem = 
28120 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
28130 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
28140 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
28150 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
28160 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
28170 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
28180 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70  Mem+1];.  p->aOp
28190 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61   = aOp = pProgra
281a0 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70  m->aOp;.  p->nOp
281b0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
281c0 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20 20  ;.  pc = -1;..  
281d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
281e0 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
281f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
28200 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
28210 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
28220 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
28230 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
28240 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
28250 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
28260 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
28270 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
28280 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
28290 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
282a0 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
282b0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
282c0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
282d0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
282e0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
282f0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
28300 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
28310 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
28320 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
28330 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
28340 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
28350 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
28360 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
28370 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
28380 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
28390 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
283a0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
283b0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
283c0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
283d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
283e0 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
283f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
28400 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
28410 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
28420 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
28430 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
28440 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
28450 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
28460 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
28470 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
28480 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
28490 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
284a0 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
284b0 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
284c0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
284d0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
284e0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
284f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28500 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
28510 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
28520 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
28530 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e  *.**.** Incremen
28540 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20  t a "constraint 
28550 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28  counter" by P2 (
28560 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69  P2 may be negati
28570 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e  ve or positive).
28580 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
28590 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62  -zero, the datab
285a0 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  ase constraint c
285b0 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
285c0 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72  ented .** (defer
285d0 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  red foreign key 
285e0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74  constraints). Ot
285f0 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69  herwise, if P1 i
28600 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20  s zero, the .** 
28610 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65  statement counte
28620 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
28630 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
28640 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
28650 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nts)..*/.case OP
28660 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20  _FkCounter: {.  
28670 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
28680 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
28690 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
286a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
286b0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b  >nFkConstraint +
286c0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20  = pOp->p2;.  }. 
286d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
286e0 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50  code: FkIfZero P
286f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
28700 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
28710 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
28720 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
28730 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
28740 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
28750 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
28760 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
28770 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
28780 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
28790 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
287a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
287b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
287c0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
287d0 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
287e0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
287f0 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
28800 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
28810 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
28820 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
28830 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
28840 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
28850 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
28860 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
28870 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
28880 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
28890 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
288a0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
288b0 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
288c0 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
288d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
288e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
288f0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  {.    if( db->nD
28900 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 29  eferredCons==0 )
28910 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
28920 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
28930 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  ( p->nFkConstrai
28940 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70  nt==0 ) pc = pOp
28950 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
28960 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
28970 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
28980 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
28990 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
289a0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
289b0 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
289c0 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
289d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73   * *.**.** P1 is
289e0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
289f0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
28a00 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f   this VM (the ro
28a10 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64  ot frame is.** d
28a20 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
28a30 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20  e current frame 
28a40 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  if this instruct
28a50 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65  ion is being exe
28a60 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20  cuted.** within 
28a70 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20  a sub-program). 
28a80 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Set the value of
28a90 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
28aa0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a  the maximum of .
28ab0 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  ** its current v
28ac0 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c  alue and the val
28ad0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
28ae0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
28af0 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73  struction throws
28b00 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
28b10 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
28b20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a  not initially.**
28b30 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
28b40 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20  case OP_MemMax: 
28b50 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
28b60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a  */.  Mem *pIn1;.
28b70 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
28b80 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
28b90 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
28ba0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
28bb0 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
28bc0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
28bd0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
28be0 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
28bf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
28c00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
28c10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
28c20 5d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  ];.  }.  sqlite3
28c30 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
28c40 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
28c50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
28c60 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
28c70 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
28c80 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
28c90 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
28ca0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
28cb0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
28cc0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
28cd0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
28ce0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
28cf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
28d00 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  os P1 P2 * * *.*
28d10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
28d20 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
28d30 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
28d40 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  , jump to P2..**
28d50 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
28d60 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
28d70 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
28d80 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
28d90 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
28da0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
28db0 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
28dc0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
28dd0 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
28de0 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
28df0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
28e00 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
28e10 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
28e20 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
28e30 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
28e40 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
28e50 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
28e60 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
28e70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28e80 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32  ode: IfNeg P1 P2
28e90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
28ea0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
28eb0 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
28ec0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70   than zero, jump
28ed0 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49   to P2. .**.** I
28ee0 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
28ef0 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
28f00 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
28f10 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
28f20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
28f30 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
28f40 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
28f50 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
28f60 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
28f70 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f  fNeg: {        /
28f80 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
28f90 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28fa0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28fb0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
28fc0 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
28fd0 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
28fe0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
28ff0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
29000 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29010 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  IfZero P1 P2 P3 
29020 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
29030 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
29040 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
29050 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20  r.  Add literal 
29060 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c  P3 to the.** val
29070 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
29080 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c  1.  If the resul
29090 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20  t is exactly 0, 
290a0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
290b0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
290c0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
290d0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
290e0 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
290f0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29100 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29110 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
29120 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
29130 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
29140 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  OP_IfZero: {    
29150 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
29160 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
29170 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
29180 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
29190 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
291a0 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
291b0 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31  ->p3;.  if( pIn1
291c0 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  ->u.i==0 ){.    
291d0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
291e0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
291f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
29200 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
29210 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
29220 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
29230 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
29240 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
29250 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
29260 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
29270 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
29280 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
29290 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
292a0 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
292b0 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65  on.  Use registe
292c0 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61  r.** P3 as the a
292d0 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
292e0 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
292f0 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
29300 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
29310 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
29320 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ors..*/.case OP_
29330 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
29340 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d   n;.  int i;.  M
29350 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
29360 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33  *pRec;.  sqlite3
29370 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
29380 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
29390 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f  apVal;..  n = pO
293a0 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
293b0 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20   n>=0 );.  pRec 
293c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
293d0 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
293e0 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
293f0 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
29400 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
29410 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20   i++, pRec++){. 
29420 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52     apVal[i] = pR
29430 65 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ec;.    sqlite3V
29440 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
29450 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78  pRec);.  }.  ctx
29460 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
29470 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
29480 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
29490 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
294a0 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
294b0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
294c0 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
294d0 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
294e0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
294f0 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
29500 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
29510 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
29520 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
29530 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
29540 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
29550 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  oll = 0;.  if( c
29560 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
29570 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
29580 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
29590 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
295a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
295b0 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
295c0 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
295d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
295e0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
295f0 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
29600 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
29610 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
29620 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
29630 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
29640 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73  l);.  if( ctx.is
29650 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
29660 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
29670 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
29680 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
29690 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
296a0 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
296b0 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
296c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
296d0 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62  ase(&ctx.s);.  b
296e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
296f0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
29700 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
29710 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
29720 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
29730 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
29740 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
29750 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
29760 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
29770 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
29780 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
29790 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
297a0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
297b0 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
297c0 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
297d0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
297e0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
297f0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
29800 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
29810 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
29820 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
29830 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
29840 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
29850 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
29860 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
29870 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
29880 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
29890 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
298a0 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
298b0 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
298c0 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
298d0 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
298e0 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
298f0 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
29900 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
29910 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
29920 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
29930 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
29940 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
29950 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
29960 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29970 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
29980 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
29990 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
299a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
299b0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
299c0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
299d0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
299e0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
299f0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
29a00 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
29a10 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
29a20 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
29a30 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
29a40 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e  ng(pMem, encodin
29a50 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
29a60 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b  _BLOBSIZE(pMem);
29a70 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
29a80 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d  beMemTooBig(pMem
29a90 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
29aa0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
29ab0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66  ak;.}...#if !def
29ac0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29ad0 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
29ae0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29af0 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
29b00 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a  de: Vacuum * * *
29b10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
29b20 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
29b30 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63  abase.  This opc
29b40 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f  ode will cause o
29b50 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  ther virtual.** 
29b60 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63  machines to be c
29b70 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20  reated and run. 
29b80 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63   It may not be c
29b90 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
29ba0 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69  n.** a transacti
29bb0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
29bc0 61 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d 20  acuum: {.  rc = 
29bd0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
29be0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
29bf0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
29c00 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
29c10 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
29c20 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
29c30 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
29c40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
29c50 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
29c60 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
29c70 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
29c80 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
29c90 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
29ca0 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
29cb0 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
29cc0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
29cd0 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
29ce0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
29cf0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
29d00 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
29d10 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
29d20 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
29d30 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
29d40 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
29d50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
29d60 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
29d70 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
29d80 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
29d90 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
29da0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
29db0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72  Op->p1].pBt;.  r
29dc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29dd0 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b  IncrVacuum(pBt);
29de0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
29df0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63  E_DONE ){.    pc
29e00 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
29e10 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
29e20 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OK;.  }.  break;
29e30 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
29e40 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20  code: Expire P1 
29e50 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61  * * * *.**.** Ca
29e60 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20  use precompiled 
29e70 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65  statements to be
29e80 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e  come expired. An
29e90 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
29ea0 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68  nt.** fails with
29eb0 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f   an error code o
29ec0 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  f SQLITE_SCHEMA 
29ed0 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78  if it is ever ex
29ee0 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20  ecuted .** (via 
29ef0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e  sqlite3_step()).
29f00 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73  .** .** If P1 is
29f10 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c   0, then all SQL
29f20 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f   statements beco
29f30 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50  me expired. If P
29f40 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a  1 is non-zero,.*
29f50 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20  * then only the 
29f60 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
29f70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ing statement is
29f80 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63   affected. .*/.c
29f90 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b  ase OP_Expire: {
29fa0 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20  .  if( !pOp->p1 
29fb0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  ){.    sqlite3Ex
29fc0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
29fd0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65  ements(db);.  }e
29fe0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69  lse{.    p->expi
29ff0 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  red = 1;.  }.  b
2a000 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
2a010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2a020 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63  RED_CACHE./* Opc
2a030 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50  ode: TableLock P
2a040 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
2a050 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
2a060 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
2a070 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
2a080 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
2a090 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
2a0a0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
2a0b0 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
2a0c0 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
2a0d0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
2a0e0 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
2a0f0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
2a100 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
2a110 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
2a120 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
2a130 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
2a140 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
2a150 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
2a160 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
2a170 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
2a180 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
2a190 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
2a1a0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
2a1b0 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
2a1c0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
2a1d0 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
2a1e0 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
2a1f0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
2a200 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
2a210 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
2a220 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
2a230 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
2a240 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
2a250 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
2a260 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
2a270 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
2a280 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
2a290 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
2a2a0 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
2a2b0 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
2a2c0 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
2a2d0 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
2a2e0 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
2a2f0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
2a300 26 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b  & (1<<p1))!=0 );
2a310 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57  .    assert( isW
2a320 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69  riteLock==0 || i
2a330 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b  sWriteLock==1 );
2a340 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2a350 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28  3BtreeLockTable(
2a360 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c  db->aDb[p1].pBt,
2a370 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74   pOp->p2, isWrit
2a380 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20  eLock);.    if( 
2a390 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54  (rc&0xFF)==SQLIT
2a3a0 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
2a3b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
2a3c0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
2a3d0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2a3e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2a3f0 20 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74   db, "database t
2a400 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
2a410 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20  %s", z);.    }. 
2a420 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2a430 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2a440 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2a450 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2a460 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a470 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2a480 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34   VBegin * * * P4
2a490 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20   *.**.** P4 may 
2a4a0 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  be a pointer to 
2a4b0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2a4c0 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f  structure. If so
2a4d0 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78  , call the .** x
2a4e0 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72  Begin method for
2a4f0 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a   that table..**.
2a500 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72  ** Also, whether
2a510 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65   or not P4 is se
2a520 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  t, check that th
2a530 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20  is is not being 
2a540 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77  called from.** w
2a550 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  ithin a callback
2a560 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
2a570 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68  ble xSync() meth
2a580 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68  od. If it is, th
2a590 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20  e error.** code 
2a5a0 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53  will be set to S
2a5b0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
2a5c0 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
2a5d0 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54   {.  VTable *pVT
2a5e0 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f  ab;.  pVTab = pO
2a5f0 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72  p->p4.pVtab;.  r
2a600 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42  c = sqlite3VtabB
2a610 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b  egin(db, pVTab);
2a620 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 7b 0a  .  if( pVTab ){.
2a630 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2a640 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2a650 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
2a660 67 20 3d 20 70 56 54 61 62 2d 3e 70 56 74 61 62  g = pVTab->pVtab
2a670 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
2a680 56 54 61 62 2d 3e 70 56 74 61 62 2d 3e 7a 45 72  VTab->pVtab->zEr
2a690 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  rMsg = 0;.  }.  
2a6a0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2a6b0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2a6c0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2a6d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a6e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a6f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
2a700 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
2a710 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
2a720 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
2a730 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
2a740 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
2a750 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
2a760 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
2a770 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
2a780 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
2a790 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2a7a0 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
2a7b0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
2a7c0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
2a7d0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2a7e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2a7f0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2a800 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a810 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2a820 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
2a830 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
2a840 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
2a850 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
2a860 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
2a870 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
2a880 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
2a890 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2a8a0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
2a8b0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
2a8c0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
2a8d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2a8e0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
2a8f0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2a900 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
2a910 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
2a920 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2a930 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2a940 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2a950 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a960 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a970 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
2a980 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
2a990 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2a9a0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2a9b0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2a9c0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2a9d0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
2a9e0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
2a9f0 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
2aa00 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
2aa10 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
2aa20 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
2aa30 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
2aa40 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
2aa50 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
2aa60 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2aa70 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2aa80 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2aa90 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2aaa0 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
2aab0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2aac0 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30  ule;..  pCur = 0
2aad0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2aae0 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
2aaf0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2ab00 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2ab10 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
2ab20 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
2ab30 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
2ab40 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
2ab50 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2ab60 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
2ab70 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
2ab80 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
2ab90 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
2aba0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2abb0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
2abc0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
2abd0 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
2abe0 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
2abf0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
2ac00 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
2ac10 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
2ac20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2ac30 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
2ac40 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76   /* Initialise v
2ac50 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
2ac60 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
2ac70 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
2ac80 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
2ac90 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
2aca0 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
2acb0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
2acc0 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
2acd0 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65     pCur->pModule
2ace0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2acf0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2ad00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2ad10 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2ad20 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f  d = 1;.      pMo
2ad30 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74  dule->xClose(pVt
2ad40 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
2ad50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ad60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ad70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ad80 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2ad90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2ada0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2adb0 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
2adc0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50   P3 P4 *.**.** P
2add0 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70  1 is a cursor op
2ade0 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e  ened using VOpen
2adf0 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72  .  P2 is an addr
2ae00 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2ae10 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65  f.** the filtere
2ae20 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  d result set is 
2ae30 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  empty..**.** P4 
2ae40 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  is either NULL o
2ae50 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  r a string that 
2ae60 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  was generated by
2ae70 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a   the xBestIndex.
2ae80 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
2ae90 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e   module.  The in
2aea0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
2aeb0 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73  the P4 string is
2aec0 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20   left.** to the 
2aed0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
2aee0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
2aef0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2af00 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2af10 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75  hod on the virtu
2af20 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69  al table specifi
2af30 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68  ed.** by P1.  Th
2af40 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20  e integer query 
2af50 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74  plan parameter t
2af60 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f  o xFilter is sto
2af70 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
2af80 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20  ** P3. Register 
2af90 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20  P3+1 stores the 
2afa0 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74  argc parameter t
2afb0 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74  o be passed to t
2afc0 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65  he.** xFilter me
2afd0 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20  thod. Registers 
2afe0 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20  P3+2..P3+1+argc 
2aff0 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20  are the argc.** 
2b000 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d  additional param
2b010 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20  eters which are 
2b020 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69  passed to.** xFi
2b030 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65  lter as argv. Re
2b040 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f  gister P3+2 beco
2b050 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e  mes argv[0] when
2b060 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74   passed to xFilt
2b070 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70  er..**.** A jump
2b080 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69   is made to P2 i
2b090 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
2b0a0 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67   after filtering
2b0b0 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e   would be empty.
2b0c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c  .*/.case OP_VFil
2b0d0 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ter: {   /* jump
2b0e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a   */.  int nArg;.
2b0f0 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20    int iQuery;.  
2b100 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2b110 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2b120 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20   Mem *pQuery;.  
2b130 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71  Mem *pArgc;.  sq
2b140 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
2b150 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
2b160 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2b170 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72  pVtab;.  VdbeCur
2b180 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74  sor *pCur;.  int
2b190 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   res;.  int i;. 
2b1a0 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20   Mem **apArg;.. 
2b1b0 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b   pQuery = &aMem[
2b1c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67  pOp->p3];.  pArg
2b1d0 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a  c = &pQuery[1];.
2b1e0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2b1f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45  r[pOp->p1];.  RE
2b200 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2b210 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20  ->p3, pQuery);. 
2b220 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2b230 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2b240 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43  pVtabCursor = pC
2b250 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b  ur->pVtabCursor;
2b260 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62  .  pVtab = pVtab
2b270 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2b280 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2b290 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
2b2a0 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
2b2b0 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
2b2c0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
2b2d0 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
2b2e0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
2b2f0 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
2b300 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
2b310 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
2b320 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
2b330 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
2b340 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
2b350 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
2b360 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20  ethod */.  {.   
2b370 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70   res = 0;.    ap
2b380 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
2b390 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69      for(i = 0; i
2b3a0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2b3b0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70     apArg[i] = &p
2b3c0 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20  Argc[i+1];.     
2b3d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b3e0 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b 69  toreType(apArg[i
2b3f0 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ]);.    }..    p
2b400 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2b410 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   1;.    rc = pMo
2b420 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
2b430 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72  tabCursor, iQuer
2b440 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
2b450 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20  rg, apArg);.    
2b460 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2b470 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
2b480 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
2b490 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
2b4a0 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
2b4b0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74  zErrMsg;.    pVt
2b4c0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
2b4d0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2b4e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2b4f0 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
2b500 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29  Eof(pVtabCursor)
2b510 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
2b520 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
2b530 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2b540 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72      }.  }.  pCur
2b550 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a  ->nullRow = 0;..
2b560 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2b570 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2b580 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2b590 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2b5a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2b5b0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
2b5c0 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
2b5d0 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
2b5e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2b5f0 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
2b600 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
2b610 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
2b620 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
2b630 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
2b640 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
2b650 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
2b660 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
2b670 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2b680 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
2b690 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2b6a0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
2b6b0 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
2b6c0 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
2b6d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2b6e0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2b6f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b700 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2b710 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
2b720 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2b730 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
2b740 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
2b750 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
2b760 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
2b770 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2b780 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
2b790 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  est);.    break;
2b7a0 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
2b7b0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2b7c0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2b7d0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2b7e0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
2b7f0 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20  Module->xColumn 
2b800 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f  );.  memset(&sCo
2b810 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66  ntext, 0, sizeof
2b820 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20  (sContext));..  
2b830 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65  /* The output ce
2b840 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68  ll may already h
2b850 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c  ave a buffer all
2b860 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a  ocated. Move.  *
2b870 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f  * the current co
2b880 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65  ntents to sConte
2b890 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  xt.s so in case 
2b8a0 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
2b8b0 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20  n .  ** can use 
2b8c0 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f  the already allo
2b8d0 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73  cated buffer ins
2b8e0 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69  tead of allocati
2b8f0 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f  ng a .  ** new o
2b900 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
2b910 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73  e3VdbeMemMove(&s
2b920 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74  Context.s, pDest
2b930 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  );.  MemSetTypeF
2b940 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  lag(&sContext.s,
2b950 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72   MEM_Null);..  r
2b960 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
2b970 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62  lumn(pCur->pVtab
2b980 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78  Cursor, &sContex
2b990 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
2b9a0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2b9b0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2b9c0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
2b9d0 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
2b9e0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
2b9f0 30 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  0;.  if( sContex
2ba00 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
2ba10 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
2ba20 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
2ba30 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
2ba40 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
2ba50 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
2ba60 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
2ba70 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
2ba80 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
2ba90 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
2baa0 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rred to ensure a
2bab0 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20  ny.  ** dynamic 
2bac0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43  allocation in sC
2bad0 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20  ontext.s (a Mem 
2bae0 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65  struct) is  rele
2baf0 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ased..  */.  sql
2bb00 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2bb10 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74  coding(&sContext
2bb20 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
2bb30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2bb40 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e  ove(pDest, &sCon
2bb50 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53  text.s);.  REGIS
2bb60 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2bb70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
2bb80 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2bb90 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
2bba0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2bbb0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2bbc0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2bbd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2bbe0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2bbf0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2bc00 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2bc10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bc20 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2bc30 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2bc40 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2bc50 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2bc60 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2bc70 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2bc80 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2bc90 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2bca0 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2bcb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2bcc0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2bcd0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2bce0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2bcf0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2bd00 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2bd10 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2bd20 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2bd30 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2bd40 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2bd50 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2bd60 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2bd70 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2bd80 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2bd90 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2bda0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2bdb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2bdc0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2bdd0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2bde0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2bdf0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2be00 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2be10 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2be20 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2be30 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2be40 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2be50 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2be60 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2be70 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2be80 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2be90 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2bea0 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2beb0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2bec0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2bed0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2bee0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2bef0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2bf00 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2bf10 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2bf20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2bf30 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2bf40 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2bf50 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2bf60 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2bf70 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2bf80 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2bf90 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2bfa0 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2bfb0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2bfc0 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
2bfd0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
2bfe0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
2bff0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2c000 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
2c010 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
2c020 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
2c030 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
2c040 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
2c050 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
2c060 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
2c070 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2c080 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
2c090 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2c0a0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2c0b0 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21  r);.  }..  if( !
2c0c0 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
2c0d0 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
2c0e0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
2c0f0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2c100 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2c110 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2c120 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2c130 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2c140 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2c150 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2c160 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31  code: VRename P1
2c170 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2c180 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2c190 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2c1a0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2c1b0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2c1c0 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
2c1d0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2c1e0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
2c1f0 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54  Rename method. T
2c200 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72  he value.** in r
2c210 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61  egister P1 is pa
2c220 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d  ssed as the zNam
2c230 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
2c240 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
2c250 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65  ..*/.case OP_VRe
2c260 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  name: {.  sqlite
2c270 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2c280 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20   Mem *pName;..  
2c290 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2c2a0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2c2b0 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f  pName = &aMem[pO
2c2c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c2d0 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  ( pVtab->pModule
2c2e0 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52  ->xRename );.  R
2c2f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2c300 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
2c310 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
2c320 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
2c330 29 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d  );.  rc = pVtab-
2c340 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
2c350 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e  e(pVtab, pName->
2c360 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  z);.  sqlite3DbF
2c370 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
2c380 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
2c390 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
2c3a0 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
2c3b0 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 62 72 65  rMsg = 0;..  bre
2c3c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2c3d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c3e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2c3f0 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
2c400 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
2c410 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2c420 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2c430 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2c440 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2c450 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2c460 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2c470 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2c480 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
2c490 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
2c4a0 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
2c4b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
2c4c0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
2c4d0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
2c4e0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
2c4f0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
2c500 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
2c510 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
2c520 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
2c530 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
2c540 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
2c550 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
2c560 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
2c570 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
2c580 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
2c590 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
2c5a0 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
2c5b0 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
2c5c0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
2c5d0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
2c5e0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
2c5f0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
2c600 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
2c610 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
2c620 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
2c630 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
2c640 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
2c650 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
2c660 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
2c670 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
2c680 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2c690 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
2c6a0 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
2c6b0 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
2c6c0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
2c6d0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
2c6e0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
2c6f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
2c700 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
2c710 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
2c720 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
2c730 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
2c740 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
2c750 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
2c760 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
2c770 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
2c780 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
2c790 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
2c7a0 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
2c7b0 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
2c7c0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
2c7d0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
2c7e0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
2c7f0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
2c800 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2c810 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
2c820 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
2c830 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
2c840 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
2c850 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2c860 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2c870 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2c880 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
2c890 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
2c8a0 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
2c8b0 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
2c8c0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2c8d0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2c8e0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
2c8f0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
2c900 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2c910 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
2c920 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c930 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
2c940 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
2c950 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29  Module->xUpdate)
2c960 20 29 7b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   ){.    apArg = 
2c970 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
2c980 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2c990 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
2c9a0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2c9b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2c9c0 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58 29 3b  emStoreType(pX);
2c9d0 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2c9e0 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
2c9f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
2ca00 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
2ca10 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
2ca20 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
2ca30 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
2ca40 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
2ca50 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
2ca60 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
2ca70 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45  g;.    pVtab->zE
2ca80 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69  rrMsg = 0;.    i
2ca90 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2caa0 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20   && pOp->p1 ){. 
2cab0 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
2cac0 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
2cad0 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
2cae0 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
2caf0 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
2cb00 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
2cb10 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e    }.    p->nChan
2cb20 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ge++;.  }.  brea
2cb30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2cb40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2cb50 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2cb60 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
2cb70 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
2cb80 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
2cb90 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
2cba0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
2cbb0 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
2cbc0 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
2cbd0 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
2cbe0 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
2cbf0 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
2cc00 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
2cc10 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2cc20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
2cc30 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
2cc40 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f  tPage(db->aDb[pO
2cc50 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62  p->p1].pBt);.  b
2cc60 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2cc70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cc80 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63  MIT_TRACE./* Opc
2cc90 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a  ode: Trace * * *
2cca0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74   P4 *.**.** If t
2ccb0 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  racing is enable
2ccc0 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65  d (by the sqlite
2ccd0 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72  3_trace()) inter
2cce0 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  face, then.** th
2ccf0 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63  e UTF-8 string c
2cd00 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69  ontained in P4 i
2cd10 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65  s emitted on the
2cd20 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
2cd30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63  .*/.case OP_Trac
2cd40 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72  e: {.  char *zTr
2cd50 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d  ace;..  zTrace =
2cd60 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
2cd70 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
2cd80 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
2cd90 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
2cda0 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  xTrace ){.      
2cdb0 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65  char *z = sqlite
2cdc0 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70  3VdbeExpandSql(p
2cdd0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 20  , zTrace);.     
2cde0 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
2cdf0 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20  pTraceArg, z);. 
2ce00 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
2ce10 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20 20 7d  ee(db, z);.    }
2ce20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2ce30 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 64 62  EBUG.    if( (db
2ce40 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2ce50 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b  _SqlTrace)!=0 ){
2ce60 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65  .      sqlite3De
2ce70 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74  bugPrintf("SQL-t
2ce80 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72  race: %s\n", zTr
2ce90 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ace);.    }.#end
2cea0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
2ceb0 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61  UG */.  }.  brea
2cec0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
2ced0 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
2cee0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
2cef0 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
2cf00 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
2cf10 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
2cf20 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
2cf30 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
2cf40 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
2cf50 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
2cf60 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
2cf70 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
2cf80 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
2cf90 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
2cfa0 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
2cfb0 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
2cfc0 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
2cfd0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
2cfe0 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
2cff0 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
2d000 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
2d010 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
2d020 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
2d030 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
2d040 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
2d050 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
2d060 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
2d070 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
2d080 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
2d090 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2d0a0 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
2d0b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
2d0c0 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
2d0d0 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
2d0e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d0f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d120 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
2d130 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
2d140 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
2d150 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
2d160 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
2d170 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
2d180 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
2d190 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
2d1a0 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
2d1b0 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
2d1c0 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
2d1d0 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
2d1e0 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
2d1f0 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
2d200 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
2d210 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
2d220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
2d260 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
2d270 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
2d280 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
2d290 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
2d2a0 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
2d2b0 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
2d2c0 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
2d2d0 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
2d2e0 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
2d2f0 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
2d300 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
2d310 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
2d320 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
2d330 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f  out, origPc, &aO
2d340 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64  p[origPc]);.#end
2d350 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  if.    }.#endif.
2d360 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
2d370 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
2d380 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
2d390 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
2d3a0 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
2d3b0 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
2d3c0 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
2d3d0 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
2d3e0 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
2d3f0 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
2d400 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
2d410 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
2d420 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
2d430 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
2d440 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
2d450 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
2d460 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
2d470 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
2d480 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
2d490 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
2d4a0 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
2d4b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2d4c0 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
2d4d0 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
2d4e0 66 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e  f( rc!=0 ) fprin
2d4f0 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d  tf(p->trace,"rc=
2d500 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
2d510 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
2d520 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f  s & (OPFLG_OUT2_
2d530 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47  PRERELEASE|OPFLG
2d540 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
2d550 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
2d560 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70  p->trace, pOp->p
2d570 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
2d580 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
2d590 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
2d5a0 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
2d5b0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
2d5c0 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63  terTrace(p->trac
2d5d0 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  e, pOp->p3, &aMe
2d5e0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
2d5f0 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
2d600 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
2d610 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
2d620 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
2d630 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
2d640 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
2d650 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
2d660 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
2d670 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
2d680 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
2d690 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
2d6a0 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
2d6b0 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
2d6c0 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
2d6d0 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
2d6e0 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
2d6f0 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
2d700 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
2d710 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
2d720 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
2d730 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
2d740 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
2d750 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
2d760 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
2d770 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
2d780 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
2d790 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
2d7a0 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
2d7b0 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
2d7c0 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
2d7d0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
2d7e0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2d7f0 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
2d800 6d 61 4f 6e 46 61 75 6c 74 20 29 20 73 71 6c 69  maOnFault ) sqli
2d810 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
2d820 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 0a  Schema(db, 0);..
2d830 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
2d840 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
2d850 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
2d860 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
2d870 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
2d880 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
2d890 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
2d8a0 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
2d8b0 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
2d8c0 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  rn:.  sqlite3Btr
2d8d0 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76  eeMutexArrayLeav
2d8e0 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20  e(&p->aMutex);. 
2d8f0 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f   return rc;..  /
2d900 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
2d910 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  f a string or bl
2d920 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53  ob larger than S
2d930 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
2d940 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74  .  ** is encount
2d950 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62  ered..  */.too_b
2d960 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74  ig:.  sqlite3Set
2d970 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2d980 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20  sg, db, "string 
2d990 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22  or blob too big"
2d9a0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2d9b0 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20  _TOOBIG;.  goto 
2d9c0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2d9d0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d9e0 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ere if a malloc(
2d9f0 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f  ) fails..  */.no
2da00 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c  _mem:.  db->mall
2da10 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2da20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2da30 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2da40 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
2da50 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
2da60 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20  E_NOMEM;.  goto 
2da70 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
2da80 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2da90 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65  ere for any othe
2daa0 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20  r kind of fatal 
2dab0 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22  error.  The "rc"
2dac0 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73   variable.  ** s
2dad0 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65  hould hold the e
2dae0 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a  rror number..  *
2daf0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  /.abort_due_to_e
2db00 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20  rror:.  assert( 
2db10 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b  p->zErrMsg==0 );
2db20 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
2db30 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53  cFailed ) rc = S
2db40 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69  QLITE_NOMEM;.  i
2db50 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  f( rc!=SQLITE_IO
2db60 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
2db70 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2db80 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2db90 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2dba0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d  ErrStr(rc));.  }
2dbb0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2dbc0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
2dbd0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74  ump to here if t
2dbe0 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  he sqlite3_inter
2dbf0 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20  rupt() API sets 
2dc00 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20  the interrupt.  
2dc10 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62  ** flag..  */.ab
2dc20 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
2dc30 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20  rupt:.  assert( 
2dc40 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
2dc50 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53  pted );.  rc = S
2dc60 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
2dc70 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
2dc80 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2dc90 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2dca0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2dcb0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
2dcc0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2dcd0 61 6c 74 3b 0a 7d 0a                             alt;.}.